ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/PostMortem.py
(Generate patch)

Comparing COMP/CRAB/python/PostMortem.py (file contents):
Revision 1.13 by corvo, Mon Nov 20 18:47:51 2006 UTC vs.
Revision 1.23 by spiga, Tue May 26 10:23:01 2009 UTC

# Line 1 | Line 1
1   from Actor import *
2   from crab_util import *
3 import EdgLoggingInfo
4 import CondorGLoggingInfo
3   import common
4   import string, os
5  
# Line 9 | Line 7 | class PostMortem(Actor):
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  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines