mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
// To use: set the range you want below, make sure your environment has the stripe key, then run:
|
|
// node scripts/analytics/subscriptionStats.js
|
|
|
|
require('coffee-script');
|
|
require('coffee-script/register');
|
|
_ = require('lodash');
|
|
|
|
config = require('../../server_config');
|
|
if(config.stripe.secretKey.indexOf('sk_test_')==0) {
|
|
throw new Error('You should not run this on the test data... Get your environment in gear.');
|
|
}
|
|
|
|
stripe = require('stripe')(config.stripe.secretKey);
|
|
|
|
var range = {
|
|
gt: ''+(new Date('2015-09-01').getTime()/1000),
|
|
lt: ''+(new Date('2015-10-01').getTime()/1000)
|
|
};
|
|
|
|
var lastStartDate = null;
|
|
begin = function(starting_after) {
|
|
var query = {date: range, limit: 100};
|
|
if(starting_after) {
|
|
query.starting_after = starting_after;
|
|
lastStartDate = starting_after;
|
|
}
|
|
stripe.invoices.list(query, onInvoicesReceived);
|
|
}
|
|
|
|
customersPaid = [];
|
|
|
|
onInvoicesReceived = function(err, invoices) {
|
|
if(err) {
|
|
console.error("Got error fetching invoices:", err);
|
|
return begin(lastStartDate);
|
|
}
|
|
for(var i in invoices.data) {
|
|
var invoice = invoices.data[i];
|
|
if(!invoice.paid) { continue; }
|
|
if(!invoice.total) { continue; } // not paying anything!
|
|
//console.log(invoice);
|
|
customersPaid.push(invoice.customer);
|
|
}
|
|
if(invoices.has_more) {
|
|
console.log('Loaded', customersPaid.length, 'invoices.')
|
|
begin(invoices.data[i].id);
|
|
}
|
|
else {
|
|
console.log('--- Actual active total customers:', _.unique(customersPaid).length);
|
|
loadNewCustomers();
|
|
}
|
|
};
|
|
|
|
loadNewCustomers = function(starting_after) {
|
|
query = {created: range, limit: 100};
|
|
if(starting_after) {
|
|
query.starting_after = starting_after;
|
|
lastStartDate = starting_after;
|
|
}
|
|
stripe.customers.list(query, onCustomersReceived);
|
|
};
|
|
|
|
newCustomersPaid = [];
|
|
|
|
onCustomersReceived = function(err, customers) {
|
|
if(err) {
|
|
console.error("Got error fetching customers:", err);
|
|
return loadNewCustomers(lastStartDate);
|
|
}
|
|
for(var i in customers.data) {
|
|
var customer = customers.data[i];
|
|
if(customersPaid.indexOf(customer.id) == -1) { continue; }
|
|
newCustomersPaid.push(customer.id);
|
|
}
|
|
if(customers.has_more) {
|
|
console.log('Loaded', newCustomersPaid.length, 'new customers.');
|
|
loadNewCustomers(customers.data[i].id);
|
|
}
|
|
else {
|
|
console.log('--- Actual new customers:', newCustomersPaid.length);
|
|
}
|
|
};
|
|
|
|
begin();
|