Search in sources :

Example 1 with OnmsWbemObject

use of org.opennms.protocols.wmi.wbem.OnmsWbemObject in project opennms by OpenNMS.

the class WmiCollector method collect.

/**
 * {@inheritDoc}
 */
@Override
public CollectionSet collect(final CollectionAgent agent, final Map<String, Object> parameters) {
    // Find attributes to collect - check groups in configuration. For each,
    // check scheduled nodes to see if that group should be collected
    final WmiCollection collection = (WmiCollection) parameters.get(WMI_COLLECTION_KEY);
    final WmiAgentConfig agentConfig = (WmiAgentConfig) parameters.get(WMI_AGENT_CONFIG_KEY);
    final WmiAgentState agentState = new WmiAgentState(agent.getAddress(), agentConfig, parameters);
    // Create a new collection set.
    CollectionSetBuilder builder = new CollectionSetBuilder(agent).withStatus(CollectionStatus.FAILED);
    if (collection.getWpms().size() < 1) {
        LOG.info("No groups to collect.");
        return builder.withStatus(CollectionStatus.SUCCEEDED).build();
    }
    final NodeLevelResource nodeResource = new NodeLevelResource(agent.getNodeId());
    // Iterate through the WMI collection groups.
    for (final Wpm wpm : collection.getWpms()) {
        // 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.
                        Resource 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 = getWmiResource(agent, wpm.getResourceType(), nodeResource, instance);
                        } else {
                            resource = nodeResource;
                        }
                        for (final Attrib attrib : wpm.getAttribs()) {
                            final OnmsWbemProperty prop = obj.getWmiProperties().getByName(attrib.getWmiObject());
                            final AttributeType type = attrib.getType();
                            final String stringValue = prop.getWmiValue().toString();
                            if (type.isNumeric()) {
                                Double numericValue = Double.NaN;
                                try {
                                    numericValue = Double.parseDouble(stringValue);
                                } catch (NumberFormatException e) {
                                    LOG.warn("Value '{}' for attribute named '{}' cannot be converted to a number. Skipping.", prop.getWmiValue(), attrib.getName());
                                    continue;
                                }
                                builder.withNumericAttribute(resource, wpm.getName(), attrib.getAlias(), numericValue, type);
                            } else {
                                builder.withStringAttribute(resource, wpm.getName(), attrib.getAlias(), stringValue);
                            }
                        }
                    }
                }
                builder.withStatus(CollectionStatus.SUCCEEDED);
            } 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);
                    }
                }
            }
        }
    }
    return builder.build();
}
Also used : CollectionSetBuilder(org.opennms.netmgt.collection.support.builder.CollectionSetBuilder) WmiAgentConfig(org.opennms.netmgt.config.wmi.WmiAgentConfig) GenericTypeResource(org.opennms.netmgt.collection.support.builder.GenericTypeResource) Resource(org.opennms.netmgt.collection.support.builder.Resource) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) OnmsWbemProperty(org.opennms.protocols.wmi.wbem.OnmsWbemProperty) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) WmiCollection(org.opennms.netmgt.config.wmi.WmiCollection) Attrib(org.opennms.netmgt.config.wmi.Attrib) Wpm(org.opennms.netmgt.config.wmi.Wpm) WmiClient(org.opennms.protocols.wmi.WmiClient) AttributeType(org.opennms.netmgt.collection.api.AttributeType) OnmsWbemObject(org.opennms.protocols.wmi.wbem.OnmsWbemObject) WmiAgentState(org.opennms.netmgt.collectd.wmi.WmiAgentState) OnmsWbemObjectSet(org.opennms.protocols.wmi.wbem.OnmsWbemObjectSet) WmiException(org.opennms.protocols.wmi.WmiException) OnmsWbemObject(org.opennms.protocols.wmi.wbem.OnmsWbemObject)

Example 2 with OnmsWbemObject

use of org.opennms.protocols.wmi.wbem.OnmsWbemObject in project opennms by OpenNMS.

the class TestingNewStructure method main.

/**
 * <p>main</p>
 *
 * @param args an array of {@link java.lang.String} objects.
 */
