walter
Version:
Backup utilities for postgresql
76 lines (66 loc) • 2.22 kB
JavaScript
var env = process.env;
var fs = require('fs');
var knox = require('knox');
var path = require('path');
var moment = require('moment');
var buffers = require('buffers');
var optimist = require('optimist');
var spawn = require('child_process').spawn;
var textable = require('text-table');
var filesize = require('humanize').filesize;
var argv = optimist
.usage('List base backups on s3.\nUsage: walter backup-list')
.describe('prefix', 'Prefix used to store files on s3 (env: WALTER_PREFIX)')
.describe('aws-key', 'Your AWS Key (env: WALTER_AWS_KEY)')
.describe('aws-secret', 'Your AWS Secret (env: WALTER_AWS_SECRET)')
.describe('aws-region', 'AWS region for your bucket (env: WALTER_AWS_REGION)')
.describe('s3-bucket', 'S3 Bucket Name (env: WALTER_S3_BUCKET)')
.default('prefix', env.WALTER_PREFIX)
.default('aws-key', env.WALTER_AWS_KEY)
.default('aws-secret', env.WALTER_AWS_SECRET)
.default('s3-bucket', env.WALTER_S3_BUCKET)
.demand('prefix')
.demand('aws-key')
.demand('aws-secret')
.demand('s3-bucket')
.wrap(120)
.argv;
module.exports = function() {
var s3 = createS3Client();
var base_path = argv['prefix'] + '/base';
s3.list({prefix: base_path}, onResponse);
};
function onResponse(err, data) {
if(err) return handleErr(err);
var contents = data['Contents'];
var rows = [
['name', 'date', 'size'],
['-----------------', '-------------', '-------------']
];
for(var i=0; i<contents.length; i++) {
if(!/_manifest\.json$/.test(contents[i].Key)) {
rows.push([
path.basename(contents[i].Key),
moment(contents[i].LastModified).calendar(),
filesize(contents[i].Size)
]);
}
}
console.log("walter\n");
console.log("listing base backups for:", argv['prefix'], "\n");
console.log(textable(rows, {hsep: "\t"}));
}
function handleErr(err) {
console.error(err);
process.exit(1);
}
function createS3Client() {
var options = {
key: argv['aws-key'],
secret: argv['aws-secret'],
bucket: argv['s3-bucket']
};
if(argv['aws-region'])
options.region = argv['aws-region'];
return new knox.createClient(options);
}