ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/ReportUploader.py
Revision: 1.2
Committed: Tue Oct 26 11:06:09 2010 UTC (14 years, 6 months ago) by mcinquil
Content type: text/x-python
Branch: MAIN
Changes since 1.1: +5 -5 lines
Log Message:
Adjust link + no job id works

File Contents

# User Rev Content
1 mcinquil 1.1 from Actor import *
2     import common
3     from datetime import datetime
4     from crab_report import run_upload
5     from crab_util import *
6     import os
7     import socket
8    
9     class ReportUploader( Actor ):
10    
11     uploadFileServer = "http://gangamon.cern.ch/django/cmserrorreports/"
12     dashbtaskmon = 'http://dashb-cms-job-task.cern.ch/taskmon.html'
13 mcinquil 1.2 centralservermon = 'http://glidein-mon.t2.ucsd.edu:8080/dashboard/ajaxproxy.jsp?p='
14 mcinquil 1.1
15     def __init__(self, cfg_params, jobid = -1):
16     """
17     init class variables
18    
19     - checking if task exists
20     - adding task generic files
21     - adding job specific files
22     """
23    
24     common.logger.debug('Initializing uploader...')
25    
26     self.cfg_params = cfg_params
27    
28     CliServerParams(self)
29    
30     self.taskpath = common.work_space.topDir()
31    
32     if os.path.exists( self.taskpath ) is True:
33    
34     self.filetoup = [ \
35     common.work_space.shareDir() + '/crab.cfg', \
36     common.work_space.logDir() + '/crab.log' \
37     ]
38    
39     if jobid > -1:
40     self.filetoup.append( common.work_space.resDir() + 'CMSSW_%i.stdout' % jobid )
41     self.filetoup.append( common.work_space.jobDir() + 'CMSSW_%i.LoggingInfo' % jobid )
42     self.filetoup.append( common.work_space.resDir() + 'crab_fjr_%i.xml' % jobid )
43    
44     else:
45     raise CrabException( 'Error: task [%s] not found in the path!' % self.taskname )
46    
47    
48     self.taskname = common._db.queryTask('name')
49    
50     self.hostname = socket.getfqdn()
51    
52     self.username = getUserName()
53    
54     self.requestedserver = 'default'
55     if self.cfg_params.has_key("server_name"):
56     self.requestedserver = elf.cfg_params['server_name']
57    
58     self.scheduler = common.scheduler.name()
59    
60 mcinquil 1.2 val = getCentralConfigLink('reportLogURL', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
61 mcinquil 1.1 if val is not None and len(val) > 0:
62     self.uploadFileServer = val
63     common.logger.debug('Using %s as remote repository server for uploading logs' % self )
64    
65 mcinquil 1.2 val = getCentralConfigLink('dashbTaskMon', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
66 mcinquil 1.1 if val is not None and len(val) > 0:
67     self.dashbtaskmon = val
68     common.logger.debug('Using %s as link for dashboard task monitoring' % self.dashbtaskmon )
69    
70 mcinquil 1.2 val = getCentralConfigLink('servTaskMon', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
71 mcinquil 1.1 if val is not None and len(val) > 0:
72     self.centralservermon = val
73     common.logger.debug('Using %s as link for central server monitoring (it allows to bypass cern firewall)' % self.centralservermon )
74    
75    
76     def __prepareMetadata( self, datafile ):
77     """
78     __prepareMetadata
79    
80     preparing metadata file content for errorreport server
81     """
82    
83     cservermon = 'http://%s:8888/visualog/?logtype=Status&taskname=%s\n' % (self.server_name, self.taskname)
84     fmeta = open(datafile, 'w')
85     fmeta.write(
86     'username:%s\n' % self.username + \
87     'version:%s\n' % os.path.basename(os.path.normpath(os.getenv('CRABDIR'))) + \
88     'jobuuid:%s\n' % self.taskname + \
89 mcinquil 1.2 'monitoringlink:Dashboard monitoring,%s%s \n' %(self.dashbtaskmon,self.taskname) + \
90 mcinquil 1.1 'monitoringlink:CentralServer monitoring,%s%s\n' % (self.centralservermon, cservermon.replace('logtype=Status&', 'logtype=Status|')) + \
91     'monitoringlink:CrabServer monitoring,%s\n' % cservermon
92     )
93     fmeta.close()
94    
95     common.logger.debug( "Metadatafile created as %s " % fmeta.name )
96    
97     return fmeta.name
98    
99    
100     def __prepareSummary( self, datafile ):
101     """
102     __prepareSummary
103    
104     preparing Summary file for errorreport server
105     """
106    
107     fsummary = open(datafile, 'w')
108     ## version could be replaced by common.prog_name + common.prog_version_str
109     fsummary.write(
110     'username: %s\n' % self.username + \
111     'running on: %s\n' % self.hostname + \
112     'version: %s\n' % os.path.basename(os.path.normpath(os.getenv('CRABDIR'))) + \
113     'user working dir: %s\n' % self.taskname + \
114     'scheduler: %s\n' % self.scheduler + \
115     'requested server: %s\n' % self.requestedserver + \
116     'used server: %s\n' % self.server_name + \
117     'task: %s\n' % self.taskname
118     )
119     fsummary.close()
120    
121     common.logger.debug( "Summary file created as %s " % fsummary.name )
122    
123     return fsummary.name
124    
125     def run( self ):
126     """
127     _run_
128    
129     Method that performs the upload with the various steps:
130     - prepares metadata file
131     - prepare summary info file
132     - checks if the input files exists
133     - prepares the package
134     - uploads the package
135     """
136    
137     common.logger.info("Preparing directory and files to report...")
138    
139     archivereport = self.username + '-' + 'uploader.zip'
140     common.logger.debug("Archivereport %s" % archivereport)
141    
142     basename = os.path.basename(os.path.normpath(self.taskpath))
143     dirname = 'crabreport_' + (str(datetime.today())).replace(' ', '-')
144     self.crabreportdir = self.taskpath + '/' + dirname
145    
146     cmd = 'cd %s; mkdir %s; cd %s; ' % (self.taskpath, dirname, dirname)
147     common.logger.debug("Running '%s' " % cmd)
148     out = runCommand( cmd )
149     common.logger.debug("Result '%s'" % str(out))
150    
151     metadataFile = self.__prepareMetadata(self.crabreportdir + '/__metadata.txt')
152     summaryFile = self.__prepareSummary(self.crabreportdir + '/_summary.txt')
153    
154     cmd = "cd %s;" % self.crabreportdir
155     for filetemp in self.filetoup:
156     if os.path.exists( filetemp ) is True :
157     cmd += 'ln -s %s %s.txt; ' % ( filetemp, os.path.basename( filetemp ) )
158     common.logger.debug("File %s found and added" % filetemp)
159     else:
160     common.logger.debug("File %s not found, skipping it!" % filetemp)
161    
162     common.logger.debug("Running '%s' " % cmd)
163     out = runCommand( cmd )
164     common.logger.debug("Result '%s'" % str(out))
165    
166     common.logger.debug("Zipping...")
167     cmd = 'cd %s; zip -l %s %s/*' % (self.taskpath, archivereport, self.crabreportdir)
168     common.logger.debug("Running '%s' " % cmd)
169     out = runCommand( cmd )
170     common.logger.debug("Result '%s'" % str(out))
171    
172     try:
173     common.logger.info("Starting to upload the report...")
174     link_result = run_upload(server = self.uploadFileServer, path = '%s/%s' % (self.taskpath, archivereport) )
175     if link_result is not None and len(link_result) > 0:
176     common.logger.info("Your report was uploaded to the central repository")
177     common.logger.info("Please include this URL in your bug report or in the support e-mail")
178     common.logger.info( "\t %s\n" % str(link_result))
179     else:
180     common.logger.error("A problem occurred while uploading your report to the central repository!")
181     except Exception, ex:
182     raise CrabException("Problem %s uploading log files to %s" % (str(ex), self.uploadFileServer) )
183     finally:
184     common.logger.debug("Start cleaning report...")
185     cmd = 'rm -rf %s %s/%s' % (self.crabreportdir, self.taskpath, archivereport)
186     common.logger.debug("Running '%s' " % cmd)
187     out = runCommand( cmd )
188     common.logger.debug("Result '%s'" % str(out))
189    
190     common.logger.info("Report upload finished.")
191