ilastlog
Version:
alternative lastlog because of Ubuntu 24.04.1. The distros have had the libpam excluding lastlog.so. therefore, I personally needed.
127 lines • 3.92 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.combinedPatterns = void 0;
exports.compareGenerator = compareGenerator;
exports.captureLog = captureLog;
exports.calculate = calculate;
exports.Print = Print;
exports.WriteToFile = WriteToFile;
exports.WriteToFileAsync = WriteToFileAsync;
const pattern_js_1 = __importDefault(require("../configs/pattern.js"));
const Recode_1 = require("../configs/Recode");
const printf_1 = __importDefault(require("printf"));
const fileManger_1 = require("./fileManger");
const pre_debug = console.debug;
console.debug = (msg) => {
if (process.env.NODE_ENV == "production")
return;
pre_debug("debug:", msg);
};
const combinedPatterns = ((_timePatterns, _logPattern, _customPattern) => {
if (_customPattern.length !== 0) {
_logPattern = _customPattern;
}
return _timePatterns.map((pattern, idx) => {
return new RegExp([pattern, _logPattern].join(" "), "gi");
});
})(pattern_js_1.default.TIME_PTN, pattern_js_1.default.LOGIN_PTN, pattern_js_1.default.CUSTOM_PTN);
exports.combinedPatterns = combinedPatterns;
function captureLog(_texts, regx) {
const result = [];
for (const text of _texts) {
for (const re of regx) {
for (const matchedObj of text.matchAll(re)) {
if (matchedObj.groups) {
result.push(matchedObj.groups);
break;
}
}
}
}
return result;
}
function Print(infoArr, _options) {
if (_options.delimiter.length < 1) {
OriginPrint(infoArr);
}
else {
delimiterPrint(infoArr, _options.delimiter);
}
}
function delimiterPrint(infoArr, delimiter) {
let text = "";
for (const info of infoArr) {
text += (0, printf_1.default)("%s%s%s\n", info.name, delimiter, info.timestamp);
}
console.log(text);
}
function OriginPrint(infoArr) {
let text = "";
for (const info of infoArr) {
text += (0, printf_1.default)("%-25s%s\n", info.name, info.timestamp);
}
console.log(text);
}
function WriteToFile(infoArr, useSave) {
if (useSave == false)
return;
const data = infoArr.reduce((prev, curv) => {
prev[curv.name] = curv.timestamp;
return prev;
}, {});
return (0, fileManger_1.appendFile)(data);
}
function WriteToFileAsync(infoArr, useSave) {
if (useSave == false)
return Promise.resolve();
const data = infoArr.reduce((prev, curv) => {
prev[curv.name] = curv.timestamp;
return prev;
}, {});
return (0, fileManger_1.appendFileAsync)(data);
}
function compareGenerator(key) {
return function (a, b) {
if (a[key] == b[key])
return 0;
else if (a[key] < b[key])
return -1;
else
return 1;
};
}
function calculate(textArr, _options) {
textArr = textArr.filter((str, idx) => {
return str.includes(_options.hint);
});
const parsedArr = captureLog(textArr, combinedPatterns);
const compareName = compareGenerator(Recode_1.recode.name);
const compareTimeStamp = compareGenerator(Recode_1.recode.timestamp);
const sortedArr = parsedArr
.sort(compareTimeStamp)
.sort(compareName)
.map((obj, idx) => {
const tmp = {
name: obj.name,
timestamp: obj.timestamp,
};
return tmp;
})
.reduceRight((acc, cur) => {
let haveName = false;
for (const obj of acc) {
if (obj.name == cur.name) {
haveName = true;
}
}
if (!haveName) {
acc.unshift(cur);
}
return acc;
}, []);
return sortedArr;
}
//# sourceMappingURL=utils.js.map