1 var fs = require("fs");
2 var http = require("http");
3 var url = require("url");
4 var path = require("path");
5 var cache = require("./cache.js");
6 var log = require("./log.js");
10 function maintain(name, repoinfo, files) {
11 log.info("Starting maintenance routine for yum repo %s (%s)", name, repoinfo.url);
13 var metaAge = 24*3600*1000*(repoinfo.updateinterval);
14 var expireAge = 24*3600*1000*(repoinfo.expiretime);
17 function fileCheck(i) {
18 var wasExpired = false;
19 var inDownload = false;
20 var disappeared = false;
22 log.debug("checking file: ", files[i]);
23 log.debug("checking if file is in download mode");
25 // need to check global.repoproxy.downloads
26 if(typeof global.repoproxy.downloads[files[i]] != "undefined") {
27 if(global.repoproxy.downloads[files[i]] == 1) {
34 // we look for repodata/repomd.xml file, if this is past maturity, we clean that whole directory
37 var metafile = files[i].replace(/(.*)\/(.[^\/]+$)/, "$1/.meta.$2.filesize");
39 if(files[i].match(/.*repodata\/repomd\.xml$/)) {
40 log.debug("Found repomd.xml file: ", files[i]);
42 // strip the repomd file to get the dir
43 var repomddir = files[i].replace(/repomd\.xml$/, "");
44 log.debug("repomd dir is:", repomddir);
48 fs.stat(files[i], function(err, stats) {
49 log.debug("stats for file was: ", stats);
50 var curtime = new Date().getTime();
51 var ctime = stats.ctime.getTime();
52 log.debug("curtime is ", curtime);
53 log.debug("ctime is ", ctime);
55 var age = curtime - ctime;
56 log.debug("age is (%d) for (%d)", age, metaAge);
58 cache.moveToCleanup(repomddir);
59 log.info("Sending repomd directory to trash for cleanup (%s)", repomddir);
66 fs.stat(files[i], function(err, stats) {
68 log.debug("some weird problem stating the file");
71 log.debug("stats for file was: ", stats);
72 var curtime = new Date().getTime();
73 var atime = stats.atime.getTime();
74 log.debug("curtime is ", curtime);
75 log.debug("ctime is ", atime);
77 var age = curtime - atime;
78 //log.debug("age is (%d) for (%d)", age, expireAge);
80 // TODO: cleanup singular file
81 // TODO: cleanup meta too, fuck me
82 //log.debug("clean up file \n", files[i]);
83 //log.debug("meta for this file is \n", nfile);
84 cache.moveToCleanup(files[i]);
85 cache.moveToCleanup(metafile);
86 log.info("Sending expired file to trash for cleanup (%s)", files[i]);
94 // make sure we have a metadata file for our file
96 fs.stat(metafile, function(err, stats) {
98 log.debug("file (%s) has no metadata file - moving for cleanup");
99 cache.moveToCleanup(files[i]);
100 cache.moveToCleanup(metafile);
104 fs.stat(files[i], function(err, stats) {
105 var fsize = stats.size;
106 var mfile = fs.createReadStream(metafile);
108 mfile.on("data", function(data) {
112 mfile.on("end", function(closed) {
113 if(fsize != parseInt(expSize)) {
114 log.debug("possible metadata clash for (%s) - (%d),(%s), removing file", files[i], fsize, expSize);
115 cache.moveToCleanup(files[i]);
116 cache.moveToCleanup(metafile);
118 log.debug("metadata good for (%s) - (%d),(%s)", files[i], fsize, expSize);
128 log.debug("file %s was ignored as its in download", files[i]);
131 if(typeof files[i+1] != "undefined") fileCheck(i+1);
134 if(typeof files[0] != 'undefined') fileCheck(0)
135 else log.info("Skipping (yum) file check as there are none... apprently?");
139 exports.maintain = maintain;