diff --git a/bin/insights/index.js b/bin/insights/index.js index 5e9e3fba..49be2319 100644 --- a/bin/insights/index.js +++ b/bin/insights/index.js @@ -5,27 +5,34 @@ const { waterfall } = require('async') const createProcessExit = require('../../core/util/create-process-exit') const createScoreWorker = require('../../core/worker/score') const createShareWorker = require('../../core/worker/share') -const createLogger = require('../../core/log') +const createStatsWorker = require('../../core/worker/stats') +const createLog = require('../../core/log') const search = require('../../core/db/search') -const log = createLogger({ keyword: 'insights', diff: true }) +const log = createLog({ keyword: 'insights', diff: true }) const processExit = createProcessExit(log) const _createScoreWorker = data => { - const log = createLogger({ keyword: 'insights:price', diff: true }) + const log = createLog({ keyword: 'insights:price', diff: true }) const propName = 'price' return createScoreWorker({ log, propName, data }) } const _createShareWorker = data => { - const log = createLogger({ keyword: 'insights:share', diff: true }) + const log = createLog({ keyword: 'insights:share', diff: true }) return createShareWorker({ log, data }) } +const _createStatsWorker = data => { + const log = createLog({ keyword: 'insights:stats', diff: true }) + return createStatsWorker({ log, data }) +} + const tasks = [ next => search.fetchAll(next), (data, next) => _createScoreWorker(data)(next), - (data, next) => _createShareWorker(data)(next) + (data, next) => _createShareWorker(data)(err => (next(err, data))), + (data, next) => _createStatsWorker(data)(next) ] log.info('starting') diff --git a/config/default.yaml b/config/default.yaml index 94d4bb73..73110881 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -64,3 +64,6 @@ premium_providers: share: minPriceScore: 90 fallbackImage: 'https://blog.windtoday.co/logo.jpg' +stats: + password: process.env.STATS_PASSWORD + database: process.env.STATS_DATABASE diff --git a/core/worker/stats/index.js b/core/worker/stats/index.js new file mode 100644 index 00000000..8b73cd30 --- /dev/null +++ b/core/worker/stats/index.js @@ -0,0 +1,30 @@ +'use strict' + +const MongoClient = require('mongodb').MongoClient +const CONFIG = require('CONFIG').stats +const {assign, waterfall} = require('async') +const {get} = require('lodash') + +const getStats = require('../../stats') + +const password = get(global, CONFIG.password) +const database = get(global, CONFIG.database) + +const uri = `mongodb://root:${password}@cluster0-shard-00-00-a9swv.mongodb.net:27017,cluster0-shard-00-01-a9swv.mongodb.net:27017,cluster0-shard-00-02-a9swv.mongodb.net:27017/${database}?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin` + +module.exports = ({ log, data }) => { + return cb => waterfall([ + next => MongoClient.connect(uri, next), + (db, next) => { + const stats = getStats(data) + const collection = db.collection('stats') + const doc = assign({ + timestamp: Date.now() + }, stats) + collection.insertOne(doc, (err, result) => cb(err, db, result)) + } + ], (err, db, result) => { + db.close() + return cb(err) + }) +} diff --git a/package.json b/package.json index 13df5698..34897bc7 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "lodash": "~4.17.4", "lpwind-api": "~1.0.4", "meow": "~3.7.0", + "mongodb": "~2.2.30", "osom": "~2.2.0", "ozutarifa-api": "~1.2.4", "redis-diff": "~2.0.1",