1 |
fantasia |
1.1 |
#! /usr/bin/env python
|
2 |
|
|
#Run with acrontab line:
|
3 |
|
|
#0 * * * * lxplus404.cern.ch /afs/cern.ch/user/f/fantasia/public/HLT/ErrorStream/errorStreamCron.py Data >& /dev/null
|
4 |
|
|
|
5 |
|
|
import os
|
6 |
|
|
import sys
|
7 |
|
|
import time
|
8 |
|
|
if len(sys.argv) != 2:
|
9 |
|
|
print "usage ./errorStreamCron.py ERA"
|
10 |
|
|
print "to display the available ERA labels "
|
11 |
|
|
print "/afs/cern.ch/user/c/chenders/public/hlt/error_stream_collector/error_stream_collector.pl --showEras"
|
12 |
|
|
sys.exit(1)
|
13 |
|
|
ERA = sys.argv[1]
|
14 |
|
|
#RUNNUMBER = sys.argv[2]
|
15 |
|
|
|
16 |
|
|
#Get Last Run Number Looked at
|
17 |
|
|
file = open("/afs/cern.ch/user/f/fantasia/public/HLT/ErrorStream/lastErrorStreamRun.dat")
|
18 |
|
|
line = file.readline()
|
19 |
|
|
RUNNUMBER = line.rstrip()
|
20 |
|
|
#print "Using last runnumber "+RUNNUMBER
|
21 |
|
|
file.close()
|
22 |
|
|
# if the old list does not exist, create an empty one
|
23 |
|
|
if not os.path.exists("/tmp/errorStream.list"): os.system("echo none > /tmp/errorStream.list")
|
24 |
|
|
########### get the list of available runs
|
25 |
|
|
os.system("/afs/cern.ch/user/c/chenders/public/hlt/error_stream_collector/error_stream_collector.pl --era="+ERA+" "+RUNNUMBER+" > /tmp/error_stream_collector.tmp")
|
26 |
|
|
os.system("touch /tmp/errorStream.list")
|
27 |
|
|
os.system("mv /tmp/errorStream.list /tmp/errorStream_old.list")
|
28 |
|
|
os.system("grep .dat /tmp/error_stream_collector.tmp > /tmp/errorStream.list")
|
29 |
|
|
os.system("diff /tmp/errorStream.list /tmp/errorStream_old.list | grep .dat > /tmp/error_diff.list")
|
30 |
|
|
|
31 |
|
|
LastRun = int(RUNNUMBER)
|
32 |
|
|
# check for new events
|
33 |
|
|
file = open("/tmp/error_diff.list")
|
34 |
|
|
line = file.readline()
|
35 |
|
|
newError = False
|
36 |
|
|
if line: newError = True
|
37 |
|
|
file.close()
|
38 |
|
|
#print "Old LastRun is ",LastRun
|
39 |
|
|
if newError:
|
40 |
|
|
# prepare the email body
|
41 |
|
|
message = "New HLT error event ["+ERA+"]:"
|
42 |
|
|
file = open("/tmp/error_diff.list")
|
43 |
|
|
runnumber = "none"
|
44 |
|
|
for line in file:
|
45 |
|
|
newRunString = line.split(ERA)[1].split(".")[1]
|
46 |
|
|
newRun = int(newRunString)
|
47 |
|
|
# print "new run is "+newRunString+" or as an int ",newRun
|
48 |
|
|
errorEvent = "run "+newRunString
|
49 |
|
|
if runnumber != errorEvent:
|
50 |
|
|
# print "run number is "+runnumber+" and the newRun is ",newRun
|
51 |
|
|
runnumber = errorEvent
|
52 |
|
|
if newRun > LastRun:
|
53 |
|
|
LastRun = newRun
|
54 |
|
|
# print "new last run is ",LastRun
|
55 |
|
|
message = message+" "+runnumber+" "
|
56 |
|
|
continue
|
57 |
|
|
file.close()
|
58 |
|
|
hour = time.localtime()[3]
|
59 |
|
|
# send alerts to TMI
|
60 |
|
|
os.system("echo "+message+" | mail -s \"new entry in Error Stream\" hlt-tmi-oncall@cern.ch")
|
61 |
|
|
# send alerts to Tulika
|
62 |
|
|
os.system("echo "+message+" | mail -s \"new entry in Error Stream\" tulika@mail.cern.ch")
|
63 |
|
|
# send sms messages if daytime
|
64 |
|
|
if hour > -3 and hour < 200:
|
65 |
|
|
smsmessage = message
|
66 |
|
|
if len(smsmessage) > 160: smsmessage = "New HLT error event ["+ERA+"]. Message too long to display"
|
67 |
|
|
# send alerts to Maurizio's CERN PHONE
|
68 |
|
|
# os.system("echo "+smsmessage+" | mail -s \"new entry in Error Stream\" 0041764871355@sms.switch.ch")
|
69 |
|
|
# send alerts to HLT PHONE
|
70 |
|
|
#os.system("echo "+smsmessage+" | mail -s \"new entry in Error Stream\" 0041764875575@sms.switch.ch")
|
71 |
|
|
# clean up
|
72 |
|
|
os.system("rm /tmp/error_diff.list")
|
73 |
|
|
os.system("rm /tmp/errorStream_old.list")
|
74 |
|
|
os.system("rm /tmp/error_stream_collector.tmp")
|
75 |
|
|
#Update last run used
|
76 |
|
|
f = open('/afs/cern.ch/user/f/fantasia/public/HLT/ErrorStream/lastErrorStreamRun.dat','w')
|
77 |
|
|
print >>f, LastRun
|