This repository has been archived on 2025-10-29. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
gekko/plugins/postgresql/writer.js
2021-06-06 20:25:14 +02:00

74 lines
1.6 KiB
JavaScript
Executable File

var _ = require('lodash');
const log = require('../../core/log');
const util = require('../../core/util');
const config = util.getConfig();
var handle = require('./handle');
var postgresUtil = require('./util');
var Store = function(done, pluginMeta) {
_.bindAll(this);
this.done = done;
this.db = handle;
this.cache = [];
done();
}
Store.prototype.writeCandles = function() {
if(_.isEmpty(this.cache)){
return;
}
//log.debug('Writing candles to DB!');
_.each(this.cache, candle => {
var stmt = `
BEGIN;
LOCK TABLE ${postgresUtil.table('candles')} IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO ${postgresUtil.table('candles')}
(start, open, high,low, close, vwp, volume, trades)
VALUES
(${candle.start.unix()}, ${candle.open}, ${candle.high}, ${candle.low}, ${candle.close}, ${candle.vwp}, ${candle.volume}, ${candle.trades})
ON CONFLICT ON CONSTRAINT ${postgresUtil.startconstraint('candles')}
DO NOTHING;
COMMIT;
`;
this.db.connect((err,client,done) => {
if(err) {
util.die(err);
}
client.query(stmt, (err, res) => {
done();
if (err) {
log.debug(err.stack)
} else {
//log.debug(res)
}
});
});
});
this.cache = [];
}
var processCandle = function(candle, done) {
this.cache.push(candle);
if (this.cache.length > 1)
this.writeCandles();
done();
};
var finalize = function(done) {
this.writeCandles();
this.db = null;
done();
}
if(config.candleWriter.enabled) {
Store.prototype.processCandle = processCandle;
Store.prototype.finalize = finalize;
}
module.exports = Store;