ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/ReportUploader.py
Revision: 1.7
Committed: Fri Jan 11 16:01:20 2013 UTC (12 years, 3 months ago) by belforte
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_9_1_pre1, CRAB_2_9_0, CRAB_2_9_0_pre2, CRAB_2_9_0_pre1, CRAB_2_8_8, CRAB_2_8_8_pre1, CRAB_2_8_7_patch3, CRAB_2_8_7_patch2, CRAB_2_8_7_patch1, CRAB_2_8_7, CRAB_2_8_7_pre2, CRAB_2_8_7_pre1, CRAB_2_8_6, CRAB_2_8_6_pre1, CRAB_2_8_5_patch3, CRAB_2_8_5_patch2, CRAB_2_8_5_patch1, CRAB_2_8_5, CRAB_2_8_5_pre5, CRAB_2_8_5_pre4, CRAB_2_8_5_pre3
Changes since 1.6: +13 -2 lines
Log Message:
add useful info for remoteGlidein in summary, fixes https://savannah.cern.ch/bugs/?97915

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 mcinquil 1.4 uploadFileServer = "http://analysisops.cern.ch/cmserrorreports"
12 mcinquil 1.1 dashbtaskmon = 'http://dashb-cms-job-task.cern.ch/taskmon.html'
13 mcinquil 1.3 #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 mcinquil 1.3 try:
29     CliServerParams(self)
30     self.requestedserver = 'default'
31 mcinquil 1.6 if self.cfg_params.has_key("CRAB.server_name"):
32     self.requestedserver = self.cfg_params['CRAB.server_name']
33     if self.cfg_params.has_key("CRAB.use_server"):
34     if int(self.cfg_params['CRAB.use_server']) == 0:
35     self.server_name = 'No server'
36 mcinquil 1.3 except Exception, ex:
37     common.logger.debug("Problem '%s'" % str(ex))
38 mcinquil 1.6 import traceback
39     common.logger.debug(str(traceback.format_exc()))
40 mcinquil 1.3 self.server_name = 'No server'
41     self.requestedserver = 'No server'
42 mcinquil 1.1
43     self.taskpath = common.work_space.topDir()
44    
45     if os.path.exists( self.taskpath ) is True:
46    
47     self.filetoup = [ \
48     common.work_space.shareDir() + '/crab.cfg', \
49     common.work_space.logDir() + '/crab.log' \
50     ]
51    
52     if jobid > -1:
53     self.filetoup.append( common.work_space.resDir() + 'CMSSW_%i.stdout' % jobid )
54     self.filetoup.append( common.work_space.jobDir() + 'CMSSW_%i.LoggingInfo' % jobid )
55     self.filetoup.append( common.work_space.resDir() + 'crab_fjr_%i.xml' % jobid )
56    
57     else:
58     raise CrabException( 'Error: task [%s] not found in the path!' % self.taskname )
59    
60    
61     self.taskname = common._db.queryTask('name')
62    
63 belforte 1.7 self.task = common._db.getTask()
64    
65 mcinquil 1.1 self.hostname = socket.getfqdn()
66    
67     self.username = getUserName()
68    
69     self.scheduler = common.scheduler.name()
70    
71 belforte 1.7 if (self.scheduler.upper() in 'REMOTEGLIDEIN') :
72     self.server_name = str(self.task['serverName'])
73     cmd = "gsissh %s pwd" % self.server_name
74     self.remote_path = runCommand(cmd).rstrip()
75     else :
76     self.remote_path=''
77    
78 mcinquil 1.3 val = getCentralConfigLink('reportLogURL')
79 mcinquil 1.1 if val is not None and len(val) > 0:
80     self.uploadFileServer = val
81     common.logger.debug('Using %s as remote repository server for uploading logs' % self )
82    
83 mcinquil 1.3 val = getCentralConfigLink('dashbTaskMon')
84 mcinquil 1.1 if val is not None and len(val) > 0:
85     self.dashbtaskmon = val
86     common.logger.debug('Using %s as link for dashboard task monitoring' % self.dashbtaskmon )
87    
88    
89     def __prepareMetadata( self, datafile ):
90     """
91     __prepareMetadata
92    
93     preparing metadata file content for errorreport server
94     """
95    
96     fmeta = open(datafile, 'w')
97 mcinquil 1.3 strmeta = 'username:%s\n' % self.username + \
98     'version:%s\n' % '%s_%s' % (common.prog_name.upper(), common.prog_version_str) + \
99     'jobuuid:%s\n' % self.taskname + \
100 belforte 1.5 'monitoringlink:Dashboard Task Mon,%s%s \n' %(self.dashbtaskmon,self.taskname) # + \
101 belforte 1.7 if self.server_name != 'No server' and \
102     self.scheduler.upper() != 'REMOTEGLIDEIN' :
103 belforte 1.5 cserverStatus = 'http://%s:8888/visualog/?logtype=Status&taskname=%s\n' % (self.server_name, self.taskname)
104     strmeta += 'monitoringlink:CrabServer Status,%s\n' % cserverStatus
105     cserverLog = 'http://%s:8888/visualog/?logtype=Logging&taskname=%s\n' % (self.server_name, self.taskname)
106     strmeta += 'monitoringlink:CrabServer Logging,%s\n' % cserverLog
107 mcinquil 1.3
108     fmeta.write( strmeta )
109 mcinquil 1.1 fmeta.close()
110    
111     common.logger.debug( "Metadatafile created as %s " % fmeta.name )
112    
113     return fmeta.name
114    
115    
116     def __prepareSummary( self, datafile ):
117     """
118     __prepareSummary
119    
120     preparing Summary file for errorreport server
121     """
122    
123     fsummary = open(datafile, 'w')
124     ## version could be replaced by common.prog_name + common.prog_version_str
125     fsummary.write(
126     'username: %s\n' % self.username + \
127     'running on: %s\n' % self.hostname + \
128     'version: %s\n' % os.path.basename(os.path.normpath(os.getenv('CRABDIR'))) + \
129     'user working dir: %s\n' % self.taskname + \
130     'scheduler: %s\n' % self.scheduler + \
131     'requested server: %s\n' % self.requestedserver + \
132     'used server: %s\n' % self.server_name + \
133 belforte 1.7 'task: %s\n' % self.taskname + \
134     'remote path: %s\n' % (self.remote_path+'/'+self.taskname)
135 mcinquil 1.1 )
136     fsummary.close()
137    
138     common.logger.debug( "Summary file created as %s " % fsummary.name )
139    
140     return fsummary.name
141    
142     def run( self ):
143     """
144     _run_
145    
146     Method that performs the upload with the various steps:
147     - prepares metadata file
148     - prepare summary info file
149     - checks if the input files exists
150     - prepares the package
151     - uploads the package
152     """
153    
154     common.logger.info("Preparing directory and files to report...")
155    
156     archivereport = self.username + '-' + 'uploader.zip'
157     common.logger.debug("Archivereport %s" % archivereport)
158    
159     basename = os.path.basename(os.path.normpath(self.taskpath))
160     dirname = 'crabreport_' + (str(datetime.today())).replace(' ', '-')
161     self.crabreportdir = self.taskpath + '/' + dirname
162    
163     cmd = 'cd %s; mkdir %s; cd %s; ' % (self.taskpath, dirname, dirname)
164     common.logger.debug("Running '%s' " % cmd)
165     out = runCommand( cmd )
166     common.logger.debug("Result '%s'" % str(out))
167    
168     metadataFile = self.__prepareMetadata(self.crabreportdir + '/__metadata.txt')
169     summaryFile = self.__prepareSummary(self.crabreportdir + '/_summary.txt')
170    
171     cmd = "cd %s;" % self.crabreportdir
172     for filetemp in self.filetoup:
173     if os.path.exists( filetemp ) is True :
174     cmd += 'ln -s %s %s.txt; ' % ( filetemp, os.path.basename( filetemp ) )
175     common.logger.debug("File %s found and added" % filetemp)
176     else:
177     common.logger.debug("File %s not found, skipping it!" % filetemp)
178    
179     common.logger.debug("Running '%s' " % cmd)
180     out = runCommand( cmd )
181     common.logger.debug("Result '%s'" % str(out))
182    
183     common.logger.debug("Zipping...")
184     cmd = 'cd %s; zip -l %s %s/*' % (self.taskpath, archivereport, self.crabreportdir)
185     common.logger.debug("Running '%s' " % cmd)
186     out = runCommand( cmd )
187     common.logger.debug("Result '%s'" % str(out))
188    
189     try:
190     common.logger.info("Starting to upload the report...")
191     link_result = run_upload(server = self.uploadFileServer, path = '%s/%s' % (self.taskpath, archivereport) )
192     if link_result is not None and len(link_result) > 0:
193     common.logger.info("Your report was uploaded to the central repository")
194     common.logger.info("Please include this URL in your bug report or in the support e-mail")
195     common.logger.info( "\t %s\n" % str(link_result))
196     else:
197     common.logger.error("A problem occurred while uploading your report to the central repository!")
198     except Exception, ex:
199     raise CrabException("Problem %s uploading log files to %s" % (str(ex), self.uploadFileServer) )
200     finally:
201     common.logger.debug("Start cleaning report...")
202     cmd = 'rm -rf %s %s/%s' % (self.crabreportdir, self.taskpath, archivereport)
203     common.logger.debug("Running '%s' " % cmd)
204     out = runCommand( cmd )
205     common.logger.debug("Result '%s'" % str(out))
206    
207     common.logger.info("Report upload finished.")
208