@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
72 lines • 2.99 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContainersService = void 0;
const models_1 = require("../models");
const utils_1 = require("../../utils");
const utils_2 = require("../utils");
const logger_1 = require("../../logger");
const config_1 = __importDefault(require("../../config"));
const logger = logger_1.Logger.build('Services.Containers');
class ContainersService extends models_1.Service {
async restore() {
if (!this.server.databases.redis) {
return null;
}
const { persistence } = config_1.default.get('containers');
if (!persistence.isEnabled) {
return null;
}
const converter = utils_2.RxConverter.build(this.server.services.redis.iterate([persistence.key, '*'].join(':'), {
ignore: [],
trim: true,
}));
for await (const key of converter.iterate()) {
const raw = await this.server.databases.redis.get(key).catch((error) => {
logger.error(`Got error while fetching payload by key [${key}]`, error?.stack ?? error);
return null;
});
if (!raw) {
continue;
}
const parsed = (0, utils_1.parseJsonSafe)(raw);
if (parsed.status === 'ERROR') {
logger.error('Got error while parsing cache', parsed.error?.stack ?? parsed.error);
continue;
}
this.server.providers.system.storages.containers.restore(parsed.result);
}
}
async backup() {
if (!this.server.databases.redis) {
return null;
}
const { persistence } = config_1.default.get('containers');
if (!persistence.isEnabled) {
return null;
}
for (const provider of this.server.providers.extract()) {
const key = [persistence.key, provider.group].join(':');
if (!provider.storages.history.size) {
await this.server.databases.redis.del(key);
continue;
}
const payload = JSON.stringify([...provider.storages.containers.values()].map((container) => container.toBackup()));
await this.server.databases.redis.setex(key, persistence.ttl, payload);
}
}
/** Flushes expired containers and aliases */
flush() {
this.server.providers.extract().forEach((provider) => provider.storages.containers.expired().forEach((container) => {
container.unbind();
logger.info(`Container [${container.key}] has unbinded by expiration of [${container.ttl}] seconds`);
}));
}
static build(server) {
return new ContainersService(server);
}
}
exports.ContainersService = ContainersService;
//# sourceMappingURL=containers.service.js.map