UNPKG

@n1k1t/mock-server

Version:

Powerful util to setup mocks over HTTP APIs

54 lines 2.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AnalyticsService = void 0; const rxjs_1 = require("rxjs"); const utils_1 = require("../utils"); const models_1 = require("../models"); const logger_1 = require("../../logger"); const config_1 = __importDefault(require("../../config")); const logger = logger_1.Logger.build('Services.Analytics'); class AnalyticsService extends models_1.Service { iterateRedisKeys(prefix) { if (!this.server.databases.redis) { return (0, rxjs_1.of)(); } const { systemKeyPrefix } = config_1.default.get('database'); const subject = new rxjs_1.Subject(); const match = `${this.server.databases.redis.options.keyPrefix ?? ''}${prefix ?? ''}*`; const stream = this.server.databases.redis.scanStream({ match }); stream.once('end', () => setImmediate(() => subject.complete())); stream.once('error', (error) => { logger.error('Got error while scan execution', error?.stack ?? error); stream.close(); subject.error(error); }); stream.on('data', (keys) => keys.forEach((key) => key.includes(systemKeyPrefix) ? null : subject.next(key))); return subject.asObservable(); } async calculateRedisUsage(prefix) { if (!this.server.databases.redis) { return { count: 0, bytes: 0 }; } const converter = utils_1.RxConverter.build(this.iterateRedisKeys(prefix)); const result = { count: 0, bytes: 0 }; for await (const key of converter.iterate()) { const usage = await this.server.databases.redis.call('MEMORY', 'USAGE', key).catch((error) => { logger.error('Got error while fetching memory usage', error?.stack ?? error); throw error; }); result.count += 1; result.bytes += Number(usage); } return result; } static build(server) { return new AnalyticsService(server); } } exports.AnalyticsService = AnalyticsService; //# sourceMappingURL=analytics.service.js.map