Example #1
0
 private void loadAttributeGroupList(final WmiCollection collection) {
   for (final Wpm wpm : collection.getWpms().getWpm()) {
     final AttributeGroupType attribGroupType1 =
         new AttributeGroupType(wpm.getName(), wpm.getIfType());
     m_groupTypeList.put(wpm.getName(), attribGroupType1);
   }
 }
Example #2
0
 private void loadAttributeTypeList(final WmiCollection collection) {
   for (final Wpm wpm : collection.getWpms().getWpm()) {
     for (final Attrib attrib : wpm.getAttrib()) {
       final AttributeGroupType attribGroupType = m_groupTypeList.get(wpm.getName());
       final WmiCollectionAttributeType attribType =
           new WmiCollectionAttributeType(attrib, attribGroupType);
       m_attribTypeList.put(attrib.getName(), attribType);
     }
   }
 }
Example #3
0
  private boolean isGroupAvailable(final WmiAgentState agentState, final Wpm wpm) {
    LOG.debug(
        "Checking availability of group {} via object {} of class {} in namespace {}",
        wpm.getName(),
        wpm.getKeyvalue(),
        wpm.getWmiClass(),
        wpm.getWmiNamespace());
    WmiManager manager = null;

    /*
     * We provide a bogus comparison value and use an operator of "NOOP"
     * to ensure that, regardless of results, we receive a result and perform
     * no logic. We're only validating that the agent is reachable and gathering
     * the result objects.
     */
    try {
      // Get and initialize the WmiManager
      manager = agentState.getManager();
      manager.setNamespace(wpm.getWmiNamespace());
      manager.init();

      final WmiParams params =
          new WmiParams(
              WmiParams.WMI_OPERATION_INSTANCEOF,
              "not-applicable",
              "NOOP",
              wpm.getWmiClass(),
              wpm.getKeyvalue());
      final WmiResult result = manager.performOp(params);

      final boolean isAvailable = (result.getResultCode() == WmiResult.RES_STATE_OK);

      agentState.setGroupIsAvailable(wpm.getName(), isAvailable);
      LOG.debug("Group {} is {}{}.", wpm.getName(), (isAvailable ? "" : "not "), "available");
    } catch (final WmiException e) {
      // Log a warning signifying that this group is unavailable.
      LOG.warn("Error checking group ({}) availability.", wpm.getName(), e);
      // Set the group as unavailable.
      agentState.setGroupIsAvailable(wpm.getName(), false);

      // And then continue on to check the next wpm entry.
      return false;
    } finally {
      if (manager != null) {
        try {
          manager.close();
        } catch (WmiException e) {
          LOG.warn("An error occurred closing the WMI Manager", e);
        }
      }
    }
    return true;
  }
Example #4
0
  /** {@inheritDoc} */
  @Override
  public CollectionSet collect(
      final CollectionAgent agent, final EventProxy eproxy, final Map<String, Object> parameters) {

    String collectionName =
        ParameterMap.getKeyedString(
            parameters,
            "collection",
            ParameterMap.getKeyedString(parameters, "wmi-collection", null));
    // Find attributes to collect - check groups in configuration. For each,
    // check scheduled nodes to see if that group should be collected
    final WmiCollection collection =
        WmiDataCollectionConfigFactory.getInstance().getWmiCollection(collectionName);
    final WmiAgentState agentState = m_scheduledNodes.get(agent.getNodeId());

    // Load the attribute group types.
    loadAttributeGroupList(collection);

    // Load the attribute types.
    loadAttributeTypeList(collection);

    // Create a new collection set.
    final WmiCollectionSet collectionSet = new WmiCollectionSet();
    collectionSet.setCollectionTimestamp(new Date());
    final WmiSingleInstanceCollectionResource nodeResource =
        new WmiSingleInstanceCollectionResource(agent);

    // Iterate through the WMI collection groups.
    for (final Wpm wpm : collection.getWpms().getWpm()) {
      // A wpm consists of a list of attributes, identified by name
      if (agentState.shouldCheckAvailability(wpm.getName(), wpm.getRecheckInterval())) {
        if (!isGroupAvailable(agentState, wpm)) {
          continue;
        }
      }

      if (agentState.groupIsAvailable(wpm.getName())) {
        WmiClient client = null;
        // Collect the data
        try {
          // Tell the agent to connect
          agentState.connect(wpm.getWmiNamespace());

          // And retrieve the client object for working.
          client = (WmiClient) agentState.getWmiClient();

          // Retrieve the WbemObjectSet from the class defined on the group.
          final OnmsWbemObjectSet wOS = client.performInstanceOf(wpm.getWmiClass());

          // If we received a WbemObjectSet result, lets go through it and collect it.
          if (wOS != null) {
            //  Go through each object (class instance) in the object set.
            for (int i = 0; i < wOS.count(); i++) {
              // Create a new collection resource.
              WmiCollectionResource resource = null;

              // Fetch our WBEM Object
              final OnmsWbemObject obj = wOS.get(i);

              // If this is multi-instance, fetch the instance name and store it.
              if (wOS.count() > 1) {
                // Fetch the value of the key value. e.g. Name.
                final OnmsWbemProperty prop = obj.getWmiProperties().getByName(wpm.getKeyvalue());
                final Object propVal = prop.getWmiValue();
                String instance = null;
                if (propVal instanceof String) {
                  instance = (String) propVal;
                } else {
                  instance = propVal.toString();
                }
                resource =
                    new WmiMultiInstanceCollectionResource(agent, instance, wpm.getResourceType());
              } else {
                resource = nodeResource;
              }

              for (final Attrib attrib : wpm.getAttrib()) {
                final OnmsWbemProperty prop =
                    obj.getWmiProperties().getByName(attrib.getWmiObject());
                final WmiCollectionAttributeType attribType =
                    m_attribTypeList.get(attrib.getName());
                resource.setAttributeValue(attribType, prop.getWmiValue().toString());
              }
              collectionSet.getCollectionResources().add(resource);
            }
          }
        } catch (final WmiException e) {
          LOG.info("unable to collect params for wpm '{}'", wpm.getName(), e);
        } finally {
          if (client != null) {
            try {
              client.disconnect();
            } catch (final WmiException e) {
              LOG.warn("An error occurred disconnecting while collecting from WMI.", e);
            }
          }
        }
      }
    }
    collectionSet.setStatus(ServiceCollector.COLLECTION_SUCCEEDED);
    return collectionSet;
  }