@n1k1t/mock-server
Version:
Powerful util to setup mocks over HTTP APIs
43 lines • 1.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnalyticsService = void 0;
const models_1 = require("../models");
const logger_1 = require("../../logger");
const logger = logger_1.Logger.build('Services.Analytics');
class AnalyticsService extends models_1.Service {
async calculateRedisUsage(prefix) {
if (!this.server.databases.redis) {
return { count: 0, bytes: 0 };
}
return new Promise((resolve, reject) => {
const match = `${this.server.databases.redis.options.keyPrefix ?? ''}${prefix ?? ''}*`;
const stream = this.server.databases.redis.scanStream({ match });
const result = { count: 0, bytes: 0 };
stream.once('end', () => resolve(result));
stream.once('error', (error) => {
logger.error('Got error while scan execution', error?.stack ?? error);
stream.close();
reject(error);
});
stream.on('data', async (keys) => {
stream.pause();
result.count += keys.length;
const usage = await Promise
.all(keys.map(async (key) => this.server.databases.redis.call('MEMORY', 'USAGE', key)))
.catch((error) => {
logger.error('Got error while fetching memory usage', error?.stack ?? error);
stream.close();
reject(error);
return [];
});
usage.forEach((bytes) => result.bytes += Number(bytes));
stream.resume();
});
});
}
static build(server) {
return new AnalyticsService(server);
}
}
exports.AnalyticsService = AnalyticsService;
//# sourceMappingURL=analytics.service.js.map