ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/StatusServer.py
Revision: 1.52
Committed: Sat May 29 10:48:58 2010 UTC (14 years, 11 months ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_7_3_pre1, CRAB_2_7_3_beta3, CRAB_2_7_3_beta2
Changes since 1.51: +14 -15 lines
Log Message:
rollback revision 1.50 plus minor changes

File Contents

# User Rev Content
1 spiga 1.1 from Actor import *
2     from crab_util import *
3     import common
4     from ApmonIf import ApmonIf
5     import time
6    
7 farinafa 1.24 import traceback
8     from xml.dom import minidom
9     from ServerCommunicator import ServerCommunicator
10     from Status import Status
11    
12 mcinquil 1.42 from xml.parsers.expat import *
13    
14 spiga 1.35 import zlib
15    
16 farinafa 1.24 class StatusServer(Status):
17    
18     def __init__(self, *args):
19 spiga 1.38
20 spiga 1.36 Status.__init__(self, *args)
21 spiga 1.38
22     # init client server params...
23     CliServerParams(self)
24 farinafa 1.24
25 farinafa 1.27 return
26    
27 spiga 1.41 def query(self,display=True):
28 spiga 1.1
29 mcinquil 1.48 warning_msg = self.resynchClientSide()
30 spiga 1.31
31     upTask = common._db.getTask()
32 spiga 1.41 self.compute(upTask,display)
33 spiga 1.31
34 farinafa 1.27 def resynchClientSide(self):
35 spiga 1.31 """
36     get status from the server and
37     aling back data on client
38     """
39 farinafa 1.24 task = common._db.getTask()
40 mcinquil 1.42 self.task_unique_name = str(task['name'])
41 spiga 1.28
42 farinafa 1.24 # communicator allocation
43 spiga 1.38 csCommunicator = ServerCommunicator(self.server_name, self.server_port, self.cfg_params)
44 mcinquil 1.42 handledXML = csCommunicator.getStatus( self.task_unique_name )
45 farinafa 1.24 del csCommunicator
46    
47     # align back data and print
48 mcinquil 1.42 reportXML = None
49 farinafa 1.47 useFallback = False
50 mcinquil 1.48 warning_msg = None
51 spiga 1.52 import base64
52 farinafa 1.34 try:
53 spiga 1.52 # reportXML = zlib.decompress( handledXML.decode('base64') )
54     handledXML += "="*( len(handledXML)%8 )
55     reportXML = zlib.decompress( base64.urlsafe_b64decode(handledXML) )
56 spiga 1.35 except Exception, e:
57 mcinquil 1.48 warning_msg = "WARNING: Problem while decompressing fresh status from the server. Use HTTP fallback"
58     common.logger.debug(warning_msg)
59 farinafa 1.47 common.logger.debug( traceback.format_exc() )
60     useFallback = True
61    
62 spiga 1.52 if useFallback:
63     try:
64 farinafa 1.47 import urllib
65     xmlStatusURL = 'http://%s:8888/visualog/'%self.server_name
66     xmlStatusURL += '?taskname=%s&logtype=Xmlstatus'%common._db.queryTask('name')
67     common.logger.debug("Accessing URL for status fallback: %s"%xmlStatusURL)
68     reportXML = ''.join(urllib.urlopen(xmlStatusURL).readlines())
69 spiga 1.52 except Exception, e:
70     warning_msg = "WARNING: Unable to retrieve status from server. Please issue crab -status again"
71     common.logger.info(warning_msg)
72     common.logger.debug( str(e) )
73     common.logger.debug( traceback.format_exc() )
74     return warning_msg
75 spiga 1.35
76     try:
77 farinafa 1.49 xmlStatus = minidom.parseString(reportXML)
78     reportList = xmlStatus.getElementsByTagName('Job')
79 farinafa 1.34 common._db.deserXmlStatus(reportList)
80 farinafa 1.49 except Exception, e:
81     warning_msg = "WARNING: Unable to extract status from XML file. Please issue crab -status again"
82 spiga 1.52 common.logger.info(warning_msg)
83     common.logger.debug("DUMP STATUS XML: %s"%str(reportXML))
84 farinafa 1.49 common.logger.debug( str(e) )
85 farinafa 1.47 common.logger.debug( traceback.format_exc() )
86 mcinquil 1.48 return warning_msg
87 spiga 1.35
88 mcinquil 1.48 return warning_msg
89 mcinquil 1.2
90 mcinquil 1.42 def showWebMon(self):
91 spiga 1.43 msg = 'You can also check jobs status at: http://%s:8888/logginfo\n'%self.server_name
92     msg += '\t( Your task name is: %s )\n'%common._db.queryTask('name')
93 spiga 1.45 common.logger.debug(msg)
94     #common.logger.info("Web status at: http://%s:8888/visualog/?taskname=%s&logtype=Status\n"%(self.server_name,self.task_unique_name))