From: <rm...@hy...> - 2009-12-13 21:34:07
|
Author: rmoore Date: 2009-12-13 13:07:53 -0800 (Sun, 13 Dec 2009) New Revision: 14085 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14085 Modified: trunk/src/org/hyperic/hq/product/SNMPDetector.java Log: V3 Project commit Modified: trunk/src/org/hyperic/hq/product/SNMPDetector.java =================================================================== --- trunk/src/org/hyperic/hq/product/SNMPDetector.java 2009-12-13 21:06:58 UTC (rev 14084) +++ trunk/src/org/hyperic/hq/product/SNMPDetector.java 2009-12-13 21:07:53 UTC (rev 14085) @@ -1,4 +1,7 @@ /* + * 'SNMPDetector.java' + * + * * NOTE: This copyright does *not* cover user programs that use HQ * program services by normal system calls through the application * program interfaces provided as part of the Hyperic Plug-in Development @@ -6,7 +9,7 @@ * normal use of the program, and does *not* fall under the heading of * "derived work". * - * Copyright (C) [2004, 2005, 2006], Hyperic, Inc. + * Copyright (C) [2004, 2005, 2006, 2007, 2008, 2009], Hyperic, Inc. * This file is part of HQ. * * HQ is free software; you can redistribute it and/or modify @@ -38,264 +41,317 @@ import org.hyperic.snmp.SNMPSession; import org.hyperic.util.config.ConfigResponse; -/** +/* * Generic SNMP Detector intended for pure-xml plugins * that extend the Network Device platform or servers * with builtin SNMP management such as squid. */ -public class SNMPDetector extends DaemonDetector { +public class SNMPDetector extends DaemonDetector +{ + private static final Log log = LogFactory.getLog ( SNMPDetector.class.getName ( ) ); - private static final Log log = - LogFactory.getLog(SNMPDetector.class.getName()); + static final String SNMP_INDEX_NAME = SNMPMeasurementPlugin.PROP_INDEX_NAME; + static final String SNMP_DESCRIPTION = "snmpDescription"; - static final String SNMP_INDEX_NAME = - SNMPMeasurementPlugin.PROP_INDEX_NAME; - static final String SNMP_DESCRIPTION = "snmpDescription"; + public List getServerResources ( ConfigResponse platformConfig ) throws PluginException + { + String indexName = getTypeProperty ( SNMP_INDEX_NAME ); - public List getServerResources(ConfigResponse platformConfig) - throws PluginException { + if ( indexName != null ) + { + log.debug ( "Looking for servers with " + indexName ); - String indexName = getTypeProperty(SNMP_INDEX_NAME); - if (indexName != null) { - log.debug("Looking for servers with " + indexName); - return discoverServices(platformConfig, - getTypeInfo().getName()); - } + return discoverServices ( platformConfig, getTypeInfo().getName ( ) ); + } - return super.getServerResources(platformConfig); - } + return super.getServerResources ( platformConfig ); + } - protected List discoverServices(ConfigResponse config) - throws PluginException { + protected List discoverServices ( ConfigResponse config ) throws PluginException + { + return discoverServices ( config, null ); + } - return discoverServices(config, null); - } + protected List discoverServices ( ConfigResponse config, + String type ) throws PluginException + { + log.debug ( "discoverServices(" + config + ")" ); - protected List discoverServices(ConfigResponse config, String type) - throws PluginException { + String[] keys = getCustomPropertiesSchema().getOptionNames ( ); - log.debug("discoverServices(" + config + ")"); - String[] keys = getCustomPropertiesSchema().getOptionNames(); - ConfigResponse cprops = new ConfigResponse(); - SNMPSession session; - try { - session = new SNMPClient().getSession(config); + ConfigResponse cprops = new ConfigResponse ( ); - //custom properties discovery for the server - for (int i=0; i<keys.length; i++) { - String key = keys[i]; - if (SNMPClient.getOID(key) == null) { - log.debug("Cannot resolve '" + key + "'"); - continue; - } - try { - cprops.setValue(key, - session.getSingleValue(key).toString()); - } catch (SNMPException e) { - log.warn("Error getting '" + key + "': " + - e.getMessage()); - } + SNMPSession session; + + try + { + session = new SNMPClient().getSession ( config ); + + // Custom properties discovery for the server... + for ( int i = 0; i < keys.length; i++ ) + { + String key = keys[i]; + + if ( SNMPClient.getOID ( key ) == null ) + { + log.debug ( "Cannot resolve '" + key + "'" ); + + continue; } - setCustomProperties(cprops); - if (type == null) { - //discover services for existings server - return discoverServices(this, config, session); + try + { + cprops.setValue ( key, session.getSingleValue(key).toString ( ) ); } - else { - //discover SNMP services as server types - return discoverServers(this, config, session, type); + catch ( SNMPException e ) + { + log.warn ( "Error getting '" + key + "': " + e.getMessage ( ) ); } - } catch (SNMPException e) { - String msg = - "Error discovering services for " + getTypeInfo() + - ": " + e; - log.error(msg, e); - return null; - } finally { - session = null; - } - } + } - public static List discoverServices(ServerDetector plugin, - ConfigResponse parentConfig, - SNMPSession session) - throws PluginException { + setCustomProperties ( cprops ); - List services = new ArrayList(); + if ( type == null ) + { + // Discover services for existings server... + return discoverServices ( this, config, session ); + } + else + { + // Discover SNMP services as server types... + return discoverServers ( this, config, session, type ); + } + } + catch ( SNMPException e ) + { + String msg = "Error discovering services for " + getTypeInfo ( ) + ": " + e; - Map servicePlugins = plugin.getServiceInventoryPlugins(); - if (servicePlugins == null) { - return services; - } + log.error ( msg, e ); - for (Iterator it=servicePlugins.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = (Map.Entry)it.next(); - String type = (String)entry.getKey(); - //String name = (String)entry.getValue(); - services.addAll(discoverServices(plugin, parentConfig, session, type)); + return null; + } + finally + { + session = null; + } + } + + public static List discoverServices ( ServerDetector plugin, + ConfigResponse parentConfig, + SNMPSession session ) throws PluginException + { + List services = new ArrayList ( ); + + Map servicePlugins = plugin.getServiceInventoryPlugins ( ); + + if ( servicePlugins == null ) + { + return services; + } + + for ( Iterator it = servicePlugins.entrySet().iterator ( ); it.hasNext ( ); ) + { + Map.Entry entry = (Map.Entry)it.next ( ); + + String type = (String)entry.getKey ( ); + + // String name = (String)entry.getValue ( ); + services.addAll ( discoverServices ( plugin, parentConfig, session, type ) ); } - return services; - } + return services; + } - public static List discoverServices(ServerDetector plugin, + public static List discoverServices ( ServerDetector plugin, + ConfigResponse parentConfig, + SNMPSession session, + String type ) throws PluginException + { + return discoverServices ( plugin, parentConfig, session, type, true ); + } + + public static List discoverServers ( ServerDetector plugin, ConfigResponse parentConfig, - SNMPSession session, - String type) - throws PluginException { + SNMPSession session, + String type ) throws PluginException + { + return discoverServices ( plugin, parentConfig, session, type, false ); + } + + private static List discoverServices ( ServerDetector plugin, + ConfigResponse parentConfig, + SNMPSession session, + String type, + boolean isServiceDiscovery) throws PluginException + { + List services = new ArrayList(); - return discoverServices(plugin, parentConfig, session, type, true); - } + String typeName = plugin.getTypeNameProperty ( type ); + String indexName = plugin.getTypeProperty ( type, SNMP_INDEX_NAME ); + String descrName = plugin.getTypeProperty ( type, SNMP_DESCRIPTION ); - public static List discoverServers(ServerDetector plugin, - ConfigResponse parentConfig, - SNMPSession session, - String type) - throws PluginException { + if ( indexName == null ) + { + String msg = "No " + SNMP_INDEX_NAME + " defined for service autoinventory of " + type; - return discoverServices(plugin, parentConfig, session, type, false); - } + log.error ( msg ); + + return services; + } - private static List discoverServices(ServerDetector plugin, - ConfigResponse parentConfig, - SNMPSession session, - String type, - boolean isServiceDiscovery) - throws PluginException { + List column; - List services = new ArrayList(); + try + { + column = session.getColumn ( indexName ); + } + catch ( SNMPException e ) + { + String msg = "Error getting " + SNMP_INDEX_NAME + "=" + indexName + ": " + e; - String typeName = plugin.getTypeNameProperty(type); - String indexName = plugin.getTypeProperty(type, SNMP_INDEX_NAME); - String descrName = plugin.getTypeProperty(type, SNMP_DESCRIPTION); + log.error ( msg ); - if (indexName == null) { - String msg = - "No " + SNMP_INDEX_NAME + - " defined for service autoinventory of " + type; - log.error(msg); - return services; - } + return services; + } + + log.debug ( "Found " + column.size() + " " + type + " services using " + indexName ); - List column; - try { - column = session.getColumn(indexName); - } catch (SNMPException e) { - String msg = - "Error getting " + SNMP_INDEX_NAME + "=" + indexName + - ": " + e; - log.error(msg); - return services; - } + boolean hasDescriptions = false; - log.debug("Found " + column.size() + " " + type + - " services using " + indexName); - - boolean hasDescriptions = false; - List descriptions = null; + List descriptions = null; - if (descrName != null) { - try { - descriptions = session.getColumn(descrName); - } catch (SNMPException e) { - String msg = - "Error getting " + SNMP_DESCRIPTION + "=" + descrName + - ": " + e; - log.warn(msg); - } - if ((descriptions != null) && (descriptions.size() == column.size())) { - hasDescriptions = true; - } - } + if ( descrName != null ) + { + try + { + descriptions = session.getColumn ( descrName ); + } + catch ( SNMPException e ) + { + String msg = "Error getting " + SNMP_DESCRIPTION + "=" + descrName + ": " + e; + + log.warn(msg); + } + + if ( ( descriptions != null ) && ( descriptions.size ( ) == column.size ( ) ) ) + { + hasDescriptions = true; + } + } - String[] keys = - plugin.getCustomPropertiesSchema(type).getOptionNames(); - HashMap cpropColumns = new HashMap(); + String[] keys = plugin.getCustomPropertiesSchema(type).getOptionNames ( ); + + HashMap cpropColumns = new HashMap ( ); - for (int i=0; i<keys.length; i++) { - String key = keys[i]; - try { - cpropColumns.put(key, session.getColumn(key)); - } catch (SNMPException e) { - log.warn("Error getting '" + key + "': " + - e.getMessage()); - } - } + for ( int i = 0; i < keys.length; i++ ) + { + String key = keys[i]; + + try + { + cpropColumns.put ( key, session.getColumn ( key ) ); + } + catch ( SNMPException e ) + { + log.warn ( "Error getting '" + key + "': " + e.getMessage ( ) ); + } + } - for (int i=0; i<column.size(); i++) { - ConfigResponse config = new ConfigResponse(); - ConfigResponse cprops = new ConfigResponse(); - String indexValue = column.get(i).toString().trim(); - String resourceDescr = null; + for ( int i = 0; i < column.size ( ); i++ ) + { + ConfigResponse config = new ConfigResponse ( ); + ConfigResponse cprops = new ConfigResponse ( ); - config.setValue(SNMPMeasurementPlugin.PROP_INDEX_VALUE, - indexValue); + String indexValue = column.get(i).toString().trim ( ); + String resourceDescr = null; - for (int j=0; j<keys.length; j++) { - String key = keys[j]; - List data = (List)cpropColumns.get(key); - if ((data == null) || data.isEmpty()) { - continue; - } - String val = data.get(i).toString().trim(); - cprops.setValue(key, val); + config.setValue ( SNMPMeasurementPlugin.PROP_INDEX_VALUE, indexValue ); + + for ( int j = 0; j < keys.length; j++ ) + { + String key = keys[j]; + + List data = (List)cpropColumns.get(key); + + if ( ( data == null ) || data.isEmpty ( ) ) + { + continue; } - if (hasDescriptions) { - resourceDescr = descriptions.get(i).toString(); + + String val = data.get(i).toString().trim ( ); + + cprops.setValue ( key, val ); + } + + if ( hasDescriptions ) + { + resourceDescr = descriptions.get(i).toString ( ); + } + + String resourceName = typeName + " " + indexValue; + String autoName = plugin.formatAutoInventoryName ( type, parentConfig, config, cprops ); + + if ( isServiceDiscovery ) + { + ServiceResource service = new ServiceResource ( ); + + service.setType(type); + + if ( autoName == null ) + { + service.setServiceName ( resourceName ); } + else + { + service.setName ( autoName ); + } - String resourceName = typeName + " " + indexValue; - String autoName = - plugin.formatAutoInventoryName(type, - parentConfig, - config, - cprops); + service.setProductConfig ( config ); - if (isServiceDiscovery) { - ServiceResource service = new ServiceResource(); - service.setType(type); - if (autoName == null) { - service.setServiceName(resourceName); - } - else { - service.setName(autoName); - } + // Required to auto-enable metric... + service.setMeasurementConfig ( ); + service.setCustomProperties ( cprops ); - service.setProductConfig(config); - //required to auto-enable metric - service.setMeasurementConfig(); - service.setCustomProperties(cprops); - if (resourceDescr != null) { - service.setDescription(resourceDescr); - } + if ( resourceDescr != null ) + { + service.setDescription ( resourceDescr ); + } - services.add(service); + services.add ( service ); + } + else + { + ServerResource server = new ServerResource ( ); + + server.setType ( type ); + + if ( autoName == null ) + { + server.setName ( getPlatformName ( ) + " " + resourceName ); } - else { - ServerResource server = new ServerResource(); - server.setType(type); - if (autoName == null) { - server.setName(getPlatformName() + " " + resourceName); - } - else { - server.setName(autoName); - } - server.setInstallPath("/"); //XXX - server.setIdentifier(server.getName()); + else + { + server.setName ( autoName ); + } - server.setProductConfig(config); - //required to auto-enable metric - server.setMeasurementConfig(); - server.setCustomProperties(cprops); - if (resourceDescr != null) { - server.setDescription(resourceDescr); - } + server.setInstallPath ( "/" ); + server.setIdentifier ( server.getName ( ) ); - services.add(server); + server.setProductConfig ( config ); + + // Required to auto-enable metric... + server.setMeasurementConfig ( ); + server.setCustomProperties ( cprops ); + + if ( resourceDescr != null ) + { + server.setDescription ( resourceDescr ); } - } + + services.add ( server ); + } + } - return services; - } + return services; + } } |