1
2
3
4 """
5 Check if directories at CASU are ready for transfer.
6
7 @author: E. Sutorius
8 @org: WFAU, IfA, University of Edinburgh
9 """
10
11 from collections import defaultdict
12 import os
13 import smtplib
14 from email.mime.text import MIMEText
15
16 from invocations.cu1.cu1Transfer import CASUQueries
17 from wsatools.CLI import CLI
18 from wsatools.ObsCalendar import WfcamCal
19 from wsatools.SystemConstants import SystemConstants
20
21
22
23 if __name__ == "__main__":
24
25 CLI.progArgs.remove("comment")
26 CLI.progOpts.remove("curator")
27 CLI.progOpts.remove("user")
28 CLI.progOpts += [
29 CLI.Option('b', "begin",
30 "first date to process",
31 "DATE", WfcamCal().getFirstLight("%Y%m%d")),
32 CLI.Option('e', "end",
33 "last date to process",
34 "DATE", WfcamCal().getToday("%Y%m%d")),
35 CLI.Option('c', "casudirs", "main CASU data directories",
36 "PATH", ''),
37 CLI.Option('j', "janet",
38 "use JANET instead of UKLight"),
39 CLI.Option('v', "verbose", "print message to screen")]
40 cli = CLI("CheckCamb", "$Revision: 10229 $", __doc__)
41 sysc = SystemConstants(cli.getArg("database"))
42 CASUQueries.sysc = sysc
43 UKLight = not cli.getOpt("janet")
44
45 if cli.getOpt("casudirs"):
46 scpCasuDirs = cli.getOpt("casudirs").split(',')
47 else:
48 scpCasuDirs = CASUQueries.getCasuStagingDirs(UKLight=UKLight)
49
50 beginDate = int(max(cli.getOpt("begin"),
51 sysc.obsCal.getFirstLight("%Y%m%d")))
52 endDate = int(cli.getOpt("end"))
53
54 transferList = []
55 for direc in scpCasuDirs:
56 srDirs = [os.path.dirname(x) for x in CASUQueries.getSRDirs(
57 direc, UKLight, returnList=True) if os.path.basename(
58 os.path.dirname(x)).isdigit()]
59 otcDirs = [os.path.dirname(x) for x in CASUQueries.getOTCDirs(
60 beginDate, endDate, srDirs, None, direc, UKLight=UKLight,
61 returnList=True) if os.path.basename(os.path.dirname(x)).isdigit()]
62 transferList.extend(sorted(set(otcDirs).difference(srDirs)))
63
64 noVers = []
65 if transferList:
66 transferDict = defaultdict(lambda : defaultdict(list))
67 versDict = defaultdict()
68 for direc in sorted(set(transferList)):
69 versDict.update(CASUQueries.getDirVersions(direc, UKLight=UKLight))
70 for x in transferList:
71 try:
72 vdate, vers = versDict[x].partition('_v')[::2]
73 except KeyError:
74 noVers.append(x)
75 path, tdate = os.path.split(x)
76 transferDict[vers][path].append(tdate)
77
78 text = "%s: \n====" % sysc.loadDatabase
79 for dirVers in transferDict:
80 text += "\nYou need to transfer\n"
81 for path in transferDict[dirVers]:
82 text += " vers. %s from %s for:\n%s\n\n" % (
83 dirVers, path, ', '.join(transferDict[dirVers][path]))
84 for line in noVers:
85 text += "No version info for: %s" % ','.join(noVers)
86 if cli.getOpt("verbose"):
87 print(text)
88 msg = MIMEText(text, 'plain')
89 msg['Subject'] = "CASU Transfers"
90 msg['From'] = "etws@roe.ac.uk"
91 msg['To'] = "etws@roe.ac.uk"
92 s = smtplib.SMTP('localhost')
93 s.sendmail("etws@roe.ac.uk", ["etws@roe.ac.uk"], msg.as_string())
94 s.quit()
95 else:
96 if cli.getOpt("verbose"):
97 print("Nothing to transfer for %s" % sysc.loadDatabase)
98