snaplogger
Version:
A snap per time logger! And notifier! Or snap hooker! Make snap to be taken at interval! And take action on! Can be used for snap logging! Or notifying! Or Snap action!
75 lines (74 loc) • 2.57 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SnapLogger = exports.ERunningState = void 0;
const Snap_1 = require("./Snap");
var ERunningState;
(function (ERunningState) {
ERunningState[ERunningState["Running"] = 1] = "Running";
ERunningState[ERunningState["CompletelyStopped"] = 2] = "CompletelyStopped";
ERunningState[ERunningState["LoggingOnlyStopped"] = 3] = "LoggingOnlyStopped";
})(ERunningState = exports.ERunningState || (exports.ERunningState = {}));
class SnapLogger {
constructor(options) {
this._runningState = ERunningState.LoggingOnlyStopped;
this._isAnythingSet = false;
this._intervalTime = options.intervalTime || 30e3;
this.snap = new Snap_1.Snap(options);
}
set(key, val) {
if (this._runningState !== ERunningState.CompletelyStopped) {
this._isAnythingSet = true;
this.snap.set(key, val);
}
return this;
}
getSnapMap() {
return this.snap.snapMap;
}
log(data) {
this._isAnythingSet = false;
this.snap.log({
dateTime: data && data.dateTime
});
return this;
}
/**
* Start the SnapLogger! Both setting to the snapshot is open and Logging
*
* @returns {this}
* @memberof SnapLogger
*/
start(data) {
this._runningState = ERunningState.Running;
// _____________ starting logging interval listener
this._timeIntervalHandler = setInterval(() => {
if (this._isAnythingSet) {
this.log({
dateTime: Date.now()
});
}
}, this._intervalTime);
// _____________ Logging immediately
if (data && data.logImmediately) {
this.log(data.logImmediatelyOptions);
}
return this;
}
/**
* Stop the SnapLogger! Defaulting to stopping only logging (not locking the set to snap)!
*
* If it makes sense to you! To not write to the snap! You can set stopState to ERunningState.
* CompletelySopped! That will allow better performance (writes to map skipped!)
* (The value of this depends of your app!)
*
* @param {ERunningState} [stopState=ERunningState.LoggingOnlyStopped]
* @returns {this}
* @memberof SnapLogger
*/
stop(stopState = ERunningState.LoggingOnlyStopped) {
this._runningState = stopState;
clearInterval(this._timeIntervalHandler);
return this;
}
}
exports.SnapLogger = SnapLogger;