Отказ от внутреннего типа данных LoggerMessage и переход на валидацию по схемам
This commit is contained in:
parent
1444f33841
commit
d20b136e7a
157
core/logger.js
157
core/logger.js
@ -8,106 +8,60 @@
|
|||||||
//----------------------
|
//----------------------
|
||||||
|
|
||||||
const _ = require("lodash"); //Работа с массивами и объектами
|
const _ = require("lodash"); //Работа с массивами и объектами
|
||||||
const db = require("../core/db_connector"); //Модуль взаимодействия с БД
|
const { validateObject } = require("../core/utils"); //Вспомогательные функции
|
||||||
|
const db = require("./db_connector"); //Модуль взаимодействия с БД
|
||||||
|
const { NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR } = require("../models/obj_log"); //Схемы валидации записи журнала работы сервиса обмена
|
||||||
|
const prmsLoggerSchema = require("../models/prms_logger"); //Схемы валидации параметров функций модуля
|
||||||
|
|
||||||
//------------
|
//------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
//Типы сообщений протокола
|
|
||||||
const SLOGGER_MESSAGE_TYPE_ERROR = "ERROR"; // Ошибка
|
|
||||||
const SLOGGER_MESSAGE_TYPE_WARN = "WARN"; // Предупреждение
|
|
||||||
const SLOGGER_MESSAGE_TYPE_INFO = "INFO"; // Информация
|
|
||||||
|
|
||||||
//Сообщение протокола
|
|
||||||
class LoggerMessage {
|
|
||||||
//Конструктор класса
|
|
||||||
constructor(sType, sMessage, prms) {
|
|
||||||
this.sType = sType;
|
|
||||||
this.sMessage = sMessage;
|
|
||||||
if (prms) {
|
|
||||||
this.nServiceId = prms.nServiceId;
|
|
||||||
this.nServiceFnId = prms.nServiceFnId;
|
|
||||||
this.nQueueId = prms.nQueueId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Класс управления протоколом
|
//Класс управления протоколом
|
||||||
class Logger {
|
class Logger {
|
||||||
//Конструктор класса
|
//Конструктор класса
|
||||||
constructor() {
|
constructor() {
|
||||||
this.dbConnector = "";
|
this.dbConnector = null;
|
||||||
this.bLogDB = false;
|
this.bLogDB = false;
|
||||||
}
|
}
|
||||||
//Включение/выключение записи протоколов в БД
|
//Включение/выключение записи протоколов в БД
|
||||||
setLogDB(bLogDB) {
|
setLogDB(bLogDB) {
|
||||||
this.bLogDB = bLogDB;
|
if (this.dbConnector) this.bLogDB = bLogDB;
|
||||||
}
|
}
|
||||||
//Установка объекта для протоколирования в БД
|
//Установка объекта для протоколирования в БД
|
||||||
setDBConnector(dbConnector) {
|
setDBConnector(dbConnector, bLogDB) {
|
||||||
if (dbConnector instanceof db.DBConnector) {
|
if (dbConnector instanceof db.DBConnector) {
|
||||||
this.dbConnector = dbConnector;
|
this.dbConnector = dbConnector;
|
||||||
this.bLogDB = true;
|
if (bLogDB === true) this.setLogDB(true);
|
||||||
|
else this.setLogDB(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Удаление объекта для протоколирования в БД
|
//Удаление объекта для протоколирования в БД
|
||||||
removeDBConnector() {
|
removeDBConnector() {
|
||||||
this.dbConnector = "";
|
this.dbConnector = null;
|
||||||
this.bLogDB = false;
|
this.setLogDB(false);
|
||||||
}
|
|
||||||
//Протоколирование в БД
|
|
||||||
async logToDB(loggerMessage) {
|
|
||||||
//Если надо протоколировать и есть чем
|
|
||||||
if (this.bLogDB && this.dbConnector && this.dbConnector.bConnected) {
|
|
||||||
//Если протоколируем стандартное сообщение
|
|
||||||
if (loggerMessage instanceof LoggerMessage) {
|
|
||||||
//Подготовим доп. сведения для протокола
|
|
||||||
let logData = {};
|
|
||||||
_.extend(logData, loggerMessage);
|
|
||||||
//Анализируем тип сообщения
|
|
||||||
switch (loggerMessage.sType) {
|
|
||||||
case SLOGGER_MESSAGE_TYPE_ERROR: {
|
|
||||||
await this.dbConnector.putLogErr(loggerMessage.sMessage, logData);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SLOGGER_MESSAGE_TYPE_WARN: {
|
|
||||||
await this.dbConnector.putLogWrn(loggerMessage.sMessage, logData);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SLOGGER_MESSAGE_TYPE_INFO: {
|
|
||||||
await this.dbConnector.putLogInf(loggerMessage.sMessage, logData);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
await this.dbConnector.putLogInf(loggerMessage.sMessage, logData);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//Для нестандартных - есдиный способ протоколирования
|
|
||||||
await this.dbConnector.putLogInf(loggerMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//Протоколирование
|
//Протоколирование
|
||||||
async log(loggerMessage) {
|
async log(prms) {
|
||||||
let sMessage = "";
|
//Проверяем структуру переданного объекта для подключения
|
||||||
let sPrefix = "LOG MESSAGE";
|
let sCheckResult = validateObject(prms, prmsLoggerSchema.log, "Параметры функции протоколирования");
|
||||||
let sColorPattern = "";
|
//Если структура объекта в норме
|
||||||
//Конструируем сообщение
|
if (!sCheckResult) {
|
||||||
if (loggerMessage instanceof LoggerMessage) {
|
//Определим оформление сообщения
|
||||||
switch (loggerMessage.sType) {
|
let sPrefix = "ИНФОРМАЦИЯ";
|
||||||
case SLOGGER_MESSAGE_TYPE_ERROR: {
|
let sColorPattern = "";
|
||||||
|
switch (prms.nLogState) {
|
||||||
|
case NLOG_STATE_ERR: {
|
||||||
sPrefix = "ОШИБКА";
|
sPrefix = "ОШИБКА";
|
||||||
sColorPattern = "\x1b[31m%s\x1b[0m%s";
|
sColorPattern = "\x1b[31m%s\x1b[0m%s";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SLOGGER_MESSAGE_TYPE_WARN: {
|
case NLOG_STATE_WRN: {
|
||||||
sPrefix = "ПРЕДУПРЕЖДЕНИЕ";
|
sPrefix = "ПРЕДУПРЕЖДЕНИЕ";
|
||||||
sColorPattern = "\x1b[33m%s\x1b[0m%s";
|
sColorPattern = "\x1b[33m%s\x1b[0m%s";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SLOGGER_MESSAGE_TYPE_INFO: {
|
case NLOG_STATE_INF: {
|
||||||
sPrefix = "ИНФОРМАЦИЯ";
|
sPrefix = "ИНФОРМАЦИЯ";
|
||||||
sColorPattern = "\x1b[32m%s\x1b[0m%s";
|
sColorPattern = "\x1b[32m%s\x1b[0m%s";
|
||||||
break;
|
break;
|
||||||
@ -115,31 +69,56 @@ class Logger {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sMessage = loggerMessage.sMessage;
|
//Выдаём сообщение
|
||||||
} else {
|
console.log(sColorPattern, sPrefix + ": ", prms.sMsg);
|
||||||
sMessage = loggerMessage;
|
//Протоколируем в БД, если это необходимо
|
||||||
}
|
if (this.bLogDB) {
|
||||||
//Выдаём сообщение
|
try {
|
||||||
console.log(sColorPattern, sPrefix + ": ", sMessage);
|
//Если есть чем протоколировать
|
||||||
//Протоколируем в БД, если это необходимо
|
if (this.dbConnector && this.dbConnector.bConnected) {
|
||||||
if (this.bLogDB)
|
await this.dbConnector.putLog(prms);
|
||||||
try {
|
}
|
||||||
await this.logToDB(loggerMessage);
|
} catch (e) {
|
||||||
} catch (e) {
|
console.log("\x1b[31m%s\x1b[0m%s", "ОШИБКА ПРОТОКОЛИРОВАНИЯ: ", e.sMessage);
|
||||||
console.log("LOGGER ERROR: " + e.sMessage);
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log("\x1b[31m%s\x1b[0m%s", "ОШИБКА ПРОТОКОЛИРОВАНИЯ: ", sCheckResult);
|
||||||
|
console.log(prms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//Протоколирование ошибки
|
//Протоколирование ошибки
|
||||||
async error(sMsg) {
|
async error(sMsg, prms) {
|
||||||
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_ERROR, sMsg));
|
//Подготовим параметры для протоколирования
|
||||||
|
let logData = {};
|
||||||
|
if (prms) logData = _.cloneDeep(prms);
|
||||||
|
//Выставим сообщение и тип записи журнала
|
||||||
|
logData.nLogState = NLOG_STATE_ERR;
|
||||||
|
logData.sMsg = sMsg;
|
||||||
|
//Протоколируем
|
||||||
|
await this.log(logData);
|
||||||
}
|
}
|
||||||
//Протоколирование предупреждения
|
//Протоколирование предупреждения
|
||||||
async warn(sMsg) {
|
async warn(sMsg, prms) {
|
||||||
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_WARN, sMsg));
|
//Подготовим параметры для протоколирования
|
||||||
|
let logData = {};
|
||||||
|
if (prms) logData = _.cloneDeep(prms);
|
||||||
|
//Выставим сообщение и тип записи журнала
|
||||||
|
logData.nLogState = NLOG_STATE_WRN;
|
||||||
|
logData.sMsg = sMsg;
|
||||||
|
//Протоколируем
|
||||||
|
await this.log(logData);
|
||||||
}
|
}
|
||||||
//Протоколирование информации
|
//Протоколирование информации
|
||||||
async info(sMsg) {
|
async info(sMsg, prms) {
|
||||||
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_INFO, sMsg));
|
//Подготовим параметры для протоколирования
|
||||||
|
let logData = {};
|
||||||
|
if (prms) logData = _.cloneDeep(prms);
|
||||||
|
//Выставим сообщение и тип записи журнала
|
||||||
|
logData.nLogState = NLOG_STATE_INF;
|
||||||
|
logData.sMsg = sMsg;
|
||||||
|
//Протоколируем
|
||||||
|
await this.log(logData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,8 +126,4 @@ class Logger {
|
|||||||
// Интерфейс модуля
|
// Интерфейс модуля
|
||||||
//-----------------
|
//-----------------
|
||||||
|
|
||||||
exports.SLOGGER_MESSAGE_TYPE_ERROR = SLOGGER_MESSAGE_TYPE_ERROR;
|
|
||||||
exports.SLOGGER_MESSAGE_TYPE_WARN = SLOGGER_MESSAGE_TYPE_WARN;
|
|
||||||
exports.SLOGGER_MESSAGE_TYPE_INFO = SLOGGER_MESSAGE_TYPE_INFO;
|
|
||||||
exports.LoggerMessage = LoggerMessage;
|
|
||||||
exports.Logger = Logger;
|
exports.Logger = Logger;
|
||||||
|
71
models/prms_logger.js
Normal file
71
models/prms_logger.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
Сервис интеграции ПП Парус 8 с WEB API
|
||||||
|
Модели данных: описатели параметров процедур модуля протоколирования работы (класс Logger)
|
||||||
|
*/
|
||||||
|
|
||||||
|
//----------------------
|
||||||
|
// Подключение библиотек
|
||||||
|
//----------------------
|
||||||
|
|
||||||
|
const Schema = require("validate"); //Схемы валидации
|
||||||
|
const { NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR } = require("./obj_log"); //Схемы валидации записи журнала работы сервиса обмена
|
||||||
|
|
||||||
|
//------------------
|
||||||
|
// Интерфейс модуля
|
||||||
|
//------------------
|
||||||
|
|
||||||
|
//Схема валидации параметров функции записи в журнал работы сервиса
|
||||||
|
exports.log = new Schema({
|
||||||
|
//Тип сообщения журнала работы сервиса
|
||||||
|
nLogState: {
|
||||||
|
type: Number,
|
||||||
|
enum: [NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: "Тип сообщения журнала работы сервиса (nLogState) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
enum: "Значение типа сообщения журнала работы сервиса (nLogState) не поддерживается",
|
||||||
|
required: "Не указан тип сообщения журнала работы сервиса (nLogState)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Сообщение журнала работы сервиса
|
||||||
|
sMsg: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: "Сообщение журнала работы сервиса (sMsg) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
required: "Не указано сообщение журнала работы сервиса (sMsg)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Идентификатор связанного сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Идентификатор связанного сервиса сообщения журнала работы сервиса (nServiceId) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
required: "Не указан идентификатор связанного сервиса сообщения журнала работы сервиса (nServiceId)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Идентификатор связанной функции-обработчика сервиса
|
||||||
|
nServiceFnId: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Идентификатор связанной функции-обработчика сообщения журнала работы сервиса (nServiceFnId) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
required:
|
||||||
|
"Не указан идентификатор связанной функции-обработчика сообщения журнала работы сервиса (nServiceFnId)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Идентификатор связанной позиции очереди обмена
|
||||||
|
nQueueId: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Идентификатор связанной позиции очереди обмена сообщения журнала работы сервиса (nQueueId) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
required:
|
||||||
|
"Не указан идентификатор связанной позиции очереди обмена сообщения журнала работы сервиса (nQueueId)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user