UNPKG

@n1k1t/mock-server

Version:

The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations

61 lines 2.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RedisService = 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 RedisService extends models_1.Service { iterate(match = '*', options) { if (!this.server.databases.redis) { return (0, rxjs_1.of)(); } const trim = (options?.trim && this.server.databases.redis.options.keyPrefix) ? this.server.databases.redis.options.keyPrefix : null; const ignore = options?.ignore ?? [ config_1.default.get('containers').persistence.key, config_1.default.get('history').persistence.key, ]; const subject = new rxjs_1.Subject(); const stream = this.server.databases.redis.scanStream({ match: `${this.server.databases.redis.options.keyPrefix ?? ''}${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) => ignore.some((nested) => key.includes(nested)) ? null : subject.next(trim ? key.replace(trim, '') : key))); return subject.asObservable(); } async usage(prefix) { if (!this.server.databases.redis) { return { count: 0, bytes: 0 }; } const converter = utils_1.RxConverter.build(this.iterate(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 RedisService(server); } } exports.RedisService = RedisService; //# sourceMappingURL=redis.service.js.map