@63pokupki/nodejs-common
Version:
Common nodejs functionality
156 lines • 6.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResponseSys = exports.faSendRouter = void 0;
const ErrorHandler_1 = require("./ErrorHandler");
const Json_1 = require("../Helpers/Json");
let i = 0;
/** Индексированный список полезных нагрузок для функций рендера страниц */
const ixSendRouter = {};
/** Интервал для очистки индексированного списка если остались не удаленные полезные нагрузки по истечения 5 секунд
* Интервал вызывается раз в час
*/
// const iInterval = setInterval(() =>{
// const aidKeys = Object.keys(ixSendRouter);
// for(let i = 0; i < aidKeys.length; i++) {
// const idKeys = Number(aidKeys[i]);
// const vCurrentSend = ixSendRouter[idKeys];
// if (vCurrentSend && Date.now() - vCurrentSend.time > 60000) {
// console.log('WARNING - У НАС ЕСТЬ ЗАВИСШИЙ ЗАПРОС', 'url: ', ixSendRouter[idKeys].pathname, 'body: ', ixSendRouter[idKeys].body)
// delete ixSendRouter[idKeys];
// }
// }
// }, 3600000);
/** Функция отправки сообщения в маттермост */
const fSendMonitoringMsg = (idx, ctx) => {
if (ixSendRouter[idx] && Date.now() - ixSendRouter[idx].time > 5000) {
if (ctx.sys.monitoringSys) {
ctx.sys.monitoringSys.sendInfoApiTimecrit('api_slowcrit:' + ctx.common.nameApp + ':' + ctx.url.pathname, {
time_start: ixSendRouter[idx].time,
time_end: Date.now(),
val: Date.now() - ixSendRouter[idx].time,
msg: (0, Json_1.tryJsonToString)({
info: {
title: 'Мониторинг скорости запросов',
url: `${ctx.common.nameApp} - ${ctx.url.pathname}`,
time: `- длительность выполнения ${(Date.now() - ixSendRouter[idx].time) / 1000} сек.`,
date: `${new Date(ixSendRouter[idx].time).toString()}`,
},
data: ctx.body
})
});
}
console.log('WARNING - ОЧЕНЬ МЕДЛЕННЫЙ МЕТОД', 'url: ', ctx.url.pathname, 'body: ', ctx.body);
}
else if (ixSendRouter[idx] && Date.now() - ixSendRouter[idx].time > 2000) {
if (ctx.sys.monitoringSys) {
ctx.sys.monitoringSys.sendInfoApiTimelong('api_slow:' + ctx.common.nameApp + ':' + ctx.url.pathname, {
time_start: ixSendRouter[idx].time,
time_end: Date.now(),
val: Date.now() - ixSendRouter[idx].time,
msg: (0, Json_1.tryJsonToString)({
info: {
title: 'Мониторинг скорости запросов',
url: `${ctx.common.nameApp} - ${ctx.url.pathname}`,
time: `- длительность выполнения ${(Date.now() - ixSendRouter[idx].time) / 1000} сек.`,
date: `${new Date(ixSendRouter[idx].time).toString()}`,
},
data: ctx.body
})
});
}
}
else if (ixSendRouter[idx] && Date.now() - ixSendRouter[idx].time < 2000) {
// if(ctx.sys.monitoringSys){
// ctx.sys.monitoringSys.sendInfoApiSuccsess('ok:'+ctx.common.nameApp +':'+ ctx.url.pathname, {
// time_start: ixSendRouter[idx].time,
// time_end: Date.now(),
// info: {
// title:'Мониторинг скорости запросов',
// url:`${ctx.common.nameApp} - ${ctx.url.pathname}`,
// time: `- длительность выполнения ${(Date.now()-ixSendRouter[idx].time)/1000 } сек.`,
// date: `${new Date(ixSendRouter[idx].time).toString()}`,
// },
// data: JSON.stringify(ctx.body)
// });
// }
}
};
/**
* Функция рендера страницы
* @param faCallback - функция контролера
*/
const faSendRouter = (faCallback) => async (ctx) => {
// i++;
// const currentIdx = i
// ixSendRouter[currentIdx] = {
// nameApp:ctx.common.nameApp,
// pathname:ctx.url.pathname,
// body:JSON.stringify(ctx.body),
// time:Date.now()
// }
try {
await faCallback(ctx);
// fSendMonitoringMsg(currentIdx, ctx);
// delete ixSendRouter[currentIdx];
}
catch (e) {
// fSendMonitoringMsg(currentIdx, ctx);
// delete ixSendRouter[currentIdx];
if (ctx.sys.errorSys.isOk()) {
ctx.sys.errorSys.error('stop_execute_no_error', e.message);
}
else {
ctx.sys.errorSys.errorEx(e, ctx.req.url, ctx.msg);
}
(0, ErrorHandler_1.fErrorHandler)(ctx);
}
};
exports.faSendRouter = faSendRouter;
/**
* Системный сервис формирования ответа
*/
class ResponseSys {
constructor(ctx) {
this.ctx = ctx;
this.env = ctx.common.env;
if (this.env === 'local' || this.env === 'dev' || this.env === 'test') {
this.ifDevMode = true;
}
else {
this.ifDevMode = false;
}
this.errorSys = ctx.sys.errorSys;
}
/**
* Формирование ответа клиенту
*
* @param array|null data
* @param string sMsg
* @return array
*/
response(data, sMsg) {
const out = {
ok: this.errorSys.isOk(),
e: !this.errorSys.isOk(),
errors: this.errorSys.getErrors(),
warning: this.errorSys.getWarning(),
notice: this.errorSys.getNotice(),
msg: sMsg,
};
if (this.ifDevMode) { // Выводит информацию для разработчиков и тестировщиков
out.dev_warning = this.errorSys.getDevWarning();
out.dev_notice = this.errorSys.getDevNotice();
out.dev_log = this.errorSys.getDevLog();
}
if (this.errorSys.isOk()) {
out.data = data;
}
else {
out.data = null;
out.msg = 'Что то пошло не так - обратитесь к администратору';
}
return out;
}
}
exports.ResponseSys = ResponseSys;
//# sourceMappingURL=ResponseSys.js.map