-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcouch_persistance_layer.js
31 lines (31 loc) · 1.37 KB
/
couch_persistance_layer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
module.exports = function(eventsToQueueBeforeUploadToCouch, lookoutCouch, numberOfNewRecordsBeforeViewRecomputation, uniqueFilter) {
var queuedEvents = []
var numMessages = 0;
return {
persistEvent: function(eventJSON) {
numMessages++;
queuedEvents.push(eventJSON);
if(queuedEvents.length==eventsToQueueBeforeUploadToCouch) {
var bulkRequest = {
allOrNothing: true,
docs: queuedEvents
}
lookoutCouch.bulk(bulkRequest, function(err, body) {
if(err) throw new Error("problem sending data to couch: "+err);
});
while(queuedEvents.length > 0) {
queuedEvents.pop();
}
}
if(++numMessages % numberOfNewRecordsBeforeViewRecomputation == 0) lookoutCouch.view('events', 'ips_by_app_sha');
},
getIPsForSHA: function(shaKey, onComplete, onError) {
lookoutCouch.view('events', 'ips_by_app_sha', {keys: [shaKey]}, function(error, response) {
if(error) return onError(error);
var ipsAsNumbers = response.rows.map(function(event) { return event.value; });
var uniqueIpNumbers = uniqueFilter.filter(ipsAsNumbers);
onComplete(uniqueIpNumbers);
});
}
}
}