ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/ServerConfig.py
Revision: 1.29
Committed: Thu Jan 3 12:19:17 2013 UTC (12 years, 3 months ago) by belforte
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_9_1, CRAB_2_9_1_pre2, CRAB_2_9_1_pre1, CRAB_2_9_0, CRAB_2_9_0_pre2, CRAB_2_9_0_pre1, CRAB_2_8_8, CRAB_2_8_8_pre1, CRAB_2_8_7_patch3, CRAB_2_8_7_patch2, CRAB_2_8_7_patch1, CRAB_2_8_7, CRAB_2_8_7_pre2, CRAB_2_8_7_pre1, CRAB_2_8_6, CRAB_2_8_6_pre1, CRAB_2_8_5_patch3, CRAB_2_8_5_patch2, CRAB_2_8_5_patch1, CRAB_2_8_5, CRAB_2_8_5_pre5, CRAB_2_8_5_pre4, CRAB_2_8_5_pre3, CRAB_2_8_4_patch3, CRAB_2_8_5_pre2, CRAB_2_8_4_patch2, CRAB_2_8_5_pre1, CRAB_2_8_4_patch1, HEAD
Changes since 1.28: +2 -1 lines
Log Message:
improve logging

File Contents

# Content
1 from crab_exceptions import *
2 from crab_util import *
3 import common
4 from Downloader import Downloader
5 import os, time
6
7 class ServerConfig:
8 def __init__(self, serverName):
9 import string
10 self.serverName = string.lower(serverName)
11 common.logger.debug('Calling ServerConfig '+self.serverName)
12
13 url ='http://cmsdoc.cern.ch/cms/LCG/crab/config/'
14
15 self.downloader = Downloader(url)
16
17
18 def config(self):
19 """
20 """
21 if 'default' in self.serverName:
22 self.serverName = self.selectServer()
23 if 'server_' in self.serverName:
24 configFileName = '%s.conf'%self.serverName
25 else:
26 configFileName = 'server_%s.conf'%self.serverName
27
28 serverConfig = eval(self.downloader.config(configFileName))
29
30 if not serverConfig:
31 serverConfig = {}
32 serverConfig['serverGenericName']=self.serverName
33
34 return serverConfig
35
36 def selectServer(self):
37 """
38 """
39 common.logger.debug('getting serverlist from web')
40 # get a list of available servers
41 serverListFileName ='AvailableServerList'
42
43 serverListFile = self.downloader.config(serverListFileName)
44
45 if not serverListFile:
46 msg = 'List of avalable Server '+serverListFileName+' from '+self.url+' is empty\n'
47 msg += 'Please report to CRAB feedback hypernews hn-cms-crabFeedback@cern.ch'
48 raise CrabException(msg)
49 # clean up empty lines and comments
50 serverList=[]
51 [serverList.append(string.split(string.strip(it))) for it in serverListFile.split('\n') if (it.strip() and not it.strip()[0]=="#")]
52 common.logger.debug('All avaialble servers: '+str(serverList))
53
54 # select servers from client version
55 compatibleServerList=[]
56 for s in serverList:
57 #vv=string.split(s[1],'-')
58 if len(s)<2:
59 continue
60 vv=s[1].split('-')
61 if len(vv[0])==0: vv[0]='0.0.0'
62 if len(vv[1])==0: vv[1]='99.99.99'
63 for i in 0,1:
64 tmp=[]
65 [tmp.append(int(t)) for t in vv[i].split('.')]
66 vv[i]=tuple(tmp)
67
68 if vv[0]<=common.prog_version and common.prog_version<=vv[1] and common.scheduler.name()==string.lower(s[2]):
69 compatibleServerList.append(s[0])
70
71 common.logger.debug('All avaialble servers compatible with %s: '%common.prog_version_str +str(compatibleServerList))
72 if len(compatibleServerList)==0:
73 msg = "No compatible server for client version %s and scheduler %s\n"%(common.prog_version_str,common.scheduler.name())
74 msg += "Exiting"
75 common.logger.info(msg)
76 raise CrabException(msg)
77
78 # if more than one, pick up a random one, waiting for something smarter (SiteDB)
79 import random
80 serverName = random.choice(compatibleServerList)
81 common.logger.debug('Avaialble servers: '+str(compatibleServerList)+' choosen: '+serverName)
82
83 return serverName