import DIRAC from DIRAC import gConfig, gLogger from DIRAC.ResourceStatusSystem.Client.ResourceStatus import ResourceStatus from DIRAC.Core.Utilities.List import sortList from DIRAC.ConfigurationSystem.Client.Helpers.Resources import Resources from DIRAC.Core.Security.ProxyInfo import getVOfromProxyGroup if __name__ == "__main__": result = getVOfromProxyGroup() if not result['OK']: gLogger.notice('Error:', result['Message']) DIRAC.exit(1) vo = result['Value'] resources = Resources(vo=vo) result = resources.getEligibleStorageElements() if not result['OK']: gLogger.notice('Error:', result['Message']) DIRAC.exit(2) seList = sortList(result['Value']) resourceStatus = ResourceStatus() result = resourceStatus.getStorageStatus(seList) if not result['OK']: gLogger.notice('Error:', result['Message']) DIRAC.exit(3) for k, v in result['Value'].items(): readState, writeState = 'Active', 'Active'
def initSEs(): ''' Initializes SEs statuses taking their values from the CS. ''' subLogger.info('Initializing SEs') resources = Resources() ses = resources.getEligibleStorageElements() if not ses['OK']: return ses ses = ses['Value'] statuses = StateMachine.RSSMachine(None).getStates() statusTypes = RssConfiguration.RssConfiguration().getConfigStatusType( 'StorageElement') reason = 'dirac-rss-sync' subLogger.debug(statuses) subLogger.debug(statusTypes) rssClient = ResourceStatusClient.ResourceStatusClient() for se in ses: subLogger.debug(se) #opts = gConfig.getOptionsDict( '/Resources/StorageElements/%s' % se ) opts = resources.getStorageElementOptionsDict(se) if not opts['OK']: subLogger.warn(opts['Message']) continue opts = opts['Value'] subLogger.debug(opts) # We copy the list into a new object to remove items INSIDE the loop ! statusTypesList = statusTypes[:] for statusType, status in opts.iteritems(): #Sanity check... if not statusType in statusTypesList: continue #Transforms statuses to RSS terms if status in ('NotAllowed', 'InActive'): status = 'Banned' if not status in statuses: subLogger.error('%s not a valid status for %s - %s' % (status, se, statusType)) continue # We remove from the backtracking statusTypesList.remove(statusType) subLogger.debug([se, statusType, status, reason]) result = rssClient.modifyStatusElement('Resource', 'Status', name=se, statusType=statusType, status=status, reason=reason) if not result['OK']: subLogger.error('Failed to modify') subLogger.error(result['Message']) continue #Backtracking: statusTypes not present on CS for statusType in statusTypesList: result = rssClient.modifyStatusElement('Resource', 'Status', name=se, statusType=statusType, status=DEFAULT_STATUS, reason=reason) if not result['OK']: subLogger.error('Error in backtracking for %s,%s,%s' % (se, statusType, status)) subLogger.error(result['Message']) return S_OK()
import DIRAC from DIRAC import gConfig,gLogger from DIRAC.ResourceStatusSystem.Client.ResourceStatus import ResourceStatus from DIRAC.Core.Utilities.List import sortList from DIRAC.ConfigurationSystem.Client.Helpers.Resources import Resources from DIRAC.Core.Security.ProxyInfo import getVOfromProxyGroup if __name__ == "__main__": result = getVOfromProxyGroup() if not result['OK']: gLogger.notice( 'Error:', result['Message'] ) DIRAC.exit( 1 ) vo = result['Value'] resources = Resources( vo = vo ) result = resources.getEligibleStorageElements() if not result['OK']: gLogger.notice( 'Error:', result['Message'] ) DIRAC.exit( 2 ) seList = sortList( result[ 'Value' ] ) resourceStatus = ResourceStatus() result = resourceStatus.getStorageStatus( seList ) if not result['OK']: gLogger.notice( 'Error:', result['Message'] ) DIRAC.exit( 3 ) for k,v in result[ 'Value' ].items(): readState, writeState = 'Active', 'Active'
def initSEs(): ''' Initializes SEs statuses taking their values from the CS. ''' subLogger.info( 'Initializing SEs' ) resources = Resources() ses = resources.getEligibleStorageElements() if not ses[ 'OK' ]: return ses ses = ses[ 'Value' ] statuses = StateMachine.RSSMachine( None ).getStates() statusTypes = RssConfiguration.RssConfiguration().getConfigStatusType( 'StorageElement' ) reason = 'dirac-rss-sync' subLogger.debug( statuses ) subLogger.debug( statusTypes ) rssClient = ResourceStatusClient.ResourceStatusClient() for se in ses: subLogger.debug( se ) #opts = gConfig.getOptionsDict( '/Resources/StorageElements/%s' % se ) opts = resources.getStorageElementOptionsDict( se ) if not opts[ 'OK' ]: subLogger.warn( opts[ 'Message' ] ) continue opts = opts[ 'Value' ] subLogger.debug( opts ) # We copy the list into a new object to remove items INSIDE the loop ! statusTypesList = statusTypes[:] for statusType, status in opts.iteritems(): #Sanity check... if not statusType in statusTypesList: continue #Transforms statuses to RSS terms if status in ( 'NotAllowed', 'InActive' ): status = 'Banned' if not status in statuses: subLogger.error( '%s not a valid status for %s - %s' % ( status, se, statusType ) ) continue # We remove from the backtracking statusTypesList.remove( statusType ) subLogger.debug( [ se,statusType,status,reason ] ) result = rssClient.modifyStatusElement( 'Resource', 'Status', name = se, statusType = statusType, status = status, reason = reason ) if not result[ 'OK' ]: subLogger.error( 'Failed to modify' ) subLogger.error( result[ 'Message' ] ) continue #Backtracking: statusTypes not present on CS for statusType in statusTypesList: result = rssClient.modifyStatusElement( 'Resource', 'Status', name = se, statusType = statusType, status = DEFAULT_STATUS, reason = reason ) if not result[ 'OK' ]: subLogger.error( 'Error in backtracking for %s,%s,%s' % ( se, statusType, status ) ) subLogger.error( result[ 'Message' ] ) return S_OK()