mysql-sender.js 936 Bytes
const client = require('./mysql-client');
const logger = global.yoho.logger;

class MySqlSender {
    constructor(table, duration = 2000) {
        this.table = table;
        this.batchMessages = [];

        setInterval(() => {
            this._send();
        }, duration);
    }

    addMessage(msg) {
        if (msg) {
            this.batchMessages.push(msg);
        }
    }

    async _send() {
        const len = this.batchMessages.length;

        if (len < 1) {
            logger.debug('[db] insert list is empty');
            return;
        }

        const bulk = this.batchMessages.splice(0, len);

        for (let i of bulk) {
            logger.info('[db] insert db [%s]', JSON.stringify(i));
            await client(this.table).insert(i).catch((err) => {
                logger.error('[db] insert data=[%s] error=[%s]', JSON.stringify(i), err);
            });
        }

    }
}

module.exports = MySqlSender;