zsnapper 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. var snapSets = merged.map(function (ds) {
  27. return new SnapshotSet(ds, job.tag);
  28. });
  29. async.forEachSeries(snapSets, function (snapSet, cb) {
  30. snapSet.snapshot(cb);
  31. }, function () {
  32. async.forEachSeries(snapSets, function (snapSet, cb) {
  33. snapSet.prune(job.keep, cb);
  34. });
  35. });
  36. });
  37. }
  38. var cronJobs = [];
  39. var jobs = config(process.argv[2]);
  40. jobs.forEach(function (job) {
  41. util.log('Scheduling ' + job.tag + ' at ' + job.schedule)
  42. var cronJob = new CronJob('00 ' + job.schedule, function () {
  43. snap(job);
  44. }, null, true);
  45. cronJobs.push(cronJob);
  46. });