@forzalabs/remora
Version:
A powerful CLI tool for seamless data translation.
66 lines (65 loc) • 3.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Affirm_1 = __importDefault(require("../../core/Affirm"));
const DSTE_1 = __importDefault(require("../../core/dste/DSTE"));
const DatabaseEngine_1 = __importDefault(require("../../database/DatabaseEngine"));
const Helper_1 = __importDefault(require("../../helper/Helper"));
const Settings_1 = __importDefault(require("../../helper/Settings"));
class UsageManagerClass {
constructor() {
/**
* TODO: I need to group the usage stats into a bucket daily. When and how I do it is still a question...
*/
this.getTodayBucketId = (consumer) => {
(0, Affirm_1.default)(consumer, `Invalid consumer`);
const now = DSTE_1.default.now();
return `${consumer.name}_${now.getUTCFullYear()}_${now.getUTCMonth()}_${now.getUTCDate()}`.toLowerCase();
};
this.startUsage = (consumer, details) => {
const { user, invokedBy } = details;
const newUsage = {
_id: Helper_1.default.uuid(),
consumer: consumer.name,
startedAt: DSTE_1.default.now(),
executedBy: user,
itemsCount: -1,
status: 'started',
invokedBy: invokedBy !== null && invokedBy !== void 0 ? invokedBy : 'UNKNOWN',
_signature: '',
stats: null
};
if (Helper_1.default.isDev())
return { usageId: newUsage._id, usage: Promise.resolve(newUsage) };
const updateRes = DatabaseEngine_1.default.upsert(Settings_1.default.db.collections.usage, newUsage._id, newUsage);
return { usageId: newUsage._id, usage: updateRes };
};
this.endUsage = (usageId, itemsCount, stats) => {
const update = {
itemsCount: itemsCount,
status: 'success',
finishedAt: DSTE_1.default.now(),
stats
};
if (Helper_1.default.isDev())
return { usageId: null, usage: Promise.resolve(update) };
const updateRes = DatabaseEngine_1.default.upsert(Settings_1.default.db.collections.usage, usageId, update);
return { usageId: usageId, usage: updateRes };
};
this.failUsage = (usageId, error) => {
const update = {
status: 'failed',
error: error,
finishedAt: DSTE_1.default.now()
};
if (Helper_1.default.isDev())
return { usageId: null, usage: Promise.resolve(update) };
const updateRes = DatabaseEngine_1.default.upsert(Settings_1.default.db.collections.usage, usageId, update);
return { usageId: usageId, usage: updateRes };
};
}
}
const UsageManager = new UsageManagerClass();
exports.default = UsageManager;