public static void main(final String[] args) {
    try {
        // Connect to the WMI server.
        final WmiClient wmiClient = new WmiClient("localhost");
        wmiClient.connect("CHILDRENSNT", "CE136452", "aj7162007", WmiParams.WMI_DEFAULT_NAMESPACE);
        final OnmsWbemObjectSet wos = wmiClient.performExecQuery("Select * From Win32_NTLogEvent");
        System.out.println("The number of objects retrieved: " + wos.count());
        for (int i = 0; i < wos.count(); i++) {
            final OnmsWbemObject obj = wos.get(i);
            if (obj == null)
                System.out.println("Received null object.");
            // System.out.println("+++++ Testing Object PropertySet +++++");
            final OnmsWbemPropertySet propSet = obj.getWmiProperties();
            // System.out.println("Object has " + propSet.count() + " properties available.");
            System.out.println("The service (" + propSet.getByName("EventIdentifier").getWmiValue() + ") is: " + propSet.getByName("Message").getWmiValue());
        // for(int b=0; b<propSet.count(); b++) {
        // OnmsWbemProperty prop = propSet.get(b);
        // System.out.println("Property named: " + prop.getWmiName());
        // System.out.println("Property origin: " + prop.getWmiOrigin());
        // System.out.println("Property is array: " + prop.getWmiIsArray());
        // System.out.println("Property is local: " + prop.getWmiIsLocal());
        // System.out.println("Property value: " + prop.getWmiValue());
        // System.out.println("Property CIMType: " + OnmsWbemCimTypeEnum.get(prop.getWmiCIMType()).getCimName() );
        // }
        }
        // lets do some logic here....
        // OnmsWbemObjectSet wos = wmiClient.performInstanceOf("Win32_Keyboard");
        // 
        // System.out.println("The number of objects retrieved: " + wos.count());
        // for(int i=0; i<wos.count(); i++) {
        // OnmsWbemObject obj = wos.get(0);
        // if(obj == null)
        // System.out.println("Received null object.");
        // 
        // System.out.println("+++++ Testing OnmsWbemMethodSet and Mehod +++++");
        // OnmsWbemMethodSet methodSet = obj.getWmiMethods();
        // System.out.println("object has " + methodSet.getCount() + " methods available.");
        // for(int a=0;a<methodSet.getCount(); a++) {
        // OnmsWbemMethod method = methodSet.get(a);
        // System.out.println("Object method Name: " + method.getWmiName());
        // System.out.println("Object method Origin: " + method.getWmiOrigin());
        // }
        // 
        // System.out.println("+++++ Testing OnmsWbemObjectPath +++++");
        // OnmsWbemObjectPath objPath = obj.getWmiPath();
        // System.out.println("Object Path is: " + objPath.getWmiPath());
        // System.out.println("Object ParentNamespace is: " + objPath.getWmiParentNamespace());
        // System.out.println("Object Namespace is: " + objPath.getWmiNamespace());
        // System.out.println("Object Locale is: " + objPath.getWmiLocale());
        // System.out.println("Object DisplayName is: " + objPath.getWmiDisplayName());
        // System.out.println("Object Class is: " + objPath.getWmiClass());
        // System.out.println("Object Authority is: " + objPath.getWmiAuthority());
        // System.out.println("Object RelPath is: " + objPath.getWmiRelPath());
        // System.out.println("Object Server is: " + objPath.getWmiServer());
        // System.out.println("Object IsClass is: " + objPath.getWmiIsClass());
        // System.out.println("Object IsSingleton is: " + objPath.getWmiIsSingleton());
        // 
        // System.out.println("+++++ Testing Getting Object Text +++++");
        // System.out.println(obj.getWmiObjectText());
        // 
        // System.out.println("+++++ Testing Object PropertySet +++++");
        // OnmsWbemPropertySet propSet = obj.getWmiProperties();
        // System.out.println("Object has " + propSet.count() + " properties available.");
        // for(int b=0; b<propSet.count(); b++) {
        // OnmsWbemProperty prop = propSet.get(b);
        // System.out.println("Property named: " + prop.getWmiName());
        // System.out.println("Property origin: " + prop.getWmiOrigin());
        // System.out.println("Property is array: " + prop.getWmiIsArray());
        // System.out.println("Property is local: " + prop.getWmiIsLocal());
        // System.out.println("Property value: " + prop.getWmiValue());
        // System.out.println("Property CIMType: " + OnmsWbemCimTypeEnum.get(prop.getWmiCIMType()).getCimName() );
        // 
        // 
        // }
        // 
        // }
        // Disconenct from the WMI server.
        wmiClient.disconnect();
    } catch (final WmiException e) {
        System.out.println("Caught exception: " + e.getMessage() + "\n");
        e.printStackTrace();
    }
}
Also used : OnmsWbemPropertySet(org.opennms.protocols.wmi.wbem.OnmsWbemPropertySet) OnmsWbemObjectSet(org.opennms.protocols.wmi.wbem.OnmsWbemObjectSet) OnmsWbemObject(org.opennms.protocols.wmi.wbem.OnmsWbemObject)

