A new doc condor_config.html is being added showing the condor configuration
[burt-test.git] / tools / wmsXMLView.py
blob17ff2953150775ce68bd21377c8d73288e35d565
1 #!/usr/bin/env python
3 # Project:
4 # glideinWMS
6 # File Version:
7 # $Id: wmsXMLView.py,v 1.21 2011/02/10 21:35:32 parag Exp $
9 # Description:
10 # This tool displays the status of the glideinWMS pool
11 # in a XML format
13 # Arguments:
14 # [-pool collector_node] [-condor-stats 1|0] [-internals 1|0]
16 # Author:
17 # Igor Sfiligoi (May 9th 2007)
20 import string
21 import os.path
22 import sys
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
30 import xmlFormat
32 pool_name=None
33 factory_name=None
34 frontend_name=None
35 remove_condor_stats=True
36 remove_internals=True
38 key_obj=None
40 # parse arguments
41 alen=len(sys.argv)
42 i=1
43 while (i<alen):
44 ael=sys.argv[i]
45 if ael=='-pool':
46 i=i+1
47 pool_name=sys.argv[i]
48 elif ael=='-factory':
49 i=i+1
50 factory_name=sys.argv[i]
51 elif ael=='-frontend':
52 i=i+1
53 frontend_name=sys.argv[i]
54 elif ael=='-condor-stats':
55 i=i+1
56 remove_condor_stats=not int(sys.argv[i])
57 elif ael=='-internals':
58 i=i+1
59 remove_internals=not int(sys.argv[i])
60 elif ael=='-rsa_key':
61 i=i+1
62 key_obj=glideFactoryConfig.GlideinKey('RSA',sys.argv[i])
63 elif ael=='-help':
64 print "Usage:"
65 print "wmsXMLView.py [-pool <node>[:<port>]] [-factory <factory>] [-frontend <frontend>] [-condor-stats 0|1] [-internals 0|1] [-rsa_key <fname>] [-help]"
66 sys.exit(1)
67 else:
68 raise RuntimeError,"Unknown option '%s', try -help"%ael
69 i=i+1
71 # get data
72 factory_constraints=None
73 if factory_name!=None:
74 farr=factory_name.split('@')
75 if len(farr)==1:
76 # just the generic factory name
77 factory_constraints='FactoryName=?="%s"'%factory_name
78 elif len(farr)==2:
79 factory_constraints='(FactoryName=?="%s")&&(GlideinName=?="%s")'%(farr[1],farr[0])
80 elif len(farr)==3:
81 factory_constraints='(FactoryName=?="%s")&&(GlideinName=?="%s")&&(EntryName=?="%s")'%(farr[2],farr[1],farr[0])
82 else:
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('@')
90 if len(farr)==1:
91 # just the generic factory name
92 factoryclient_constraints='ReqFactoryName=?="%s"'%factory_name
93 elif len(farr)==2:
94 factoryclient_constraints='(ReqFactoryName=?="%s")&&(ReqGlideinName=?="%s")'%(farr[1],farr[0])
95 elif len(farr)==3:
96 factoryclient_constraints='(ReqFactoryName=?="%s")&&(ReqGlideinName=?="%s")&&(ReqEntryName=?="%s")'%(farr[2],farr[1],farr[0])
97 else:
98 raise RuntimeError, "Invalid factory name; more than 2 @'s found"
101 clientsmon_obj=glideinFrontendInterface.findGlideinClientMonitoring(pool_name,None,factoryclient_constraints)
103 # extract data
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']
116 if remove_internals:
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('.')
125 if len(farr)==1:
126 # just the generic frontend name
127 frontend_constraints='FrontendName=?="%s"'%frontend_name
128 elif len(farr)==2:
129 frontend_constraints='(FrontendName=?="%s")&&(GroupName=?="%s")'%(farr[0],farr[1])
130 else:
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]
142 continue
144 for client in clients:
145 if remove_internals:
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"
160 #print data
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}})