-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathhit_stream_callbacks.js
More file actions
78 lines (67 loc) · 2.14 KB
/
hit_stream_callbacks.js
File metadata and controls
78 lines (67 loc) · 2.14 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var mongoRepository = require('./mongoRepository.js');
var Q = require('q');
var request = Q.denodeify(require('request'));
var fs = require('fs');
var log = function(message) {
message = "\n" + new Date() + ": " + message;
console.log(message);
fs.appendFile('stream_callback_hit.log', message, function(err) {
});
};
var hitStreamCallbacks = function() {
log("Starting sync");
mongoRepository.find('stream', {
'callbackUrl': {
'$ne': null
}
})
.then(replaceTemplateVars)
.then(hitCallbackUrls)
.then(function() {
log("Sync Ended \n\n\n\n");
});
};
var replaceTemplateVars = function(streams) {
var deferred = Q.defer();
var callbackUrls = [];
streams.forEach(function(stream) {
if (null == stream || !stream.callbackUrl) return;
var requestData = {},
url = stream.callbackUrl;
url = url.replace("{{latestSyncField}}", encodeURIComponent(stream.latestSyncField));
url = url.replace("{{streamid}}", stream.streamid);
requestData.callbackUrl = url;
requestData.writeToken = stream.writeToken;
callbackUrls.push(requestData);
});
deferred.resolve(callbackUrls);
return deferred.promise;
};
var delayedRequest = function(url, writeToken) {
var options = {
url: url,
headers: {
'Authorization': writeToken
},
method: 'GET'
};
return Q.delay(10000).then(function() {
return request(options);
});
};
var hitCallbackUrls = function(urls) {
return urls.reduce(function(acc, url, index) {
return acc
.then(function() {
return delayedRequest(url.callbackUrl, url.writeToken);
})
.then(function(res) {
log("Done executing " + url.callbackUrl + " with response " + res[0].statusCode + '\n' + res[0].body);
})
.catch(function(err) {
log("Error for url: " + url.callbackUrl + " error was : " + err);
});
}, Q.resolve())
};
hitStreamCallbacks();
setInterval(hitStreamCallbacks, 18000000);