Created
January 15, 2015 09:18
-
-
Save gido/da0c29879aec09c0467f to your computer and use it in GitHub Desktop.
Quick&Dirty script to get total disk usages of each account by crawling the Alwaysdata web administration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* run: | |
* $ casperjs diskusage.js --user=myaccount --password=mypassword | |
* | |
* This script can lookup for env variables: | |
* ALWAYSDATA_USER | |
* ALWAYSDATA_PASSWORD | |
*/ | |
var casper = require('casper').create({ | |
//verbose: true, | |
//logLevel: "debug" | |
}); | |
var system = require('system'); | |
var utils = require('utils'); | |
var user = casper.cli.has('user') ? casper.cli.get('user') : system.env.ALWAYSDATA_USER; | |
var password = casper.cli.has('password') ? casper.cli.get('password') : system.env.ALWAYSDATA_PASSWORD; | |
var accounts = []; | |
var diskUsages = []; | |
if (!user || !password) { | |
casper.echo("Usage: casperjs diskusage.js --user=myaccount --password=mypassword"); | |
casper.exit(); | |
} | |
function convertToMegaBytes(totalString) { | |
var totalDiskSpace = totalString.replace('Total : ', ''); | |
var totals = totalDiskSpace.match(/([0-9,]+)\s([a-z]+)/i); | |
if (totals.length > 0) { | |
value = totals[1].replace(',', '.'); | |
value = parseFloat(value); | |
units = totals[2]; | |
switch(units) { | |
case 'Mio': | |
totalDiskSpace = value; | |
break; | |
case 'octet': | |
totalDiskSpace = value / 1024.0 / 1024.0; | |
break; | |
case 'Gio': | |
totalDiskSpace = value * 1024.0; | |
break; | |
} | |
} else { | |
return 0; | |
} | |
return totalDiskSpace; | |
} | |
function getAccounts() { | |
var accounts = document.querySelectorAll('#change-object optgroup[label="Comptes"] option'); | |
return Array.prototype.map.call(accounts, function(a) { | |
return a.getAttribute('value'); | |
}); | |
} | |
casper.start('https://admin.alwaysdata.com/login/', function() { | |
this.echo('login...'); | |
this.fill('form[action="/login/"]', { | |
login: user, | |
password: password, | |
alive: false | |
}, true); | |
}); | |
casper.thenOpen('https://admin.alwaysdata.com/usage/storage/', function() { | |
this.echo("authenticated. Calculating total disk usage..."); | |
accounts = this.evaluate(getAccounts); | |
casper.eachThen(accounts, function forEachAccountDo(response) { | |
var account = response.data; | |
// self.echo("calculating disk usage for " + account + " ..."); | |
casper.fill('#object-choice', { | |
"change-object": account | |
}, true); | |
casper.then(function() { | |
var totalDiskSpaceText = this.evaluate(function() { | |
// there is jQuery on the page, so use it :) | |
return $(".contentmenu.left ul li").last().text(); | |
}); | |
var totalDiskSpace = convertToMegaBytes(totalDiskSpaceText); | |
diskUsages.push([account, totalDiskSpace]); | |
}); | |
}); | |
}); | |
casper.run(function() { | |
var self = this; | |
// echo results in some pretty fashion | |
this.echo(accounts.length + ' accounts found:'); | |
sorted = diskUsages.sort(function(a, b) { return b[1] - a[1]; }); | |
this.echo("List of account ordered:"); | |
this.echo("------------------------"); | |
var total = 0; | |
sorted.forEach(function(item) { | |
casper.echo(item[0] + ": " + item[1] + " MB"); | |
total = total + item[1]; | |
}); | |
this.echo(''); | |
this.echo('Total: '+ total + ' MB'); | |
this.echo('Total: '+ (total/1024) + ' GB'); | |
this.exit(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment