ab88039267d4fc845cbde8678000ad44e2800cee
[nodejs-repoproxy.git] / lib / repo-yum.js
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");
7
8
9
10 function maintain(name, repoinfo, files) {
11         log.info("Starting maintenance routine for yum repo %s (%s)", name, repoinfo.url);
12         
13         var metaAge = 24*3600*1000*(repoinfo.updateinterval);
14         var expireAge = 24*3600*1000*(repoinfo.expiretime);
15         
16         
17         function fileCheck(i) {
18                 var wasExpired = false;
19                 var inDownload = false;
20                 
21                 log.debug("checking file: ", files[i]);
22                 log.debug("checking if file is in download mode");
23
24                 // need to check global.repoproxy.downloads
25                 if(typeof global.repoproxy.downloads[files[i]] != "undefined") {
26                         if(global.repoproxy.downloads[files[i]] == 1) {
27                                 inDownload=true;
28                         }
29                 }
30                 
31                 
32                 
33                 // we look for repodata/repomd.xml file, if this is past maturity, we clean that whole directory
34                 if(!inDownload) {
35                         if(files[i].match(/.*repodata\/repomd\.xml$/)) {
36                                 log.debug("Found repomd.xml file: ", files[i]);
37                                 
38                                 // strip the repomd file to get the dir
39                                 var repomddir = files[i].replace(/repomd\.xml$/, "");
40                                 log.debug("repomd dir is:", repomddir);
41         
42                                 
43                                 // do the file stat
44                                 fs.stat(files[i], function(err, stats) {
45                                         log.debug("stats for file was: ", stats);
46                                         var curtime = new Date().getTime();
47                                         var ctime = stats.ctime.getTime();
48                                         log.debug("curtime is ", curtime);
49                                         log.debug("ctime is ", ctime);
50                                         
51                                         var age = curtime - ctime;
52                                         log.debug("age is (%d) for (%d)", age, metaAge);
53                                         if(age > metaAge) {
54                                                 cache.moveToCleanup(repomddir);
55                                                 log.info("Sending repomd directory to trash for cleanup (%s)", repomddir);
56                                                 wasExpired = true;
57                                         }
58                                 })
59                                 
60                         } else {
61                                 // STUFF!!!
62                                 fs.stat(files[i], function(err, stats) {
63                                         log.debug("stats for file was: ", stats);
64                                         var curtime = new Date().getTime();
65                                         var atime = stats.atime.getTime();
66                                         log.debug("curtime is ", curtime);
67                                         log.debug("ctime is ", atime);
68                                         
69                                         var age = curtime - atime;
70                                         //log.debug("age is (%d) for (%d)", age, expireAge);
71                                         if(age > expireAge) {
72                                                 // TODO: cleanup singular file
73                                                 // TODO: cleanup meta too, fuck me
74                                                 //log.debug("clean up file \n", files[i]);
75                                                 var metafile = files[i].replace(/(.*)\/(.[^\/]+$)/, "$1/.meta.$2.filesize");
76                                                 //log.debug("meta for this file is \n", nfile);
77                                                 cache.moveToCleanup(files[i]);
78                                                 cache.moveToCleanup(metafile);
79                                                 log.info("Sending expired file to trash for cleanup (%s)", files[i]);
80                                                 wasExpired = true;
81                                         }
82                                 })
83                         }
84                 } else {
85                         log.debug("file %s was ignored as its in download", files[i]);
86                 }
87
88                 if(typeof files[i+1] != "undefined") fileCheck(i+1);
89         }
90         
91         if(typeof files[0] != 'undefined') fileCheck(0)
92         else log.info("Skipping (yum) file check as there are none... apprently?");
93
94 }
95
96 exports.maintain = maintain;