mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-25 00:28:31 -05:00
0768b533e2
Caching older (at least 16 days) Stripe invoices in analytics collection, which will be updated once a day via the analytics server cron job.
86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
// Insert older (-16 days) Stripe invoices into coco database analytics collection
|
|
|
|
if (process.argv.length !== 4) {
|
|
log("Usage: node <script> <Stripe API key> <mongo connection Url>");
|
|
process.exit();
|
|
}
|
|
|
|
var scriptStartTime = new Date();
|
|
var stripeAPIKey = process.argv[2];
|
|
var mongoConnUrl = process.argv[3];
|
|
var stripe = require("stripe")(stripeAPIKey);
|
|
var MongoClient = require('mongodb').MongoClient;
|
|
|
|
getInvoices(function(invoices) {
|
|
log("Invoice count: " + invoices.length);
|
|
insertInvoices(invoices, function() {
|
|
log("Script runtime: " + (new Date() - scriptStartTime));
|
|
process.exit(0);
|
|
});
|
|
});
|
|
|
|
function log(str) {
|
|
console.log(new Date().toISOString() + " " + str);
|
|
}
|
|
|
|
function getInvoices(done) {
|
|
var sixteenDaysAgo = new Date()
|
|
sixteenDaysAgo.setUTCDate(sixteenDaysAgo.getUTCDate() - 16);
|
|
invoiceMaxTimestamp = Math.floor(sixteenDaysAgo.getTime() / 1000);
|
|
var options = {limit: 100, date: {lt: invoiceMaxTimestamp}};
|
|
var invoices = [];
|
|
|
|
getInvoicesHelper = function(options, done) {
|
|
// log("getInvoicesHelper " + invoices.length + " " + options.starting_after);
|
|
stripe.invoices.list(options, function (err, result) {
|
|
if (err) {
|
|
console.log(err);
|
|
return;
|
|
}
|
|
invoices = invoices.concat(result.data);
|
|
if (result.has_more) {
|
|
options.starting_after = result.data[result.data.length - 1].id
|
|
getInvoicesHelper(options, done);
|
|
}
|
|
else {
|
|
done(invoices);
|
|
}
|
|
});
|
|
};
|
|
getInvoicesHelper(options, done);
|
|
}
|
|
|
|
function insertInvoices(invoices, done) {
|
|
var docs = [];
|
|
for (var i = 0; i < invoices.length; i++) {
|
|
docs.push({
|
|
_id: invoices[i].id,
|
|
date: invoices[i].date,
|
|
properties: invoices[i]
|
|
});
|
|
}
|
|
|
|
MongoClient.connect(mongoConnUrl, function (err, db) {
|
|
if (err) {
|
|
console.log(err);
|
|
return done();
|
|
}
|
|
|
|
insertInvoicesHelper = function() {
|
|
var doc = docs.pop();
|
|
if (!doc) {
|
|
db.close();
|
|
return done();
|
|
}
|
|
db.collection('analytics.stripe.invoices').save(doc, function(err, result) {
|
|
if (err) {
|
|
console.log(err);
|
|
db.close();
|
|
return done();
|
|
}
|
|
insertInvoicesHelper();
|
|
});
|
|
};
|
|
insertInvoicesHelper();
|
|
});
|
|
}
|