@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
61 lines • 2.57 kB
JavaScript
;
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