UNPKG

@63pokupki/nodejs-common

Version:
178 lines 7.87 kB
"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