Example 3 with OnmsWbemObject

use of org.opennms.protocols.wmi.wbem.OnmsWbemObject in project opennms by OpenNMS.

the class OnmsWbemObjectSetImpl method get.

/**
 * {@inheritDoc}
 */
@Override
public OnmsWbemObject get(final Integer idx) throws WmiException {
    try {
        final IJIComObject enumComObject = wbemObjectSet.get("_NewEnum").getObjectAsComObject();
        final IJIEnumVariant enumVariant = (IJIEnumVariant) JIObjectFactory.narrowObject(enumComObject.queryInterface(IJIEnumVariant.IID));
        OnmsWbemObject wbemObj = null;
        IJIDispatch wbemObject_dispatch = null;
        for (int i = 0; i < (idx + 1); i++) {
            final Object[] values = enumVariant.next(1);
            final JIArray array = (JIArray) values[0];
            final Object[] arrayObj = (Object[]) array.getArrayInstance();
            for (int j = 0; j < arrayObj.length; j++) {
                wbemObject_dispatch = (IJIDispatch) JIObjectFactory.narrowObject(((JIVariant) arrayObj[j]).getObjectAsComObject());
            }
        }
        wbemObj = new OnmsWbemObjectImpl(wbemObject_dispatch);
        return wbemObj;
    } catch (final JIException e) {
        throw new WmiException("Failed to enumerate WbemObject variant: " + e.getMessage(), e);
    }
}
Also used : JIArray(org.jinterop.dcom.core.JIArray) IJIComObject(org.jinterop.dcom.core.IJIComObject) IJIEnumVariant(org.jinterop.dcom.impls.automation.IJIEnumVariant) IJIDispatch(org.jinterop.dcom.impls.automation.IJIDispatch) IJIComObject(org.jinterop.dcom.core.IJIComObject) OnmsWbemObject(org.opennms.protocols.wmi.wbem.OnmsWbemObject) WmiException(org.opennms.protocols.wmi.WmiException) OnmsWbemObject(org.opennms.protocols.wmi.wbem.OnmsWbemObject) JIException(org.jinterop.dcom.common.JIException)

Aggregations

OnmsWbemObject (org.opennms.protocols.wmi.wbem.OnmsWbemObject)3 WmiException (org.opennms.protocols.wmi.WmiException)2 OnmsWbemObjectSet (org.opennms.protocols.wmi.wbem.OnmsWbemObjectSet)2 JIException (org.jinterop.dcom.common.JIException)1 IJIComObject (org.jinterop.dcom.core.IJIComObject)1 JIArray (org.jinterop.dcom.core.JIArray)1 IJIDispatch (org.jinterop.dcom.impls.automation.IJIDispatch)1 IJIEnumVariant (org.jinterop.dcom.impls.automation.IJIEnumVariant)1 WmiAgentState (org.opennms.netmgt.collectd.wmi.WmiAgentState)1 AttributeType (org.opennms.netmgt.collection.api.AttributeType)1 CollectionSetBuilder (org.opennms.netmgt.collection.support.builder.CollectionSetBuilder)1 GenericTypeResource (org.opennms.netmgt.collection.support.builder.GenericTypeResource)1 NodeLevelResource (org.opennms.netmgt.collection.support.builder.NodeLevelResource)1 Resource (org.opennms.netmgt.collection.support.builder.Resource)1 Attrib (org.opennms.netmgt.config.wmi.Attrib)1 WmiAgentConfig (org.opennms.netmgt.config.wmi.WmiAgentConfig)1 WmiCollection (org.opennms.netmgt.config.wmi.WmiCollection)1 Wpm (org.opennms.netmgt.config.wmi.Wpm)1 WmiClient (org.opennms.protocols.wmi.WmiClient)1 OnmsWbemProperty (org.opennms.protocols.wmi.wbem.OnmsWbemProperty)1