1
2
3
4 """
5 Creates a shell script to clear file space and delete interleave component
6 files. Also gives SQL to update the database.
7
8 @author: Eckhard Sutorius
9 @org: WFAU, IfA, University of Edinburgh
10
11 @newfield contributors: Contributors, Contributors (Alphabetical Order)
12 @contributors: R.S. Collins
13 """
14
15 from __future__ import division, print_function
16 import os
17
18 from wsatools.CLI import CLI
19 from wsatools.DbConnect.DbSession import DbSession
20
21
23 """ Get all 'normal' files contributing to an interleaved file.
24 """
25 return db.query("filename", "Multiframe",
26 whereStr="project LIKE 'u/ukidss%' AND filename LIKE '%_v"
27 + versionNum + "/w%' AND " + dateRange +
28 " AND filename NOT LIKE "
29 "'PixelFileNoLongerAvailable:%' AND frameType LIKE 'normal' "
30 "AND multiframeID IN (SELECT P.multiframeID FROM "
31 "Multiframe AS M, Provenance AS P WHERE "
32 "M.multiframeID=P.combiframeID AND frameType='leav')")
33
34
35
37 """ Get all science frames that are not stacks or confs of a stack.
38 """
39 return db.query("filename", "Multiframe",
40 whereStr="project LIKE 'u/ukidss%' AND filename LIKE '%_v"
41 + versionNum + "/w%' AND " + dateRange +
42 " AND filename NOT LIKE "
43 "'PixelFileNoLongerAvailable:%' AND frameType NOT LIKE "
44 "'%stack%'")
45
46
47
49 """ Write the shell script that deletes all files found.
50 """
51 ofh = open(delFile, 'w')
52 ofh.write("#! /usr/bin/tcsh\n")
53 for fileName in fileNames:
54 if delType.lower() == "normalleav"and fileName.count('_') != 2:
55 print("WARNING: wrong file? " + fileName)
56
57 elif delType.lower() == "nonstack" \
58 and ("_st" in fileName or not "/w2" in fileName):
59
60 print("WARNING: wrong file? " + fileName)
61
62 ofh.write("rm -f " + fileName.rpartition(':')[2] + '\n')
63
64 ofh.close()
65 os.chmod(delFile, 0755)
66
67
68
69
70
71 if __name__ == "__main__":
72
73 CLI.progArgs += [
74 CLI.Argument("beginDate", "05A", isValOK=CLI.isDateOK),
75 CLI.Argument("endDate", "05A", isValOK=CLI.isDateOK),
76 CLI.Argument("version", "1", isValOK=lambda x: x.replace('.', '').isdigit() and x>'0')]
77
78 frameTypes = ['normalleav', 'nonstack']
79 CLI.progOpts.remove("test")
80 CLI.progOpts.append(CLI.Option('f', "frame_types",
81 " or ".join(frameTypes), "NAME", frameTypes[0],
82 isValOK=lambda x: x in frameTypes))
83
84 cli = CLI("CleanUpPixelServer", "$Revision: 7205 $", __doc__)
85
86 db = DbSession(cli=cli)
87 delType = cli.getOpt("frame_types")
88 versionnr = cli.getArg("version")
89 obsCal = db.sysc.obsCal
90 try:
91 dateRange = "utDate BETWEEN '%s' AND '%s'" \
92 % obsCal.dateRange(cli.getArg("beginDate"), cli.getArg("endDate"))
93
94 except Exception as error:
95 raise SystemExit("Illegal Option: " + str(error))
96
97
98 if delType.lower() == "normalleav":
99 fileNames = getNormalLeav(db, versionnr, dateRange)
100 print("%s files found." % len(fileNames))
101 if fileNames:
102 writeDelScript("deleteLeaves.script", delType, fileNames)
103
104 elif delType.lower() == "nonstack":
105 fileNames = getNonStack(db, versionnr, dateRange)
106 print("%s files found." % len(fileNames))
107 if fileNames:
108 writeDelScript("deleteNonStacks.script", delType, fileNames)
109
110 print("To update the server, run the following SQL on the appropriate "
111 "DBs:")
112
113 if delType.lower() == "normalleav":
114 print("UPDATE Multiframe"
115 " SET filename='PixelFileNoLongerAvailable:'+filename\n"
116 " WHERE project LIKE 'u/ukidss%' AND filename LIKE '%_v"
117 + versionnr + "/%'\nAND " + dateRange + "\nAND filename NOT LIKE"
118 " 'PixelFileNoLongerAvailable:%'\n"
119 "AND frameType LIKE 'normal' AND multiframeID IN (\n"
120 "SELECT P.multiframeID FROM Multiframe as M, Provenance as P\n"
121 " WHERE M.multiframeID=P.combiframeID AND frameType='leav')")
122
123 elif delType.lower() == "nonstack":
124 print("UPDATE Multiframe"
125 " SET filename='PixelFileNoLongerAvailable:'+filename\n"
126 " WHERE project LIKE 'u/ukidss%' AND filename LIKE '%_v"
127 + versionnr + "/w%'\nAND " + dateRange + "\n"
128 "AND filename NOT LIKE 'PixelFileNoLongerAvailable:%'\n"
129 "AND frameType NOT LIKE '%stack%'")
130
131
132
133
134
135
136
137
138
139