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'
示例#2
0
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'
示例#4
0
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()