#!/usr/node/bin/node "use strict"; var CronJob = require('cron').CronJob; var async = require('async'); var util = require('util'); var config = require('./lib/config.js'); var dspattern = require('./lib/dspattern.js'); var SnapshotSet = require('./lib/snapshotset.js'); function applySnap(job, ds, cb) { util.log('Process ' + ds + '@' + job.tag); var s = new SnapshotSet(ds, job.tag); s.snapshot(function (err) { if (err) { cb(err); } s.prune(job.keep, cb); }); } function snap(job) { async.mapSeries(job.dataset, dspattern, function (err, datasets) { if (err) { throw err; } var merged = []; merged = merged.concat.apply(merged, datasets); var snapSets = merged.map(function (ds) { return new SnapshotSet(ds, job.tag); }); async.forEachSeries(snapSets, function (snapSet, cb) { snapSet.snapshot(cb); }, function () { async.forEachSeries(snapSets, function (snapSet, cb) { snapSet.prune(job.keep, cb); }); }); }); } var cronJobs = []; var jobs = config(process.argv[2]); jobs.forEach(function (job) { util.log('Scheduling ' + job.tag + ' at ' + job.schedule) var cronJob = new CronJob('00 ' + job.schedule, function () { snap(job); }, null, true); cronJobs.push(cronJob); });