ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/ReportUploader.py
Revision: 1.8
Committed: Thu Sep 12 12:50:51 2013 UTC (11 years, 7 months ago) by belforte
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_9_1, CRAB_2_9_1_pre2, HEAD
Changes since 1.7: +2 -1 lines
Error occurred while calculating annotation data.
Log Message:
do not lookup crab Server info when using remoteGlidein: https://savannah.cern.ch/bugs/index.php?99683

File Contents

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