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

# 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://gangamon.cern.ch/django/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 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 val = getCentralConfigLink('reportLogURL', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
61 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 val = getCentralConfigLink('dashbTaskMon', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
66 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 val = getCentralConfigLink('servTaskMon', 'http://cms.pg.infn.it/~cinquilli/files/crab2/')
71 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 'monitoringlink:Dashboard monitoring,%s%s \n' %(self.dashbtaskmon,self.taskname) + \
90 '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