2017-07-31 11:33:31 +05:30

81 lines
1.6 KiB
JavaScript

'use strict'
const { MongoClient } = require('mongodb')
const { dns } = require('concordant')()
module.exports = service
function service () {
var db
setup()
function setup () {
const mongo = '_main._tcp.mongo.micro.svc.cluster.local'
dns.resolve(mongo, (err, locs) => {
if (err) {
console.error(err)
return
}
const { host, port } = locs[0]
const url = `mongodb://${host}:${port}/events`
MongoClient.connect(url, (err, client) => {
if (err) {
console.log('failed to connect to MongoDB retrying in 100ms')
setTimeout(setup, 100)
return
}
db = client
db.on('close', () => db = null)
})
})
}
function record (args, cb) {
if (!db) {
cb(Error('No database connection'))
return
}
const events = db.collection('events')
const data = {
ts: Date.now(),
eventType: args.type,
url: args.url
}
events.insert(data, (err, result) => {
if (err) {
cb(err)
return
}
cb(null, result)
})
}
function summary (args, cb) {
if (!db) {
cb(Error('No database connection'))
return
}
const summary = {}
const events = db.collection('events')
events.find({}).toArray( (err, docs) => {
if (err) return cb(err)
docs.forEach(function (doc) {
if (!(summary[doc.url])) {
summary[doc.url] = 1
} else {
summary[doc.url]++
}
})
cb(null, summary)
})
}
return {
record: record,
summary: summary
}
}