Monitor State of All Sensors

This information is useful to system administrators who need to monitor system health. This example shows how to locate system sensors, report their current states, and flag any sensors that have abnormal states.

The example uses only CIM_NumericSensor instances for simplicity. You can also query discrete sensors by substituting CIM_Sensor for CIM_NumericSensor. Determining which values constitute normal sensor state is hardware-dependent.

This example shows how to get the sensor states by starting from the Interop namespace and traversing associations from the managed server Scoping Instance. Locating Sensor State from the Base Server Scoping Instance shows the relationships of the CIM objects involved. For information about getting sensor states by using only the Implementation namespace, see Monitor State of All Sensors By Using Only the Implementation Namespace.

Figure 1. Locating Sensor State from the Base Server Scoping Instance
Diagram shows path from scoping instance to CIM_NumericSensor

This pseudocode depends on the pseudocode in Make a Connection to the CIMOM and Identifying the Base Server Scoping Instance.

To report state for all sensors

Procedure

  1. Connect to the server URL.

    Specify the Interop namespace, supplied as a parameter, for the connection.

    use wbemlib
    use sys
    use connection renamed cnx
    connection = Null
    
    params = cnx.get_params()
    if params is Null 
       sys.exit(-1)
    interop_params = params
    interop_params['namespace'] = 'root/interop'
    connection = cnx.connect_to_host( interop_params )
    if connection is Null 
       print 'Failed to connect to: ' + params['host'] + ' as user: ' + params['user']
       sys.exit(-1)
  2. Locate the Base Server profile Scoping Instance of CIM_ComputerSystem.
    use scoping_instance renamed si
    
    scoping_instance_name = si.get_scoping_instance_name( connection )
    if scoping_instance_name is Null
       print 'Failed to find server Scoping Instance.'
       sys.exit(-1)
  3. Traverse the CIM_SystemDevice association to reach the CIM_NumericSensor instances on the managed server.
    instances = connection.Associators( scoping_instance_name, \
                           AssocClass = 'CIM_SystemDevice', \
                           ResultClass = 'CIM_NumericSensor' )
    if len( instances ) is 0 
       print 'Error:  No sensors associated with server Scoping Instance.'
       sys.exit(-1)
  4. For each sensor instance, print the ElementName and CurrentState properties.

    You can flag any abnormal values you find. Abnormal values depend on the sensor type and its PossibleStates property.

    function print_info( instance, base_class ) 
       print '\n' + base_class + ' [' + instance.classname + '] ='
       if instance['CurrentState'] != 'Normal' 
          print '********* SENSOR STATE WARNING *********\n'
       for prop in [ 'ElementName', 'CurrentState' ] 
          print ' %30s = %s' % ( prop, instance[prop] )
    
    for instance in instances 
       print_info( instance, 'CIM_NumericSensor' )

    A sample of the output looks like the following:

    CIM_NumericSensor [OMC_NumericSensor] =
                        ElementName = FAN 1 RPM for System Board 1
                       CurrentState = Normal
    CIM_NumericSensor [OMC_NumericSensor] =
                        ElementName = Ambient Temp for System Board 1
                       CurrentState = Normal