1 |
|
from Actor import * |
2 |
|
from crab_util import * |
3 |
– |
import EdgLoggingInfo |
4 |
– |
import CondorGLoggingInfo |
3 |
|
import common |
4 |
|
import string, os |
5 |
|
|
7 |
|
def __init__(self, cfg_params, nj_list): |
8 |
|
self.cfg_params = cfg_params |
9 |
|
self.nj_list = nj_list |
10 |
+ |
self.all_jobs=common._db.nJobs('list') |
11 |
+ |
|
12 |
+ |
self.fname_base = common.work_space.jobDir() + self.cfg_params['CRAB.jobtype'].upper() + '_' |
13 |
|
|
13 |
– |
if common.scheduler.boss_scheduler_name == 'condor_g': |
14 |
– |
# create hash of cfg file |
15 |
– |
self.hash = makeCksum(common.work_space.cfgFileName()) |
16 |
– |
else: |
17 |
– |
self.hash = '' |
18 |
– |
|
14 |
|
return |
15 |
|
|
16 |
|
def run(self): |
17 |
|
""" |
18 |
|
The main method of the class. |
19 |
|
""" |
20 |
< |
common.logger.debug(5, "PostMortem::run() called") |
20 |
> |
common.logger.debug( "PostMortem::run() called") |
21 |
> |
|
22 |
> |
self.collectLogging() |
23 |
|
|
27 |
– |
for c, v in self.nj_list.iteritems(): |
28 |
– |
id = int(c) |
29 |
– |
out = common.scheduler.loggingInfo(v) |
30 |
– |
job = common.job_list[id - 1] |
31 |
– |
jobnum_str = '%06d' % (id) |
32 |
– |
fname = common.work_space.jobDir() + '/' + self.cfg_params['CRAB.jobtype'].upper() + '_' + jobnum_str + '.loggingInfo' |
33 |
– |
if os.path.exists(fname): |
34 |
– |
common.logger.message('Logging info for job ' + str(id) + ' already present in '+fname+'\nRemove it for update') |
35 |
– |
continue |
36 |
– |
jdl = open(fname, 'w') |
37 |
– |
for line in out: jdl.write(line) |
38 |
– |
jdl.close() |
39 |
– |
|
40 |
– |
reason = '' |
41 |
– |
## SL this if-elif is the negation of OO! Mus disappear ASAP |
42 |
– |
if common.scheduler.boss_scheduler_name == "edg" or common.scheduler.boss_scheduler_name == "glite" or common.scheduler.boss_scheduler_name == "glitecoll": |
43 |
– |
loggingInfo = EdgLoggingInfo.EdgLoggingInfo() |
44 |
– |
reason = loggingInfo.decodeReason(out) |
45 |
– |
elif common.scheduler.boss_scheduler_name == "condor_g" : |
46 |
– |
loggingInfo = CondorGLoggingInfo.CondorGLoggingInfo() |
47 |
– |
reason = loggingInfo.decodeReason(out) |
48 |
– |
else : |
49 |
– |
reason = out |
50 |
– |
|
51 |
– |
common.logger.message('Logging info for job '+ str(id) +': '+reason+'\n written to '+fname) |
52 |
– |
|
53 |
– |
# ML reporting |
54 |
– |
jobId = '' |
55 |
– |
if common.scheduler.boss_scheduler_name == 'condor_g': |
56 |
– |
jobId = str(id) + '_' + self.hash + '_' + v |
57 |
– |
else: |
58 |
– |
jobId = str(id) + '_' + v |
59 |
– |
|
60 |
– |
params = {'taskId': self.cfg_params['taskId'], 'jobId': jobId, \ |
61 |
– |
'sid': v, |
62 |
– |
'PostMortemCategory': loggingInfo.getCategory(), \ |
63 |
– |
'PostMortemReason': loggingInfo.getReason()} |
64 |
– |
self.cfg_params['apmon'].sendToML(params) |
65 |
– |
pass |
24 |
|
|
25 |
+ |
def collectLogging(self): |
26 |
+ |
self.up_task = common._db.getTask( self.nj_list ) |
27 |
+ |
for id in self.nj_list: |
28 |
+ |
job=self.up_task.getJob(id) |
29 |
+ |
if not job: #id not in self.all_jobs: |
30 |
+ |
common.logger.info('Warning: job # ' + str(id) + ' does not exist! Not possible to ask for postMortem ') |
31 |
+ |
continue |
32 |
+ |
elif job.runningJob['status'] == 'C': |
33 |
+ |
common.logger.info('Warning: job # ' + str(id) + ' just Created ! Not possible to ask for postMortem ') |
34 |
+ |
else: |
35 |
+ |
fname = self.fname_base + str(id) + '.LoggingInfo' |
36 |
+ |
if os.path.exists(fname): |
37 |
+ |
common.logger.info('Logging info for job ' + str(id) + ' already present in '+fname+'\nRemove it for update') |
38 |
+ |
continue |
39 |
+ |
common.scheduler.loggingInfo(id,fname) |
40 |
+ |
fl = open(fname, 'r') |
41 |
+ |
out = "".join(fl.readlines()) |
42 |
+ |
fl.close() |
43 |
+ |
reason = self.decodeLogging(out) |
44 |
+ |
common.logger.info('Logging info for job '+ str(id) +': '+str(reason)+'\n written to '+str(fname)+' \n' ) |
45 |
|
return |
46 |
+ |
|
47 |
+ |
def decodeLogging(self, out): |
48 |
+ |
""" |
49 |
+ |
""" |
50 |
+ |
return common.scheduler.decodeLogInfo(out) |
51 |
|
|