UNPKG

@n1k1t/mock-server

Version:

Powerful util to setup mocks over HTTP APIs

43 lines 1.83 kB
"use strict"; 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