def evaluate(self): """ Before use, call at least `setArgs` and, alternatively, `setCommand` or `setCommandName`. Invoking `super(PolicyCLASS, self).evaluate` will invoke the command (if necessary) as it is provided and returns the results. """ if self.knownInfo: result = self.knownInfo else: if not self.command: # use standard Command from DIRAC.ResourceStatusSystem.Command.CommandCaller import CommandCaller cc = CommandCaller() self.command = cc.setCommandObject(self.commandName) clientsInvoker = ClientsInvoker() clientsInvoker.setCommand(self.command) self.command.setArgs(self.args) result = clientsInvoker.doCommand() if not self.infoName: result = result['Result'] else: if self.infoName in result.keys(): result = result[self.infoName] else: raise RSSException, "missing 'infoName' in result" return result
def initializeResourceManagementHandler(serviceInfo): global rsDB rsDB = ResourceStatusDB() global rmDB rmDB = ResourceManagementDB() cc = CommandCaller() global VOExtension VOExtension = getExt() ig = InfoGetter(VOExtension) WMSAdmin = RPCClient("WorkloadManagement/WMSAdministrator") global publisher publisher = Publisher(VOExtension, rsDBIn=rsDB, commandCallerIn=cc, infoGetterIn=ig, WMSAdminIn=WMSAdmin) # sync_O = Synchronizer(rsDB) # gConfig.addListenerToNewVersionEvent( sync_O.sync ) return S_OK()
def __init__(self, VOExtension, rsDBIn=None, commandCallerIn=None, infoGetterIn=None, WMSAdminIn=None): """ Standard constructor :params: :attr:`VOExtension`: string, VO Extension (e.g. 'LHCb') :attr:`rsDBIn`: optional ResourceStatusDB object (see :class: `DIRAC.ResourceStatusSystem.DB.ResourceStatusDB.ResourceStatusDB`) :attr:`commandCallerIn`: optional CommandCaller object (see :class: `DIRAC.ResourceStatusSystem.Command.CommandCaller.CommandCaller`) :attr:`infoGetterIn`: optional InfoGetter object (see :class: `DIRAC.ResourceStatusSystem.Utilities.InfoGetter.InfoGetter`) :attr:`WMSAdminIn`: optional RPCClient object for WMSAdmin (see :class: `DIRAC.Core.DISET.RPCClient.RPCClient`) """ self.configModule = Utils.voimport( "DIRAC.ResourceStatusSystem.Policy.Configurations", VOExtension) if rsDBIn is not None: self.rsDB = rsDBIn else: from DIRAC.ResourceStatusSystem.DB.ResourceStatusDB import ResourceStatusDB self.rsDB = ResourceStatusDB() from DIRAC.ResourceStatusSystem.DB.ResourceManagementDB import ResourceManagementDB self.rmDB = ResourceManagementDB() if commandCallerIn is not None: self.cc = commandCallerIn else: from DIRAC.ResourceStatusSystem.Command.CommandCaller import CommandCaller self.cc = CommandCaller() if infoGetterIn is not None: self.ig = infoGetterIn else: from DIRAC.ResourceStatusSystem.Utilities.InfoGetter import InfoGetter self.ig = InfoGetter(VOExtension) if WMSAdminIn is not None: self.WMSAdmin = WMSAdminIn else: from DIRAC.Core.DISET.RPCClient import RPCClient self.WMSAdmin = RPCClient("WorkloadManagement/WMSAdministrator") self.threadPool = ThreadPool(2, 5) self.lockObj = threading.RLock() self.infoForPanel_res = {}
def __init__(self, commandCallerIn=None): if commandCallerIn is not None: self.cc = commandCallerIn else: from DIRAC.ResourceStatusSystem.Command.CommandCaller import CommandCaller self.cc = CommandCaller() self.policyInvoker = PolicyInvoker()
def __init__(self, commandCallerIn=None, **clients): ''' Constructor ''' if commandCallerIn is None: commandCallerIn = CommandCaller() self.cCaller = commandCallerIn self.clients = clients
def initialize( self ): """ ClientsCacheFeeder initialization """ try: self.rsDB = ResourceStatusDB() self.rmDB = ResourceManagementDB() self.clientsInvoker = ClientsInvoker() VOExtension = getExt() configModule = __import__( VOExtension + "DIRAC.ResourceStatusSystem.Policy.Configurations", globals(), locals(), ['*'] ) commandsList_ClientsCache = copy.deepcopy( configModule.Commands_ClientsCache ) commandsList_AccountingCache = copy.deepcopy( configModule.Commands_AccountingCache ) self.commandObjectsList_ClientsCache = [] self.commandObjectsList_AccountingCache = [] cc = CommandCaller() RPCWMSAdmin = RPCClient( "WorkloadManagement/WMSAdministrator" ) RPCAccounting = RPCClient( "Accounting/ReportGenerator" ) for command in commandsList_ClientsCache: cObj = cc.setCommandObject( command ) cc.setCommandClient( command, cObj, RPCWMSAdmin = RPCWMSAdmin, RPCAccounting = RPCAccounting ) self.commandObjectsList_ClientsCache.append( ( command, cObj ) ) for command in commandsList_AccountingCache: cObj = cc.setCommandObject( command ) cc.setCommandClient( command, cObj, RPCAccounting = RPCAccounting ) try: cArgs = command[2] except IndexError: cArgs = () self.commandObjectsList_AccountingCache.append( ( command, cObj, cArgs ) ) return S_OK() except Exception: errorStr = "ClientsCacheFeeder initialization" gLogger.exception( errorStr ) return S_ERROR( errorStr )
def __init__(self, **clients): ''' Constructor. Defines members that will be used later on. ''' cc = CommandCaller() self.clients = clients self.pCaller = PolicyCaller(cc, **clients) self.iGetter = InfoGetter() self.__granularity = None self.__name = None self.__statusType = None self.__status = None self.__formerStatus = None self.__reason = None self.__siteType = None self.__serviceType = None self.__resourceType = None self.__useNewRes = None
def evaluate(self): ''' Before use, call at least `setArgs` and, alternatively, `setCommand` or `setCommandName`. Invoking `super(PolicyCLASS, self).evaluate` will invoke the command (if necessary) as it is provided and returns the results. ''' if self.knownInfo: result = self.knownInfo else: if not self.command: # use standard Command cc = CommandCaller() self.command = cc.setCommandObject(self.commandName) clientsInvoker = ClientsInvoker() clientsInvoker.setCommand(self.command) self.command.setArgs(self.args) result = clientsInvoker.doCommand() if not self.infoName: result = result['Result'] else: if self.infoName in result.keys(): result = result[self.infoName] else: gLogger.error('missing "infoName" in result') return None return result ################################################################################ #EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF
def __init__(self, VOExtension, granularity=None, name=None, status=None, formerStatus=None, reason=None, siteType=None, serviceType=None, resourceType=None, useNewRes=False): """ PDP (Policy Decision Point) initialization :params: :attr:`VOExtension`: string - VO extension (e.g. 'LHCb') :attr:`granularity`: string - a ValidRes :attr:`name`: string - name (e.g. of a site) :attr:`status`: string - status :attr:`formerStatus`: string - former status :attr:`reason`: string - optional reason for last status change :attr:`siteType`: string - optional site type :attr:`serviceType`: string - optional service type :attr:`resourceType`: string - optional resource type """ self.VOExtension = VOExtension self.__granularity = assignOrRaise(granularity, ValidRes, InvalidRes, self, self.__init__) self.__name = name self.__status = assignOrRaise(status, ValidStatus, InvalidStatus, self, self.__init__) self.__formerStatus = assignOrRaise(formerStatus, ValidStatus, InvalidStatus, self, self.__init__) self.__reason = reason self.__siteType = assignOrRaise(siteType, ValidSiteType, InvalidSiteType, self, self.__init__) self.__serviceType = assignOrRaise(serviceType, ValidServiceType, InvalidServiceType, self, self.__init__) self.__resourceType = assignOrRaise(resourceType, ValidResourceType, InvalidResourceType, self, self.__init__) cc = CommandCaller() self.pc = PolicyCaller(cc) self.useNewRes = useNewRes self.args = None self.policy = None self.knownInfo = None self.ig = None
def initialize(self): # Attribute defined outside __init__ # pylint: disable-msg=W0201 try: self.rmClient = ResourceManagementClient() self.clientsInvoker = ClientsInvoker() commandsListClientsCache = [ ('ClientsCache_Command', 'JobsEffSimpleEveryOne_Command'), ('ClientsCache_Command', 'PilotsEffSimpleEverySites_Command'), ('ClientsCache_Command', 'DTEverySites_Command'), ('ClientsCache_Command', 'DTEveryResources_Command') ] commandsListAccountingCache = [ ('AccountingCache_Command', 'TransferQualityByDestSplitted_Command', (2, ), 'Always'), ('AccountingCache_Command', 'FailedTransfersBySourceSplitted_Command', (2, ), 'Always'), ('AccountingCache_Command', 'TransferQualityByDestSplittedSite_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullPilotsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedPilotsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullPilotsByCESplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedPilotsByCESplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (168, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (720, ), 'Daily'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (8760, ), 'Daily'), ] commandsVOBOXAvailability = ( 'VOBOXAvailabilityCommand', 'VOBOXAvailabilityCommand', ) commandsSpaceTokenOccupancy = ( 'SpaceTokenOccupancyCommand', 'SpaceTokenOccupancyCommand', ) self.commandObjectsListClientsCache = [] self.commandObjectsListAccountingCache = [] self.commandObjectsVOBOXAvailability = [] self.commandObjectsSpaceTokenOccupancy = [] cc = CommandCaller() # We know beforehand which APIs are we going to need, so we initialize them # first, making everything faster. knownAPIs = [ 'ResourceStatusClient', 'WMSAdministrator', 'ReportGenerator', 'JobsClient', 'PilotsClient', 'GOCDBClient', 'ReportsClient' ] knownAPIs = initAPIs(knownAPIs, {}) for command in commandsListClientsCache: cObj = cc.setCommandObject(command) for apiName, apiInstance in knownAPIs.items(): cc.setAPI(cObj, apiName, apiInstance) self.commandObjectsListClientsCache.append((command, cObj)) for command in commandsListAccountingCache: cObj = cc.setCommandObject(command) for apiName, apiInstance in knownAPIs.items(): cc.setAPI(cObj, apiName, apiInstance) cArgs = command[2] self.commandObjectsListAccountingCache.append( (command, cObj, cArgs)) for cArgs in self.__getVOBOXAvailabilityCandidates(): cObj = cc.setCommandObject(commandsVOBOXAvailability) self.commandObjectsVOBOXAvailability.append( (commandsVOBOXAvailability, cObj, cArgs)) for cArgs in self.__getSpaceTokenOccupancyCandidates(): cObj = cc.setCommandObject(commandsSpaceTokenOccupancy) self.commandObjectsSpaceTokenOccupancy.append( (commandsSpaceTokenOccupancy, cObj, cArgs)) return S_OK() except Exception: errorStr = "CacheFeederAgent initialization" self.log.exception(errorStr) return S_ERROR(errorStr)
def initialize(self): """ ClientsCacheFeederAgent initialization """ try: self.rsDB = ResourceStatusDB() self.rmDB = ResourceManagementDB() self.clientsInvoker = ClientsInvoker() commandsList_ClientsCache = [ ('ClientsCache_Command', 'JobsEffSimpleEveryOne_Command'), ('ClientsCache_Command', 'PilotsEffSimpleEverySites_Command'), ('ClientsCache_Command', 'DTEverySites_Command'), ('ClientsCache_Command', 'DTEveryResources_Command') ] commandsList_AccountingCache = [ ('AccountingCache_Command', 'TransferQualityByDestSplitted_Command', (2, ), 'Always'), ('AccountingCache_Command', 'FailedTransfersBySourceSplitted_Command', (2, ), 'Always'), ('AccountingCache_Command', 'TransferQualityByDestSplittedSite_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullPilotsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedPilotsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'SuccessfullPilotsByCESplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'FailedPilotsByCESplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (24, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (168, ), 'Hourly'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (720, ), 'Daily'), ('AccountingCache_Command', 'RunningJobsBySiteSplitted_Command', (8760, ), 'Daily'), ] self.commandObjectsList_ClientsCache = [] self.commandObjectsList_AccountingCache = [] cc = CommandCaller() RPCWMSAdmin = RPCClient("WorkloadManagement/WMSAdministrator") RPCAccounting = RPCClient("Accounting/ReportGenerator") for command in commandsList_ClientsCache: cObj = cc.setCommandObject(command) cc.setCommandClient(command, cObj, RPCWMSAdmin=RPCWMSAdmin, RPCAccounting=RPCAccounting) self.commandObjectsList_ClientsCache.append((command, cObj)) for command in commandsList_AccountingCache: cObj = cc.setCommandObject(command) cc.setCommandClient(command, cObj, RPCAccounting=RPCAccounting) try: cArgs = command[2] except IndexError: cArgs = () self.commandObjectsList_AccountingCache.append( (command, cObj, cArgs)) return S_OK() except Exception: errorStr = "ClientsCacheFeederAgent initialization" gLogger.exception(errorStr) return S_ERROR(errorStr)