595
src/core/log.ts
595
src/core/log.ts
@@ -7,236 +7,417 @@
|
||||
* Twitter: https://twitter.com/terafoundation
|
||||
* Telegram: https://t.me/terafoundation
|
||||
*/
|
||||
import * as fs from 'fs'
|
||||
|
||||
import './constant'
|
||||
import './log-strict'
|
||||
|
||||
var file_name_info = global.GetDataPath("info.log")
|
||||
require("./constant.js");
|
||||
var fs = require('fs');
|
||||
require("./log-strict.js");
|
||||
var file_name_info = global.GetDataPath("info.log");
|
||||
var file_name_infoPrev = global.GetDataPath("info-prev.log");
|
||||
global.CheckSizeLogFile(file_name_info, file_name_infoPrev);
|
||||
var file_name_log = global.GetDataPath("log.log")
|
||||
var file_name_log = global.GetDataPath("log.log");
|
||||
var file_name_logPrev = global.GetDataPath("log-prev.log");
|
||||
global.CheckSizeLogFile(file_name_log, file_name_logPrev);
|
||||
var file_name_log_web = global.GetDataPath("web.log")
|
||||
var file_name_log_web = global.GetDataPath("web.log");
|
||||
var file_name_log_webPrev = global.GetDataPath("web-prev.log");
|
||||
global.CheckSizeLogFile(file_name_log_web, file_name_log_webPrev);
|
||||
var StartStatTime, file_name_error = global.GetDataPath("err.log")
|
||||
var file_name_error = global.GetDataPath("err.log");
|
||||
var file_name_errorPrev = global.GetDataPath("err-prev.log");
|
||||
|
||||
function ToLogFile(e, t, r?) {
|
||||
t instanceof Error && (t = t.message + "\n" + t.stack), global.START_SERVER || (t = global.PROCESS_NAME + ": " + t), "MAIN" !== global.PROCESS_NAME && process.send ? process.send({
|
||||
cmd: "log",
|
||||
message: t
|
||||
}) : (console.log(global.START_PORT_NUMBER + ": " + global.GetStrOnlyTime() + ": " + t), r || SaveToLogFileSync(e, t));
|
||||
global.CheckSizeLogFile(file_name_error, file_name_errorPrev);
|
||||
var file_name_error_tx = global.GetDataPath("err-tx.log");
|
||||
var file_name_error_txPrev = global.GetDataPath("err-tx-prev.log");
|
||||
global.CheckSizeLogFile(file_name_error_tx, file_name_error_txPrev);
|
||||
global.ToLog = function(Str, Level) {
|
||||
if (Level === undefined)
|
||||
Level = 1;
|
||||
if (Level && Level > global.LOG_LEVEL)
|
||||
return;
|
||||
if (global.ALL_LOG_TO_CLIENT)
|
||||
ToLogClient(Str, undefined, undefined);
|
||||
else
|
||||
ToLogFile(file_name_log, Str);
|
||||
};
|
||||
|
||||
function ToLogClient(e, t, r) {
|
||||
let ArrLogClient = global.ArrLogClient;
|
||||
e && (ToLogFile(file_name_log, e), t = t || "", ArrLogClient.push({ text: global.GetStrOnlyTime() + " " + e, key: t, final: r }), 13 < ArrLogClient.length && ArrLogClient.shift());
|
||||
};
|
||||
global.CheckSizeLogFile(file_name_error, file_name_errorPrev), global.ToLog = function(e, t) {
|
||||
void 0 === t && (t = 1), t && t > global.LOG_LEVEL || (global.ALL_LOG_TO_CLIENT ? ToLogClient(e, void 0, void 0) : ToLogFile(file_name_log,
|
||||
e));
|
||||
}, global.ToLogWeb = function(e) {
|
||||
}, global.SmallAddr = function(e) {
|
||||
return e.substr(0, 5);
|
||||
}, global.ToErrorTrace = function(e) {
|
||||
global.ToError(e + ":" + (new Error).stack);
|
||||
}, global.ToLogTrace = function(e) {
|
||||
global.ToErrorTrace(e);
|
||||
}, global.ToInfo = function(e) {
|
||||
ToLogFile(file_name_info, e, 1);
|
||||
}, global.ToError = function(e) {
|
||||
ToLogFile(file_name_error, e);
|
||||
}, global.ArrLogClient = [], global.ToLogClient = ToLogClient, global.ToLogClient0 = ToLogClient;
|
||||
var CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] }, CurStatIndex = 0;
|
||||
let MAX_STAT_PERIOD = global.MAX_STAT_PERIOD;
|
||||
function GetCurrentStatIndex() {
|
||||
var e = 2 * MAX_STAT_PERIOD + 2;
|
||||
return CurStatIndex % e;
|
||||
};
|
||||
|
||||
function ResizeArrMax(e) {
|
||||
for (var t = [], r = Math.trunc(e.length / 2), o = 0; o < r; o++)
|
||||
t[o] = Math.max(e[2 * o], e[2 * o + 1]);
|
||||
return t;
|
||||
};
|
||||
|
||||
function ResizeArrAvg(e) {
|
||||
for (var t = [], r = Math.trunc(e.length / 2), o = 0; o < r; o++)
|
||||
t[o] = (e[2 * o] + e[2 * o + 1]) / 2;
|
||||
return t;
|
||||
};
|
||||
|
||||
// function ResizeArr(e) {
|
||||
// for (var t = [], r = Math.trunc(e.length / 2), o = 0; o < r; o++)
|
||||
// t[o] = e[2 * o];
|
||||
// return t;
|
||||
// };
|
||||
|
||||
function GetDiagramData(e, t) {
|
||||
var r, o = 2 * MAX_STAT_PERIOD + 2;
|
||||
r = "MAX:" === t.substr(0, 4);
|
||||
for (var n, a = MAX_STAT_PERIOD, l = (GetCurrentStatIndex() - a + o) % o, i = (e.Total, []), T = void 0, g = l; g < l + a; g++) {
|
||||
var S = g % o;
|
||||
if (n = e.Interval[S]) {
|
||||
var _ = n[t];
|
||||
void 0 !== _ ? r ? i.push(_) : (void 0 !== T ? i.push(_ - T) : i.push(_), T = _) : i.push(0);
|
||||
}
|
||||
}
|
||||
return i;
|
||||
};
|
||||
|
||||
function CalcInterval(e, t, r) {
|
||||
for (var o, n = 2 * MAX_STAT_PERIOD + 2, a = {}, l = (t - r + n) % n, i = e.Total, T = l; T < l + r; T++) {
|
||||
var g = T % n;
|
||||
if (o = e.Interval[g])
|
||||
break;
|
||||
}
|
||||
if (o)
|
||||
for (var S in i)
|
||||
"MAX:" === S.substr(0, 4) ? a[S] = 0 : void 0 === o[S] ? a[S] = i[S] : a[S] = i[S] - o[S];
|
||||
return a;
|
||||
};
|
||||
|
||||
function AddToStatContext(e, t, r?) {
|
||||
void 0 === r && (r = 1);
|
||||
var o = e.Total[t];
|
||||
o = o || 0, "MAX:" === t.substr(0, 4) ? o = Math.max(o, r) : o += r, e.Total[t] = o, StartStatTime = StartStatTime || global.GetCurrentTime(0);
|
||||
};
|
||||
|
||||
function CopyStatInterval(e, t) {
|
||||
var r = e.Interval[t];
|
||||
r || (r = {}, e.Interval[t] = r);
|
||||
var o = e.Total;
|
||||
for (var n in o)
|
||||
r[n] = o[n], "MAX:" === n.substr(0, 4) && (o[n] = 0);
|
||||
};
|
||||
|
||||
// function SaveToLogFileAsync(e, o) {
|
||||
// fs.open(e, "a", void 0, function(e, r) {
|
||||
// if (e)
|
||||
// console.log("Ошибка открытия лог-файла ошибок");
|
||||
// else {
|
||||
// var t = global.GetStrTime() + " : " + o + "\r\n";
|
||||
// fs.write(r, t, null, "utf8", function(e, t) {
|
||||
// e ? console.log("Ошибка записи в лог-файл ошибок!") : fs.close(r, function(e) {
|
||||
// e && console.log(e);
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// };
|
||||
|
||||
function SaveToLogFileSync(e, t) {
|
||||
try {
|
||||
var r = global.GetStrTime() + " : " + t + "\r\n", o = fs.openSync(e, "a");
|
||||
fs.writeSync(o, r, null, "utf8"), fs.closeSync(o);
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
global.WEB_LOG = 0;
|
||||
global.ToLogWeb = function(Str) {
|
||||
if (global.WEB_LOG) {
|
||||
SaveToLogFileSync(file_name_log_web, Str);
|
||||
}
|
||||
};
|
||||
global.SmallAddr = function(Str) {
|
||||
return Str.substr(0, 5);
|
||||
};
|
||||
global.ToErrorTrace = function(Str) {
|
||||
global.ToError("" + Str + ":" + new Error().stack);
|
||||
};
|
||||
global.ToLogTrace = function(Str) {
|
||||
global.ToErrorTrace(Str);
|
||||
};
|
||||
global.ToInfo = function(Str) {
|
||||
ToLogFile(file_name_info, Str, 1);
|
||||
};
|
||||
global.ToError = function(Str) {
|
||||
ToLogFile(file_name_error, Str);
|
||||
};
|
||||
global.ToErrorTx = function(Str) {
|
||||
SaveToLogFileSync(file_name_error_tx, Str);
|
||||
global.ToLog(Str);
|
||||
};
|
||||
|
||||
function ToLogFile(file_name, Str, bNoFile?) {
|
||||
if (Str instanceof Error) {
|
||||
Str = Str.message + "\n" + Str.stack;
|
||||
}
|
||||
if (!global.START_SERVER)
|
||||
Str = global.PROCESS_NAME + ": " + Str;
|
||||
if (global.PROCESS_NAME !== "MAIN" && process.send) {
|
||||
process.send({ cmd: "log", message: Str });
|
||||
return;
|
||||
} else {
|
||||
console.log("" + global.START_PORT_NUMBER + ": " + global.GetStrOnlyTime() + ": " + Str);
|
||||
}
|
||||
if (bNoFile)
|
||||
return;
|
||||
SaveToLogFileSync(file_name, Str);
|
||||
};
|
||||
global.ArrLogClient = [];
|
||||
|
||||
function ToLogClient(Str, StrKey, bFinal) {
|
||||
if (!Str)
|
||||
return;
|
||||
ToLogFile(file_name_log, Str);
|
||||
if (!StrKey)
|
||||
StrKey = "";
|
||||
global.ArrLogClient.push({ text: global.GetStrOnlyTime() + " " + Str, key: StrKey, final: bFinal, });
|
||||
if (global.ArrLogClient.length > 13)
|
||||
global.ArrLogClient.shift();
|
||||
};
|
||||
global.ToLogClient = ToLogClient;
|
||||
global.ToLogClient0 = ToLogClient;
|
||||
var StartStatTime;
|
||||
var CONTEXT_STATS = { Total: {}, Interval: [] };
|
||||
var CONTEXT_ERRORS = { Total: {}, Interval: [] };
|
||||
var CurStatIndex = 0;
|
||||
global.PrepareStatEverySecond = function() {
|
||||
CurStatIndex++;
|
||||
var e = GetCurrentStatIndex();
|
||||
CopyStatInterval(CONTEXT_STATS, e), CopyStatInterval(CONTEXT_ERRORS, e);
|
||||
}
|
||||
global.TO_ERROR_LOG = function(e, t, r, o, n, a) {
|
||||
r instanceof Error && (r = r.message + "\n"), "rinfo" === o ? r += " from: " + n.address + ":" + n.port : "node" === o && (r += " from: " + n.ip + ":" + n.port);
|
||||
var l = e + ":" + t;
|
||||
global.ToError(" ==ERROR== " + l + " " + r), AddToStatContext(CONTEXT_ERRORS, l), global.ADD_TO_STAT("ERRORS");
|
||||
}
|
||||
global.HASH_RATE = 0, global.ADD_HASH_RATE = function(e) {
|
||||
e /= 1e6, global.HASH_RATE += e, global.ADD_TO_STAT("HASHRATE", e);
|
||||
}
|
||||
global.GET_STAT = function(e) {
|
||||
var t = CONTEXT_STATS.Total[e];
|
||||
return t = t || 0;
|
||||
}
|
||||
global.ADD_TO_STAT_TIME = function(e, t, r) {
|
||||
if (global.STAT_MODE) {
|
||||
if (r && 2 !== global.STAT_MODE)
|
||||
return;
|
||||
var o = process.hrtime(t), n = 1e3 * o[0] + o[1] / 1e6;
|
||||
global.ADD_TO_STAT(e, n);
|
||||
var index = GetCurrentStatIndex();
|
||||
CopyStatInterval(CONTEXT_STATS, index);
|
||||
CopyStatInterval(CONTEXT_ERRORS, index);
|
||||
};
|
||||
global.TO_ERROR_LOG = function(Module, ErrNum, Str, type, data1, data2) {
|
||||
if (Str instanceof Error) {
|
||||
Str = Str.message + "\n";
|
||||
}
|
||||
}
|
||||
global.ADD_TO_STAT = function(e, t, r) {
|
||||
if (type === "rinfo")
|
||||
Str += " from: " + data1.address + ':' + data1.port;
|
||||
else
|
||||
if (type === "node")
|
||||
Str += " from: " + data1.ip + ':' + data1.port;
|
||||
var Key = Module + ":" + ErrNum;
|
||||
global.ToError(" ==ERROR== " + Key + " " + Str);
|
||||
AddToStatContext(CONTEXT_ERRORS, Key);
|
||||
global.ADD_TO_STAT("ERRORS");
|
||||
};
|
||||
|
||||
function GetCurrentStatIndex() {
|
||||
var DefMaxStatPeriod = global.MAX_STAT_PERIOD * 2 + 2;
|
||||
return CurStatIndex % DefMaxStatPeriod;
|
||||
};
|
||||
global.HASH_RATE = 0;
|
||||
global.ADD_HASH_RATE = function(Count) {
|
||||
Count = Count / 1000000;
|
||||
global.HASH_RATE += Count;
|
||||
global.ADD_TO_STAT("HASHRATE", Count);
|
||||
};
|
||||
global.GET_STAT = function(Key) {
|
||||
var Val = CONTEXT_STATS.Total[Key];
|
||||
if (!Val)
|
||||
Val = 0;
|
||||
return Val;
|
||||
};
|
||||
global.ADD_TO_STAT_TIME = function(Name, startTime, bDetail) {
|
||||
if (global.STAT_MODE) {
|
||||
if (r && 2 !== global.STAT_MODE)
|
||||
if (bDetail && global.STAT_MODE !== 2)
|
||||
return;
|
||||
AddToStatContext(CONTEXT_STATS, e, t);
|
||||
var Time = process.hrtime(startTime);
|
||||
var deltaTime = Time[0] * 1000 + Time[1] / 1e6;
|
||||
global.ADD_TO_STAT(Name, deltaTime);
|
||||
}
|
||||
}
|
||||
global.GET_STATDIAGRAMS = function(e) {
|
||||
global.GetCurrentTime();
|
||||
var t = GetCurrentStatIndex();
|
||||
if (!e || !e.length)
|
||||
};
|
||||
global.ADD_TO_STAT = function(Key, Count, bDetail) {
|
||||
if (global.STAT_MODE) {
|
||||
if (bDetail && global.STAT_MODE !== 2)
|
||||
return;
|
||||
AddToStatContext(CONTEXT_STATS, Key, Count);
|
||||
}
|
||||
};
|
||||
global.GET_STATDIAGRAMS = function(Keys) {
|
||||
var now = global.GetCurrentTime();
|
||||
var index = GetCurrentStatIndex();
|
||||
if (!Keys || !Keys.length)
|
||||
return [];
|
||||
for (var r = [], o = 0; o < e.length; o++) {
|
||||
var n = e[o], a = GetDiagramData(CONTEXT_STATS, n);
|
||||
r.push({ name: n, maxindex: t, arr: a, starttime: StartStatTime - 0, steptime: 1 });
|
||||
var Data = [];
|
||||
for (var i = 0; i < Keys.length; i++) {
|
||||
var name = Keys[i];
|
||||
var Value = GetDiagramData(CONTEXT_STATS, name);
|
||||
Data.push({ name: name, maxindex: index, arr: Value, starttime: (StartStatTime - 0), steptime: 1 });
|
||||
}
|
||||
var l = void 0;
|
||||
for (o = 0; o < r.length; o++) {
|
||||
0 < (T = r[o].arr).length && (void 0 === l || T.length < l) && (l = T.length);
|
||||
var MinLength = undefined;
|
||||
for (var i = 0; i < Data.length; i++) {
|
||||
var arr = Data[i].arr;
|
||||
if (arr.length > 0 && (MinLength === undefined || arr.length < MinLength))
|
||||
MinLength = arr.length;
|
||||
}
|
||||
for (o = 0; o < r.length; o++) {
|
||||
var i = r[o], T = i.arr;
|
||||
l && T.length > l && (T = T.slice(T.length - l)), l && 0 <= ",POWER_MY_WIN,POWER_BLOCKCHAIN,".indexOf("," + i.name + ",") && (T = global.SERVER.GetStatBlockchain(i.name,
|
||||
l));
|
||||
for (var g = 0, S = 0; S < T.length; S++)
|
||||
T[S] && (g += T[S]);
|
||||
0 < T.length && (g /= T.length);
|
||||
var _ = 1;
|
||||
if ("MAX:" === i.name.substr(0, 4))
|
||||
for (; 500 <= T.length;)
|
||||
T = ResizeArrMax(T), _ *= 2;
|
||||
else
|
||||
for (; 500 <= T.length;)
|
||||
T = ResizeArrAvg(T), _ *= 2;
|
||||
i.AvgValue = g, i.steptime = _, i.arr = T.slice(1);
|
||||
var MaxSizeArr = 500;
|
||||
for (var i = 0; i < Data.length; i++) {
|
||||
var ItemServer = Data[i];
|
||||
var arr = ItemServer.arr;
|
||||
if (MinLength && arr.length > MinLength) {
|
||||
arr = arr.slice(arr.length - MinLength);
|
||||
}
|
||||
if (MinLength)
|
||||
if (",POWER_MY_WIN,POWER_BLOCKCHAIN,".indexOf("," + ItemServer.name + ",") >= 0) {
|
||||
arr = global.SERVER.GetStatBlockchain(ItemServer.name, MinLength);
|
||||
}
|
||||
var AvgValue = 0;
|
||||
for (var j = 0; j < arr.length; j++) {
|
||||
if (arr[j])
|
||||
AvgValue += arr[j];
|
||||
}
|
||||
if (arr.length > 0)
|
||||
AvgValue = AvgValue / arr.length;
|
||||
var StepTime = 1;
|
||||
if (ItemServer.name.substr(0, 4) === "MAX:") {
|
||||
while (arr.length >= MaxSizeArr) {
|
||||
arr = ResizeArrMax(arr);
|
||||
StepTime = StepTime * 2;
|
||||
}
|
||||
} else {
|
||||
while (arr.length >= MaxSizeArr) {
|
||||
arr = ResizeArrAvg(arr);
|
||||
StepTime = StepTime * 2;
|
||||
}
|
||||
}
|
||||
ItemServer.AvgValue = AvgValue;
|
||||
ItemServer.steptime = StepTime;
|
||||
ItemServer.arr = arr.slice(1);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
global.GET_STATS = function(e) {
|
||||
var t = global.GetCurrentTime(), r = GetCurrentStatIndex();
|
||||
return {
|
||||
stats: {
|
||||
Counter: CONTEXT_STATS.Total, Counter10S: CalcInterval(CONTEXT_STATS, r, 10), Counter10M: CalcInterval(CONTEXT_STATS,
|
||||
r, 600)
|
||||
}, errors: {
|
||||
Counter: CONTEXT_ERRORS.Total, Counter10S: CalcInterval(CONTEXT_ERRORS, r, 10), Counter10M: CalcInterval(CONTEXT_ERRORS,
|
||||
r, 600)
|
||||
}, period: (t - StartStatTime) / 1e3, Confirmation: []
|
||||
return Data;
|
||||
};
|
||||
global.GET_STATS = function(Key) {
|
||||
var now = global.GetCurrentTime();
|
||||
var index = GetCurrentStatIndex();
|
||||
var stats = {
|
||||
Counter: CONTEXT_STATS.Total, Counter10S: CalcInterval(CONTEXT_STATS, index, 10), Counter10M: CalcInterval(CONTEXT_STATS,
|
||||
index, 10 * 60),
|
||||
};
|
||||
}
|
||||
var errors = {
|
||||
Counter: CONTEXT_ERRORS.Total, Counter10S: CalcInterval(CONTEXT_ERRORS, index, 10), Counter10M: CalcInterval(CONTEXT_ERRORS,
|
||||
index, 10 * 60),
|
||||
};
|
||||
var Period = (now - StartStatTime) / 1000;
|
||||
return { stats: stats, errors: errors, period: Period, Confirmation: [] };
|
||||
};
|
||||
global.StartCommonStat = function() {
|
||||
for (var _ in CONTEXT_STATS.Total)
|
||||
for (var key in CONTEXT_STATS.Total)
|
||||
return;
|
||||
global.ClearCommonStat();
|
||||
}
|
||||
global.ClearCommonStat = function() {
|
||||
StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] },
|
||||
global.HASH_RATE = 0, global.SERVER.ClearStat();
|
||||
}
|
||||
global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, global.DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) {
|
||||
global.DEBUG_MODE && ("rinfo" === t && (e += " from: " + r.address + ":" + r.port + " - " + o.length), global.ToLog(e));
|
||||
} : global.TO_DEBUG_LOG = function(e, t, r, o) {
|
||||
}
|
||||
global.GetStrOnlyTime = function(e) {
|
||||
if (!global.GetCurrentTime)
|
||||
return ":::";
|
||||
e || (e = global.GetCurrentTime());
|
||||
var t = "" + (e = e || global.GetCurrentTime()).getHours().toStringZ(2);
|
||||
return t = (t = (t = t + ":" + e.getMinutes().toStringZ(2)) + ":" + e.getSeconds().toStringZ(2)) + "." + e.getMilliseconds().toStringZ(3);
|
||||
}
|
||||
global.GetStrTime = function(e) {
|
||||
if (!global.GetCurrentTime)
|
||||
return ":::";
|
||||
e || (e = global.GetCurrentTime());
|
||||
var t = "" + (e = e || global.GetCurrentTime()).getDate().toStringZ(2);
|
||||
return t = (t = (t = (t = (t = (t = t + "." + (1 + e.getMonth()).toStringZ(2)) + "." + e.getFullYear()) + " " + e.getHours().toStringZ(2)) + ":" + e.getMinutes().toStringZ(2)) + ":" + e.getSeconds().toStringZ(2)) + "." + e.getMilliseconds().toStringZ(3);
|
||||
};
|
||||
global.ClearCommonStat = function() {
|
||||
CurStatIndex = 0;
|
||||
StartStatTime = undefined;
|
||||
CONTEXT_STATS = { Total: {}, Interval: [] };
|
||||
CONTEXT_ERRORS = { Total: {}, Interval: [] };
|
||||
global.HASH_RATE = 0;
|
||||
global.SERVER.ClearStat();
|
||||
};
|
||||
|
||||
function ResizeArrMax(arr) {
|
||||
var arr2 = [];
|
||||
var Count2 = Math.trunc(arr.length / 2);
|
||||
for (var i = 0; i < Count2; i++) {
|
||||
arr2[i] = Math.max(arr[i * 2], arr[i * 2 + 1]);
|
||||
}
|
||||
return arr2;
|
||||
};
|
||||
|
||||
function ResizeArrAvg(arr) {
|
||||
var arr2 = [];
|
||||
var Count2 = Math.trunc(arr.length / 2);
|
||||
for (var i = 0; i < Count2; i++) {
|
||||
arr2[i] = (arr[i * 2] + arr[i * 2 + 1]) / 2;
|
||||
}
|
||||
return arr2;
|
||||
};
|
||||
|
||||
function ResizeArr(arr) {
|
||||
var arr2 = [];
|
||||
var Count2 = Math.trunc(arr.length / 2);
|
||||
for (var i = 0; i < Count2; i++) {
|
||||
arr2[i] = arr[i * 2];
|
||||
}
|
||||
return arr2;
|
||||
};
|
||||
global.ResizeArrAvg = ResizeArrAvg;
|
||||
global.ResizeArrMax = ResizeArrMax;
|
||||
|
||||
function GetDiagramData(Context, Key) {
|
||||
var DefMaxStatPeriod = global.MAX_STAT_PERIOD * 2 + 2;
|
||||
var IsMax;
|
||||
if (Key.substr(0, 4) === "MAX:")
|
||||
IsMax = true;
|
||||
else
|
||||
IsMax = false;
|
||||
var delta = global.MAX_STAT_PERIOD;
|
||||
var index2 = GetCurrentStatIndex();
|
||||
var index1 = (index2 - delta + DefMaxStatPeriod) % DefMaxStatPeriod;
|
||||
var Total = Context.Total;
|
||||
var Counter1;
|
||||
var arr = [];
|
||||
var PrevValue = undefined;
|
||||
for (var i = index1; i < index1 + delta; i++) {
|
||||
var index3 = i % DefMaxStatPeriod;
|
||||
Counter1 = Context.Interval[index3];
|
||||
if (Counter1) {
|
||||
var Value = Counter1[Key];
|
||||
if (Value !== undefined) {
|
||||
if (!IsMax) {
|
||||
if (PrevValue !== undefined) {
|
||||
arr.push(Value - PrevValue);
|
||||
} else {
|
||||
arr.push(Value);
|
||||
}
|
||||
PrevValue = Value;
|
||||
} else {
|
||||
arr.push(Value);
|
||||
}
|
||||
} else {
|
||||
arr.push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
|
||||
function CalcInterval(Context, index2, delta) {
|
||||
var DefMaxStatPeriod = global.MAX_STAT_PERIOD * 2 + 2;
|
||||
var Res = {};
|
||||
var index1 = (index2 - delta + DefMaxStatPeriod) % DefMaxStatPeriod;
|
||||
var Total = Context.Total;
|
||||
var Counter1;
|
||||
for (var i = index1; i < index1 + delta; i++) {
|
||||
var index3 = i % DefMaxStatPeriod;
|
||||
Counter1 = Context.Interval[index3];
|
||||
if (Counter1)
|
||||
break;
|
||||
}
|
||||
if (Counter1)
|
||||
for (var Key in Total) {
|
||||
if (Key.substr(0, 4) === "MAX:")
|
||||
Res[Key] = 0;
|
||||
else {
|
||||
if (Counter1[Key] === undefined)
|
||||
Res[Key] = Total[Key];
|
||||
else
|
||||
Res[Key] = Total[Key] - Counter1[Key];
|
||||
}
|
||||
}
|
||||
return Res;
|
||||
};
|
||||
|
||||
function AddToStatContext(Context, Key, AddValue?) {
|
||||
if (AddValue === undefined)
|
||||
AddValue = 1;
|
||||
var Val = Context.Total[Key];
|
||||
if (!Val)
|
||||
Val = 0;
|
||||
if (Key.substr(0, 4) === "MAX:")
|
||||
Val = Math.max(Val, AddValue);
|
||||
else
|
||||
Val = Val + AddValue;
|
||||
Context.Total[Key] = Val;
|
||||
if (!StartStatTime)
|
||||
StartStatTime = global.GetCurrentTime(0);
|
||||
};
|
||||
|
||||
function CopyStatInterval(Context, index) {
|
||||
var Counter = Context.Interval[index];
|
||||
if (!Counter) {
|
||||
Counter = {};
|
||||
Context.Interval[index] = Counter;
|
||||
}
|
||||
var Total = Context.Total;
|
||||
for (var Key in Total) {
|
||||
Counter[Key] = Total[Key];
|
||||
if (Key.substr(0, 4) === "MAX:")
|
||||
Total[Key] = 0;
|
||||
}
|
||||
};
|
||||
if (global.DEBUG_MODE)
|
||||
global.TO_DEBUG_LOG = function(Str, type, data1, data2) {
|
||||
if (!global.DEBUG_MODE)
|
||||
return;
|
||||
if (type === "rinfo")
|
||||
Str += " from: " + data1.address + ':' + data1.port + ' - ' + data2.length;
|
||||
global.ToLog(Str);
|
||||
};
|
||||
else
|
||||
global.TO_DEBUG_LOG = function(Str, type, data1, data2) {
|
||||
};
|
||||
|
||||
function SaveToLogFileAsync(fname, Str) {
|
||||
fs.open(fname, "a", undefined, function(err, file_handle) {
|
||||
if (!err) {
|
||||
var StrLog = global.GetStrTime() + " : " + Str + "\r\n";
|
||||
fs.write(file_handle, StrLog, null, 'utf8', function(err, written) {
|
||||
if (!err) {
|
||||
fs.close(file_handle, function(err) {
|
||||
if (err)
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
else {
|
||||
console.log("Ошибка записи в лог-файл ошибок!");
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
console.log("Ошибка открытия лог-файла ошибок");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function SaveToLogFileSync(fname, Str) {
|
||||
try {
|
||||
var StrLog = global.GetStrTime() + " : " + Str + "\r\n";
|
||||
var file_handle = fs.openSync(fname, "a");
|
||||
fs.writeSync(file_handle, StrLog, null, 'utf8');
|
||||
fs.closeSync(file_handle);
|
||||
}
|
||||
catch (err) {
|
||||
console.log(err.message);
|
||||
}
|
||||
};
|
||||
global.GetStrOnlyTime = function(now) {
|
||||
if (!global.GetCurrentTime)
|
||||
return ":::";
|
||||
if (!now)
|
||||
now = global.GetCurrentTime();
|
||||
var Str = "" + now.getHours().toStringZ(2);
|
||||
Str = Str + ":" + now.getMinutes().toStringZ(2);
|
||||
Str = Str + ":" + now.getSeconds().toStringZ(2);
|
||||
Str = Str + "." + now.getMilliseconds().toStringZ(3);
|
||||
return Str;
|
||||
};
|
||||
global.GetStrTime = function(now) {
|
||||
if (!global.GetCurrentTime)
|
||||
return ":::";
|
||||
if (!now)
|
||||
now = global.GetCurrentTime();
|
||||
var Str = "" + now.getDate().toStringZ(2);
|
||||
Str = Str + "." + (1 + now.getMonth()).toStringZ(2);
|
||||
Str = Str + "." + now.getFullYear();
|
||||
Str = Str + " " + now.getHours().toStringZ(2);
|
||||
Str = Str + ":" + now.getMinutes().toStringZ(2);
|
||||
Str = Str + ":" + now.getSeconds().toStringZ(2);
|
||||
Str = Str + "." + now.getMilliseconds().toStringZ(3);
|
||||
return Str;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user