-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProcessUsageJob.js
128 lines (109 loc) · 4.54 KB
/
ProcessUsageJob.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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env node
var pg = require('pg');
var moment = require('moment')
var request = require('request')
var connectionString = process.env.DATABASE_URL || 'postgres://u5hu90vmsdpiii:pasajqaftv96045249iahjehpfl@ec2-54-204-47-38.compute-1.amazonaws.com:5872/d8flqqgs1o4cu9?ssl=true';
var client = new pg.Client(connectionString);
client.connect(function(response) {
//truncateUsage();
insertDummyData(30);
processUsage();
function killConnection() {
client.end();
}
function processUsage() {
var query = client.query('SELECT * FROM xi_usage where status = $1', ["NEW"]);
query.on('end', function(data) {
console.log(data.rows.length);
var query = client.query('UPDATE xi_usage set status = $1 where status = $2', ["QUEUED", "NEW"]);
query.on('end', function(res) {
console.log(res);
writeUsageToCsv(data.rows);
});
});
}
function writeUsageToCsv(usageArray) {
var csvWriter = require('csv-write-stream');
var fileName = 'usageData/' + (new Date()).getTime() + '.csv';
var fs = require('fs');
var writer = csvWriter();
writer.pipe(fs.createWriteStream(fileName, {}));
for (var i = 0; i < usageArray.length; i++) {
writer.write({
ACCOUNT_ID: usageArray[i].accountid,
SUBSCRIPTION_ID: "A-S00000344",
UOM: usageArray[i].uom,
QTY: usageArray[i].qty,
STARTDATE: moment(usageArray[i].StartDateTime).format("MM/DD/YYYY"),
ENDDATE: moment(usageArray[i].EndDateTime).format("MM/DD/YYYY"),
CHARGE_ID: "",
DESCRIPTION: usageArray[i].description
});
}
postToZuora(fileName, usageArray);
writer.end();
}
function insertDummyData(count) {
var queryString = 'INSERT INTO xi_usage (qty, uom, status,"meteredItem", description,accountid,"StartDateTime","EndDateTime") values (\'23\',\'GB\',\'NEW\',\'VMS\',\'test usage\',\'A00000394\',\'2015-01-01\',\'2016-12-12\') ';
for (var i = 0; i < count - 1; i++) {
queryString += ', (\'23\',\'GB\',\'NEW\',\'VMS\',\'test usage\',\'A00000394\',\'2015-01-01\',\'2016-12-12\') ';
}
var query = client.query(queryString);
query.on('end', function(res) {
console.log("added rows with count " + res.rowCount);
});
}
function postToZuora(fileName, usageArray) {
setTimeout(function() {
var fs = require('fs');
var formData = {
file: fs.createReadStream(fileName, {})
};
request.post({
url: 'https://apisandbox-api.zuora.com/rest/v1/usage',
formData: formData,
}, function callback(err, httpResponse, body) {
body = JSON.parse(body);
if (err) {
console.log('upload failed:', err);
return;
} else if (body && body.checkImportStatus) {
console.log('Request sent to Zuora');
parseZuoraResponse(body.checkImportStatus, usageArray);
}
else {
console.log("error with file : " + fileName);
}
}).auth('[email protected]', 'Nutanix1');
}, 2000);
}
function parseZuoraResponse(statusUrl, usageArray) {
var self = this;
console.log("checking status of url = " + statusUrl);
request.get({
url: statusUrl
}, function callback(err, httpResponse, body) {
if (!err) {
body = JSON.parse(body);
if (body && body.success) {
updateUsageStatus(usageArray, "SUCCESS");
} else {
updateUsageStatus(usageArray, "FAILED");
}
}
}).auth('[email protected]', 'Nutanix1');
}
function updateUsageStatus(usageArray, status) {
console.log("setting status to " + status);
var ids = Object.keys(usageArray).map(function(e) {
return usageArray[e].id });
var query = client.query('SELECT * from xi_usage WHERE id = ANY($1::int[])', [ids]);
query.on('end', function(res) {
console.log("updated rows count " + res.rowCount + " with status = " + status);
killConnection();
});
}
function truncateUsage() {
client.query("truncate xi_usage");
}
});