zsnapper 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/node/bin/node
  2. "use strict";
  3. var CronJob = require('cron').CronJob;
  4. var async = require('async');
  5. var util = require('util');
  6. var config = require('./lib/config.js');
  7. var dspattern = require('./lib/dspattern.js');
  8. var SnapshotSet = require('./lib/snapshotset.js');
  9. function applySnap(job, ds, cb) {
  10. util.log('Process ' + ds + '@' + job.tag);
  11. var s = new SnapshotSet(ds, job.tag);
  12. s.snapshot(function (err) {
  13. if (err) {
  14. cb(err);
  15. }
  16. s.prune(job.keep, cb);
  17. });
  18. }
  19. function snap(job) {
  20. async.mapSeries(job.dataset, dspattern, function (err, datasets) {
  21. if (err) {
  22. throw err;
  23. }
  24. var merged = [];
  25. merged = merged.concat.apply(merged, datasets);
  26. async.forEachSeries(merged, function (ds, cb) {
  27. applySnap(job, ds, cb);
  28. });
  29. });
  30. }
  31. var cronJobs = [];
  32. var jobs = config(process.argv[2]);
  33. jobs.forEach(function (job) {
  34. util.log('Scheduling ' + job.tag + ' at ' + job.schedule)
  35. var cronJob = new CronJob('00 ' + job.schedule, function () {
  36. snap(job);
  37. }, null, true);
  38. cronJobs.push(cronJob);
  39. });