cleaner.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var logging = require("./logging");
  2. var config = require("./config");
  3. var cache = require("./cache");
  4. var df = require("node-df");
  5. var fs = require("fs");
  6. var redis = cache.get_redis();
  7. var exp = {};
  8. // compares redis' used_memory with cleaning_redis_limit
  9. // callback contains error, true|false
  10. function should_clean_redis(callback) {
  11. cache.info(function(err, info) {
  12. if (err) {
  13. callback(err, false);
  14. } else {
  15. try {
  16. //logging.debug(info.toString());
  17. logging.debug("used mem:" + info.used_memory);
  18. var used = parseInt(info.used_memory) / 1024;
  19. logging.log("RedisCleaner: " + used + "KB used");
  20. callback(err, used >= config.cleaning_redis_limit);
  21. } catch(e) {
  22. callback(e, false);
  23. }
  24. }
  25. });
  26. }
  27. // uses `df` to get the available fisk space
  28. // callback contains error, true|false
  29. function should_clean_disk(callback) {
  30. df({
  31. file: __dirname + "/../" + config.faces_dir,
  32. prefixMultiplier: "KiB",
  33. isDisplayPrefixMultiplier: false,
  34. precision: 2
  35. }, function (err, response) {
  36. if (err) {
  37. callback(err, false);
  38. } else {
  39. var available = response[0].available;
  40. logging.log("DiskCleaner: " + available + "KB available");
  41. callback(err, available < config.cleaning_disk_limit);
  42. }
  43. });
  44. }
  45. // check if redis limit reached, then flush redis
  46. // check if disk limit reached, then delete images
  47. exp.run = function() {
  48. should_clean_redis(function(err, clean) {
  49. if (err) {
  50. logging.error("Failed to run RedisCleaner");
  51. logging.error(err);
  52. } else if (clean) {
  53. logging.warn("RedisCleaner: Redis limit reached! flushing now");
  54. redis.flushall();
  55. } else {
  56. logging.log("RedisCleaner: Nothing to clean");
  57. }
  58. });
  59. should_clean_disk(function(err, clean) {
  60. if (err) {
  61. logging.error("Failed to run DiskCleaner");
  62. logging.error(err);
  63. } else if (clean) {
  64. logging.warn("DiskCleaner: Disk limit reached! Cleaning images now");
  65. var facesdir = __dirname + "/../" + config.faces_dir;
  66. var helmdir = __dirname + "/../" + config.helms_dir;
  67. var renderdir = __dirname + "/../" + config.renders_dir;
  68. var skindir = __dirname + "/../" + config.skins_dir;
  69. fs.readdir(facesdir, function (err, files) {
  70. for (var i = 0, l = Math.min(files.length, config.cleaning_amount); i < l; i++) {
  71. var filename = files[i];
  72. if (filename[0] !== ".") {
  73. fs.unlink(facesdir + filename, nil);
  74. fs.unlink(helmdir + filename, nil);
  75. fs.unlink(skindir + filename, nil);
  76. }
  77. }
  78. });
  79. fs.readdir(renderdir, function (err, files) {
  80. for (var j = 0, l = Math.min(files.length, config.cleaning_amount); j < l; j++) {
  81. var filename = files[j];
  82. if (filename[0] !== ".") {
  83. fs.unlink(renderdir + filename, nil);
  84. }
  85. }
  86. });
  87. } else {
  88. logging.log("DiskCleaner: Nothing to clean");
  89. }
  90. });
  91. };
  92. function nil () {}
  93. module.exports = exp;