Compare commits
No commits in common. "master" and "6449-summaryId" have entirely different histories.
master
...
6449-summa
|
@ -4,7 +4,6 @@ logMainShowField: false
|
||||||
upperCaseTable: true
|
upperCaseTable: true
|
||||||
userField: editorFk
|
userField: editorFk
|
||||||
rowExcludeField: logExclude
|
rowExcludeField: logExclude
|
||||||
ignoreSystem: false
|
|
||||||
excludeRegex: '__$'
|
excludeRegex: '__$'
|
||||||
showFields:
|
showFields:
|
||||||
- name
|
- name
|
||||||
|
|
|
@ -94,8 +94,7 @@ module.exports = class ModelLoader {
|
||||||
];
|
];
|
||||||
const globalProps = [
|
const globalProps = [
|
||||||
'userField',
|
'userField',
|
||||||
'rowExcludeField',
|
'rowExcludeField'
|
||||||
'ignoreSystem'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const [schema, table, tableInfo] of schemaMap) {
|
for (const [schema, table, tableInfo] of schemaMap) {
|
||||||
|
|
42
mylogger.js
42
mylogger.js
|
@ -57,9 +57,12 @@ module.exports = class MyLogger {
|
||||||
async init() {
|
async init() {
|
||||||
const {conf} = this;
|
const {conf} = this;
|
||||||
this.debug('MyLogger', 'Initializing.');
|
this.debug('MyLogger', 'Initializing.');
|
||||||
|
this.onErrorListener = err => this.onError(err);
|
||||||
|
|
||||||
// DB connection
|
// DB connection
|
||||||
|
|
||||||
const db = this.db = await mysql.createConnection(conf.dstDb);
|
const db = this.db = await mysql.createConnection(conf.dstDb);
|
||||||
|
db.on('error', this.onErrorListener);
|
||||||
|
|
||||||
await this.modelLoader.loadSchema();
|
await this.modelLoader.loadSchema();
|
||||||
await this.showDb.loadSchema();
|
await this.showDb.loadSchema();
|
||||||
|
@ -132,6 +135,8 @@ module.exports = class MyLogger {
|
||||||
this.running = false;
|
this.running = false;
|
||||||
this.debug('MyLogger', 'Ending.');
|
this.debug('MyLogger', 'Ending.');
|
||||||
|
|
||||||
|
this.db.off('error', this.onErrorListener);
|
||||||
|
|
||||||
clearInterval(this.flushInterval);
|
clearInterval(this.flushInterval);
|
||||||
clearInterval(this.pingInterval);
|
clearInterval(this.pingInterval);
|
||||||
clearInterval(this.flushTimeout);
|
clearInterval(this.flushTimeout);
|
||||||
|
@ -201,6 +206,7 @@ module.exports = class MyLogger {
|
||||||
zongji.once('error', onError);
|
zongji.once('error', onError);
|
||||||
zongji.start(zongjiOpts);
|
zongji.start(zongjiOpts);
|
||||||
});
|
});
|
||||||
|
zongji.on('error', this.onErrorListener);
|
||||||
this.zongji = zongji;
|
this.zongji = zongji;
|
||||||
this.debug('Zongji', 'Started.');
|
this.debug('Zongji', 'Started.');
|
||||||
}
|
}
|
||||||
|
@ -214,6 +220,7 @@ module.exports = class MyLogger {
|
||||||
this.zongji = null;
|
this.zongji = null;
|
||||||
|
|
||||||
zongji.off('binlog', this.onBinlogListener);
|
zongji.off('binlog', this.onBinlogListener);
|
||||||
|
zongji.off('error', this.onErrorListener);
|
||||||
|
|
||||||
// FIXME: Cannot call Zongji.stop(), it doesn't wait to end connection
|
// FIXME: Cannot call Zongji.stop(), it doesn't wait to end connection
|
||||||
zongji.connection.destroy(() => {
|
zongji.connection.destroy(() => {
|
||||||
|
@ -243,7 +250,7 @@ module.exports = class MyLogger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async handleError(err) {
|
async onError(err) {
|
||||||
if (!this.isOk) return;
|
if (!this.isOk) return;
|
||||||
this.isOk = false;
|
this.isOk = false;
|
||||||
console.log(`Error: ${err.code}: ${err.message}`);
|
console.log(`Error: ${err.code}: ${err.message}`);
|
||||||
|
@ -252,19 +259,19 @@ module.exports = class MyLogger {
|
||||||
await this.end(true);
|
await this.end(true);
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
|
|
||||||
// FIXME: Error of mysql2/promise
|
switch (err.code) {
|
||||||
if (err.message === `Can't add new command when connection is in closed state`)
|
case 'PROTOCOL_CONNECTION_LOST':
|
||||||
|
case 'ECONNRESET':
|
||||||
|
console.log('Trying to restart process.');
|
||||||
await this.tryRestart();
|
await this.tryRestart();
|
||||||
else
|
break;
|
||||||
switch (err.code) {
|
default:
|
||||||
case 'PROTOCOL_CONNECTION_LOST':
|
process.exit();
|
||||||
case 'ECONNRESET':
|
}
|
||||||
console.log('Trying to restart process.');
|
}
|
||||||
await this.tryRestart();
|
|
||||||
break;
|
handleError(err) {
|
||||||
default:
|
console.error(err);
|
||||||
process.exit();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async onBinlog(evt) {
|
async onBinlog(evt) {
|
||||||
|
@ -305,16 +312,14 @@ module.exports = class MyLogger {
|
||||||
const table = evt.tableMap[evt.tableId];
|
const table = evt.tableMap[evt.tableId];
|
||||||
const tableName = table.tableName;
|
const tableName = table.tableName;
|
||||||
const tableInfo = this.schemaMap.get(table.parentSchema, tableName);
|
const tableInfo = this.schemaMap.get(table.parentSchema, tableName);
|
||||||
|
|
||||||
if (!tableInfo) return;
|
if (!tableInfo) return;
|
||||||
|
|
||||||
const action = actions[eventName];
|
const action = actions[eventName];
|
||||||
const {rowExcludeField, ignoreSystem} = tableInfo;
|
const {rowExcludeField} = tableInfo;
|
||||||
const changes = [];
|
const changes = [];
|
||||||
|
|
||||||
function isExcluded(row) {
|
function isExcluded(row) {
|
||||||
return (rowExcludeField && row[rowExcludeField])
|
return rowExcludeField && row[rowExcludeField];
|
||||||
|| (ignoreSystem && row.editorFk == null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function cast(value, type) {
|
function cast(value, type) {
|
||||||
|
@ -487,7 +492,6 @@ module.exports = class MyLogger {
|
||||||
const isDelete = action == 'delete';
|
const isDelete = action == 'delete';
|
||||||
const isUpdate = action == 'update';
|
const isUpdate = action == 'update';
|
||||||
const created = new Date(evt.timestamp);
|
const created = new Date(evt.timestamp);
|
||||||
const showId = tableInfo.conf.showId;
|
|
||||||
|
|
||||||
for (const change of changes) {
|
for (const change of changes) {
|
||||||
let newI, oldI;
|
let newI, oldI;
|
||||||
|
@ -510,7 +514,7 @@ module.exports = class MyLogger {
|
||||||
oldI = change.instance;
|
oldI = change.instance;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const summaryId = showId ? row[showId] : null;
|
const summaryId = row[tableInfo.conf.showId];
|
||||||
const modelId = row[tableInfo.idName];
|
const modelId = row[tableInfo.idName];
|
||||||
const modelValue = change.modelValue ?? null;
|
const modelValue = change.modelValue ?? null;
|
||||||
const oldInstance = oldI ? JSON.stringify(oldI) : null;
|
const oldInstance = oldI ? JSON.stringify(oldI) : null;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "mylogger",
|
"name": "mylogger",
|
||||||
"version": "1.1.5",
|
"version": "1.1.4",
|
||||||
"author": "Verdnatura Levante SL",
|
"author": "Verdnatura Levante SL",
|
||||||
"description": "MySQL and MariaDB logger using binary log",
|
"description": "MySQL and MariaDB logger using binary log",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
|
|
Loading…
Reference in New Issue