codecombat/scripts/analytics/insertStripeAnalytics.js
Matt Lott 0768b533e2 Subs dashboard perf
Caching older (at least 16 days) Stripe invoices in analytics
collection, which will be updated once a day via the analytics server
cron job.
2015-07-31 16:19:40 -07:00

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();
});
}