@63pokupki/nodejs-common
Version:
Common nodejs functionality
178 lines • 7.87 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const lib_1 = require("@63pokupki/components/lib");
const Json_1 = require("../Helpers/Json");
let iQCounter = 0;
/**
* SQL Запросы
*/
class BaseProxySQLts {
/** init */
constructor(ctx) {
this.ctx = ctx;
this.modelValidatorSys = new lib_1.ModelValidatorSys(ctx.sys.errorSys);
this.errorSys = ctx.sys.errorSys;
this.userSys = ctx.sys.userSys;
this.logicSys = ctx.sys.logicSys;
this.cacheSys = ctx.sys.cacheSys;
this.monitoringSys = ctx.sys.monitoringSys;
if (ctx.infrastructure.mysql) {
this.db = ctx.infrastructure.mysql;
}
else {
this.errorSys.error('db_no_connection', 'Отсутствует подключение к mysql');
}
if (ctx.infrastructure.redis) {
this.redisSys = ctx.infrastructure.redis;
}
else {
this.errorSys.error('db_redis', 'Отсутствует подключение к redis');
}
}
/**
* Выполняем запрос
*/
async dbExe(vQueryBuilder) {
iQCounter++;
if (iQCounter % 100 == 0) {
console.log('>>>iQCounterProxy>>>', iQCounter);
}
return await this.dbProxy.exe(vQueryBuilder);
}
// /**
// * TODO устаревший балансировщик запросов
// * Получаем инстанс запроса Knex.Raw учитывая pool соединений
// */
// protected async dbRaw<T = any>(sql:string, param?:Record<string, any>): Promise<T> {
// // const q = this.dbOne.raw(sql, param);
// let out:T = null;
// const sQueryStart = sql.substr(0, 50).toLowerCase();
// const iSelectPos = sQueryStart.indexOf('select');
// const iInsertPos = sQueryStart.indexOf('insert');
// const iDeletePos = sQueryStart.indexOf('delete');
// const iUpdatePos = sQueryStart.indexOf('update');
// const bWrite = (iInsertPos >= 0 || iDeletePos >= 0 || iUpdatePos >= 0);
// if(iSelectPos >= 0 && !bWrite){
// iQRSlave++;
// out = <any>(await this.db.raw(sql, param))
// } else {
// iQRMaster++;
// out = <any>(await this.db.raw(sql, param))
// }
// iQCounter++;
// if (iQCounter % 100 == 0){
// console.log('>>>',
// ' iQCounter',
// iQCounter,
// ' iQBSlave>',
// iQBSlave,
// ' iQBMaster>',
// iQBMaster,
// ' iQRSlave>',
// iQRSlave,
// ' iQRMaster>',
// iQRMaster,
// 'iQIncorrect>',
// iQIncorrect);
// }
// return out;
// }
async exe(key, cb) {
var _a, _b;
const vMsgMonitoring = {
time_start: Date.now(),
info: {
user_id: String((_b = (_a = this.ctx.sys) === null || _a === void 0 ? void 0 : _a.userSys) === null || _b === void 0 ? void 0 : _b.idUser),
}
};
try {
await cb();
if (Date.now() - vMsgMonitoring.time_start > 5000) {
this.monitoringSys.sendInfoSqlTimelong('sqltimelong:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { msg: (0, Json_1.tryJsonToString)({
body: this.ctx.body,
param: this.ctx.param,
}), time_end: Date.now() }));
}
else {
this.monitoringSys.sendInfoSqlSuccsess('sql:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { time_end: Date.now() }));
}
}
catch (e) {
this.errorSys.errorEx(e, key, 'SQLError>>>' + key);
this.monitoringSys.sendErrorSql('sqlerror:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { msg: (0, Json_1.tryJsonToString)({
trace: e,
body: this.ctx.body,
param: this.ctx.param,
}), time_end: Date.now() }));
}
}
async throwExe(key, cb) {
var _a, _b;
const vMsgMonitoring = {
time_start: Date.now(),
val: (_b = (_a = this.ctx.sys) === null || _a === void 0 ? void 0 : _a.userSys) === null || _b === void 0 ? void 0 : _b.idUser
};
try {
await cb();
if (this.monitoringSys && Date.now() - vMsgMonitoring.time_start > 5000) {
this.monitoringSys.sendInfoSqlTimelong('sqltimelong:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { msg: (0, Json_1.tryJsonToString)({
body: this.ctx.body,
param: this.ctx.param,
}), time_end: Date.now() }));
}
else if (this.monitoringSys) {
this.monitoringSys.sendInfoSqlSuccsess('sql:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { time_end: Date.now() }));
}
}
catch (e) {
if (this.monitoringSys) {
this.monitoringSys.sendErrorSql('sqlerror:' + this.ctx.common.nameApp + ':' + this.ctx.req.url + ':' + key, Object.assign(Object.assign({}, vMsgMonitoring), { msg: (0, Json_1.tryJsonToString)({
trace: e,
body: this.ctx.body,
param: this.ctx.param,
}), time_end: Date.now() }));
}
throw this.errorSys.throwEx(e, key, 'SQLError>>>' + key);
}
}
/**
* Авто кеширование для встраивания в функцию
* @param sKey - Ключ кеша
* @param iTimeSec - Время кеширования
* @param callback - функция получающая данные из БД
*/
async autoCache(sKey, iTimeSec, callback) {
// todo временно проксируем для совместимости
return await this.cacheSys.autoCache(sKey, iTimeSec, callback);
}
/**
* Авто кеширование int переменной для встраивания в функцию
* @param sKey - Ключ кеша
* @param iTimeSec - Время кеширования
* @param callback - функция получающая данные из БД
*/
async autoCacheInt(sKey, iTimeSec, callback) {
// todo временно проксируем для совместимости
return await this.cacheSys.autoCacheInt(sKey, iTimeSec, callback);
}
/**
* Авто кеширование ID переменной для встраивания в функцию
* @param sKey - Ключ кеша
* @param iTimeSec - Время кеширования
* @param callback - функция получающая данные из БД
*/
async autoCacheID(sKey, iTimeSec, callback) {
// todo временно проксируем для совместимости
return await this.cacheSys.autoCacheID(sKey, iTimeSec, callback);
}
/**
* Очистить кеш редиса
* @param sKey
*/
async clearCache(sKey) {
// todo временно проксируем для совместимости
return await this.cacheSys.clearCache(sKey);
}
}
exports.default = BaseProxySQLts;
//# sourceMappingURL=BaseProxySQL.js.map