7 # $Id: wmsXMLView.py,v 1.21 2011/02/10 21:35:32 parag Exp $
10 # This tool displays the status of the glideinWMS pool
14 # [-pool collector_node] [-condor-stats 1|0] [-internals 1|0]
17 # Igor Sfiligoi (May 9th 2007)
23 sys
.path
.append(os
.path
.join(sys
.path
[0],"../factory"))
24 sys
.path
.append(os
.path
.join(sys
.path
[0],"../frontend"))
25 sys
.path
.append(os
.path
.join(sys
.path
[0],"../lib"))
27 import glideFactoryInterface
28 import glideFactoryConfig
29 import glideinFrontendInterface
35 remove_condor_stats
=True
50 factory_name
=sys
.argv
[i
]
51 elif ael
=='-frontend':
53 frontend_name
=sys
.argv
[i
]
54 elif ael
=='-condor-stats':
56 remove_condor_stats
=not int(sys
.argv
[i
])
57 elif ael
=='-internals':
59 remove_internals
=not int(sys
.argv
[i
])
62 key_obj
=glideFactoryConfig
.GlideinKey('RSA',sys
.argv
[i
])
65 print "wmsXMLView.py [-pool <node>[:<port>]] [-factory <factory>] [-frontend <frontend>] [-condor-stats 0|1] [-internals 0|1] [-rsa_key <fname>] [-help]"
68 raise RuntimeError,"Unknown option '%s', try -help"%ael
72 factory_constraints
=None
73 if factory_name
!=None:
74 farr
=factory_name
.split('@')
76 # just the generic factory name
77 factory_constraints
='FactoryName=?="%s"'%factory
_name
79 factory_constraints
='(FactoryName=?="%s")&&(GlideinName=?="%s")'%(farr
[1],farr
[0])
81 factory_constraints
='(FactoryName=?="%s")&&(GlideinName=?="%s")&&(EntryName=?="%s")'%(farr
[2],farr
[1],farr
[0])
83 raise RuntimeError, "Invalid factory name; more than 2 @'s found"
85 glideins_obj
=glideinFrontendInterface
.findGlideins(pool_name
,None,None,factory_constraints
,get_only_matching
=False)
87 factoryclient_constraints
=None
88 if factory_name
!=None:
89 farr
=factory_name
.split('@')
91 # just the generic factory name
92 factoryclient_constraints
='ReqFactoryName=?="%s"'%factory
_name
94 factoryclient_constraints
='(ReqFactoryName=?="%s")&&(ReqGlideinName=?="%s")'%(farr
[1],farr
[0])
96 factoryclient_constraints
='(ReqFactoryName=?="%s")&&(ReqGlideinName=?="%s")&&(ReqEntryName=?="%s")'%(farr
[2],farr
[1],farr
[0])
98 raise RuntimeError, "Invalid factory name; more than 2 @'s found"
101 clientsmon_obj
=glideinFrontendInterface
.findGlideinClientMonitoring(pool_name
,None,factoryclient_constraints
)
104 glideins
=glideins_obj
.keys()
105 for glidein
in glideins
:
106 glidein_el
=glideins_obj
[glidein
]
108 # Remove diagnostics attributes, if needed
109 if remove_condor_stats
:
110 del glidein_el
['attrs']['LastHeardFrom']
112 #rename params into default_params
113 glidein_el
['default_params']=glidein_el
['params']
114 del glidein_el
['params']
117 for attr
in ('EntryName','GlideinName','FactoryName'):
118 del glidein_el
['attrs'][attr
]
120 entry_name
,glidein_name
,factory_name
=string
.split(glidein
,"@")
122 frontend_constraints
=None
123 if frontend_name
!=None:
124 farr
=frontend_name
.split('.')
126 # just the generic frontend name
127 frontend_constraints
='FrontendName=?="%s"'%frontend
_name
129 frontend_constraints
='(FrontendName=?="%s")&&(GroupName=?="%s")'%(farr
[0],farr
[1])
131 raise RuntimeError, "Invalid frontend name; more than one dot found"
133 clients_obj
=glideFactoryInterface
.findWork(factory_name
,glidein_name
,entry_name
,None,key_obj
,get_only_matching
=False,additional_constraints
=frontend_constraints
)
134 glidein_el
['clients']=clients_obj
135 clients
=clients_obj
.keys()
137 if (frontend_name
!=None) and (len(clients
)==0):
138 # if user requested to see only one frontend
139 # and this factory is not serving that frontend
140 # do not show the frontend at all
141 del glideins_obj
[glidein
]
144 for client
in clients
:
146 del clients_obj
[client
]['internals']
148 # rename monitor into client_monitor
149 clients_obj
[client
]['client_monitor']=clients_obj
[client
]['monitor']
150 del clients_obj
[client
]['monitor']
151 # add factory monitor
152 if clientsmon_obj
.has_key(client
):
153 clients_obj
[client
]['factory_monitor']=clientsmon_obj
[client
]['monitor']
155 for pd_key
in clients_obj
[client
]["params_decrypted"].keys():
156 if clients_obj
[client
]["params_decrypted"][pd_key
]==None:
157 clients_obj
[client
]["params_decrypted"][pd_key
]="ENCRYPTED"
161 sub_dict
={'clients':{'dict_name':'clients','el_name':'client','subtypes_params':{'class':{}}}}
162 print xmlFormat
.dict2string(glideins_obj
,'glideinWMS','factory',
163 subtypes_params
={'class':{'dicts_params':sub_dict
}})