40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
const db = global.db;
|
|
const { EventEmitter } = require('events');
|
|
const log = require("./logger");
|
|
|
|
log.info("Starting event watcher...");
|
|
|
|
const emitter = new EventEmitter();
|
|
|
|
var lastEventIndex = 0;
|
|
|
|
async function getLastEventIndex() {
|
|
const result = await db.query('SELECT EventIndex FROM Events ORDER BY EventIndex DESC LIMIT 1');
|
|
if (result && result.length > 0) {
|
|
lastEventIndex = result[0].EventIndex;
|
|
log.info(`Last event index: ${lastEventIndex}`);
|
|
}
|
|
}
|
|
|
|
getLastEventIndex();
|
|
|
|
async function fetchEvents() {
|
|
try {
|
|
const events = await db.query('SELECT * FROM Events WHERE EventIndex > ? ORDER BY EventIndex ASC', [lastEventIndex]);
|
|
if (events && events.length > 0) {
|
|
log.debug(`Fetched ${events.length} new event(s)`);
|
|
events.forEach(event => {
|
|
emitter.emit('event', event);
|
|
lastEventIndex = event.EventIndex;
|
|
log.debug(`Processed event index: ${lastEventIndex}; ${JSON.stringify(event)}`);
|
|
});
|
|
}
|
|
} catch (err) {
|
|
log.error(`Error fetching events: ${err}`);
|
|
}
|
|
setTimeout(fetchEvents, 1000);
|
|
}
|
|
|
|
fetchEvents();
|
|
|
|
module.exports = emitter; |