Sweet, I patched my development instance and have it up and running. It does exactly what I wanted.
My only thought is that I may change the way the hrstoragedescr directory names are parsed so that I can always determine the original name from them. Maybe convert each char in the string to ascii equiv or something. Might be a moot point since hrStorageDescr is stored in strings.properties anyway if you're collecting it. Thanks Alejandro! -Will On 6/12/08 12:16 PM, "Alejandro Galue" <[EMAIL PROTECTED]> wrote: > How can I do that from StorageStrategy implementation ? > > It would be great if StorageStrategy can access data > configured on datacollection-config.xml and avoid SNMP > request (as I suggested on my implementation). > > I included here my new version for new features on > StorageStrategy that includes > HostFileSystemStorageStrategy. This patch is based on > 1.6-testing branch rev. 9264. > > Hope this help. > > Alejandro. > > Matt Brozowski wrote: >> Could you just add hrStorageDescr as a collection value? and then access >> it from the collection set? >> >> On Thu, Jun 12, 2008 at 11:13 AM, Will Fraley <[EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]>> wrote: >> >> Hello, >> >> In an attempt to to make collection of disk usage data from >> hrstoragetable resistant to index changes (like ip interface data >> is), I've been attempting to implement a solution similar to one >> Alejandro outlines in bug #1851. >> >> Is there a quick and dirty way I can get the IP of the current host >> (so I can in turn call getAgentConfig()) from within a class >> extending IndexStorageStrategy? This will allow an additional snmp >> request to get the hrstoragedescr of the particular index, which is >> extremely ugly, but should work for my needs. >> >> Thanks! >> >> -Will >> >> ------------------------------------------------------------------------- >> Check out the new SourceForge.net Marketplace. >> It's the best place to buy or sell services for >> just about anything Open Source. >> http://sourceforge.net/services/buy/index.php >> _______________________________________________ >> Please read the OpenNMS Mailing List FAQ: >> http://www.opennms.org/index.php/Mailing_List_FAQ >> >> opennms-devel mailing list >> >> To *unsubscribe* or change your subscription options, see the bottom >> of this page: >> https://lists.sourceforge.net/lists/listinfo/opennms-devel >> >> >> >> ------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------- >> Check out the new SourceForge.net Marketplace. >> It's the best place to buy or sell services for >> just about anything Open Source. >> http://sourceforge.net/services/buy/index.php >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Please read the OpenNMS Mailing List FAQ: >> http://www.opennms.org/index.php/Mailing_List_FAQ >> >> opennms-devel mailing list >> >> To *unsubscribe* or change your subscription options, see the bottom of this >> page: >> https://lists.sourceforge.net/lists/listinfo/opennms-devel > Index: > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/FrameRelayStorageStra > tegy.java > =================================================================== > --- > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/FrameRelayStorageStra > tegy.java (revision 0) > +++ > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/FrameRelayStorageStra > tegy.java (revision 0) > @@ -0,0 +1,56 @@ > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2006 The OpenNMS Group, Inc. All rights > reserved. > +// OpenNMS(R) is a derivative work, containing both original code, included > code and modified > +// code that was published under the GNU General Public License. Copyrights > for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Original code base Copyright (C) 1999-2001 Oculan Corp. All rights > reserved. > +// > +// This program is free software; you can redistribute it and/or modify > +// it under the terms of the GNU General Public License as published by > +// the Free Software Foundation; either version 2 of the License, or > +// (at your option) any later version. > +// > +// This program is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > +// > +// You should have received a copy of the GNU General Public License > +// along with this program; if not, write to the Free Software > +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[EMAIL PROTECTED]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > +package org.opennms.netmgt.dao.support; > + > +import java.util.StringTokenizer; > + > +/** > + * This class use the new implementation of SnmpStorageStrategy extending the > new > + * IndexStorageStrategy from opennms-services > + */ > +public class FrameRelayStorageStrategy extends IndexStorageStrategy { > + > + @Override > + public String getResourceNameFromIndex(String resourceParent, String > resourceIndex) { > + StringTokenizer indexes = new StringTokenizer(resourceIndex, "."); > + String ifIndex = indexes.nextToken(); > + String ifName = getInterfaceName(resourceParent, ifIndex); > + String dlci = indexes.nextToken(); > + return ifName + "." + dlci; > + } > + > + public String getInterfaceName(String nodeId, String ifIndex) { > + String label = m_collectionAgent.getSnmpInterfaceLabel(new > Integer(ifIndex)); > + return label != null ? label : ifIndex; > + } > + > +} > Index: > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/IndexStorageStrategy. > java > =================================================================== > --- > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/IndexStorageStrategy. > java (revision 9264) > +++ > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/IndexStorageStrategy. > java (working copy) > @@ -33,10 +33,12 @@ > > import java.io.File; > > +import org.opennms.netmgt.config.SnmpCollectionAgent; > import org.opennms.netmgt.config.StorageStrategy; > > public class IndexStorageStrategy implements StorageStrategy { > private String m_resourceTypeName; > + protected SnmpCollectionAgent m_collectionAgent; > > public String getRelativePathForAttribute(String resourceParent, String > resource, > String attribute) { > @@ -46,9 +48,11 @@ > buffer.append(m_resourceTypeName); > buffer.append(File.separator); > buffer.append(resource); > - buffer.append(File.separator); > - buffer.append(attribute); > - buffer.append(RrdFileConstants.getRrdSuffix()); > + if (attribute != null) { > + buffer.append(File.separator); > + buffer.append(attribute); > + buffer.append(RrdFileConstants.getRrdSuffix()); > + } > return buffer.toString(); > } > > @@ -59,4 +63,12 @@ > public String getResourceTypeName() { > return m_resourceTypeName; > } > + > + public String getResourceNameFromIndex(String resourceParent, String > resourceIndex) { > + return resourceIndex; > + } > + > + public void setCollectionAgent(SnmpCollectionAgent agent) { > + m_collectionAgent = agent; > + } > } > Index: > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/HostFileSystemStorage > Strategy.java > =================================================================== > --- > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/HostFileSystemStorage > Strategy.java (revision 0) > +++ > opennms-dao/src/main/java/org/opennms/netmgt/dao/support/HostFileSystemStorage > Strategy.java (revision 0) > @@ -0,0 +1,61 @@ > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2006 The OpenNMS Group, Inc. All rights > reserved. > +// OpenNMS(R) is a derivative work, containing both original code, included > code and modified > +// code that was published under the GNU General Public License. Copyrights > for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Original code base Copyright (C) 1999-2001 Oculan Corp. All rights > reserved. > +// > +// This program is free software; you can redistribute it and/or modify > +// it under the terms of the GNU General Public License as published by > +// the Free Software Foundation; either version 2 of the License, or > +// (at your option) any later version. > +// > +// This program is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > +// > +// You should have received a copy of the GNU General Public License > +// along with this program; if not, write to the Free Software > +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[EMAIL PROTECTED]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > +package org.opennms.netmgt.dao.support; > + > +import org.opennms.netmgt.snmp.SnmpObjId; > +import org.opennms.netmgt.snmp.SnmpUtils; > +import org.opennms.netmgt.snmp.SnmpValue; > + > +public class HostFileSystemStorageStrategy extends IndexStorageStrategy { > + > + public static String HR_STORAGE_DESC = ".1.3.6.1.2.1.25.2.3.1.3"; > + > + @Override > + public String getResourceNameFromIndex(String resourceParent, String > resourceIndex) { > + SnmpObjId oid = SnmpObjId.get(HR_STORAGE_DESC + "." + resourceIndex); > + SnmpValue snmpValue = > SnmpUtils.get(m_collectionAgent.getAgentConfig(), oid); > + String value = (snmpValue != null ? snmpValue.toString() : > resourceIndex); > + /* > + * Use special translation for root (base) filesystem > + */ > + if (value.equals("/")) > + return "_root_fs"; > + /* > + * 1. Eliminate first slash character > + * 2. Eliminate tabs and spaces on filesystem names > + * 3. Replace slash (file separator) character with "-" > + * 4. Remove Additional Information on Windows Drives > + */ > + return value.replaceFirst("/", "").replaceAll("\\s", > "").replaceAll("/", "-").replaceAll(":\\\\.*", ""); > + } > + > +} > Index: > opennms-dao/src/main/java/org/opennms/netmgt/config/SnmpCollectionAgent.java > =================================================================== > --- > opennms-dao/src/main/java/org/opennms/netmgt/config/SnmpCollectionAgent.java ( > revision 0) > +++ > opennms-dao/src/main/java/org/opennms/netmgt/config/SnmpCollectionAgent.java ( > revision 0) > @@ -0,0 +1,16 @@ > +package org.opennms.netmgt.config; > + > +import org.opennms.netmgt.snmp.SnmpAgentConfig; > + > +public interface SnmpCollectionAgent { > + > + public SnmpAgentConfig getAgentConfig(); > + > + /* > + * This method is used on SnmpStorageStrategy implementation when the > resource index is associated to > + * a physical interface like frame relay resources. OpenNMS always track > changes on ifTable so, make SNMP > + * queries on this table is redundant, and implementations of > CollectionAgent know ifTable content always. > + * This method give interface information from a specific ifIndex. > + */ > + public String getSnmpInterfaceLabel(int ifIndex); > +} > Index: > opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java > =================================================================== > --- > opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java (revi > sion 9264) > +++ > opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java (work > ing copy) > @@ -35,4 +35,21 @@ > public String getRelativePathForAttribute(String resourceParent, String > resource, String attribute); > > public void setResourceTypeName(String name); > + > + /* > + * This functions translate resourceIndex into a "unique" and > "non-variable" name that could be identify > + * a resource, as described earlier. > + * > + * This method could be expensive because it could require send SNMP > queries and make complicated functions to > + * build the name. So you must try to call it only when is necessary. > + */ > + public String getResourceNameFromIndex(String resourceParent, String > resourceIndex); > + > + /* > + * Add to a strategy the possibility to get additional information using > SNMP when is necessary. > + * There are complex tables on some MIBs where indexes depends on indexes > from other tables (indirect indexing). > + * For this kind of resources we must send some additional SNMP queries > to build a unique name. > + */ > + public void setCollectionAgent(SnmpCollectionAgent agent); > + > } > Index: opennms-daemon/src/main/filtered/etc/snmp-graph.properties > =================================================================== > --- opennms-daemon/src/main/filtered/etc/snmp-graph.properties (revision 9264) > +++ opennms-daemon/src/main/filtered/etc/snmp-graph.properties (working copy) > @@ -118,7 +118,8 @@ > airport.numClients,iisTraffic,iisRequests,exchangeMessages,exchangeBytes, \ > > exchangeRecipPartitions,dnsThroughput,mssqlmemory,mssqlusage,mssqlhitratios,ms > sqllockwaittime, \ > windowsCPU,livecommsusers,livecommsmessages,mailmarshal, \ > -alvarion.droppedrec,alvarion.surb-stats,alvarion.lqi-stats > +alvarion.droppedrec,alvarion.surb-stats,alvarion.lqi-stats, \ > +framerelay.bits, framerelay.frames, framerelay.congestion > > > # values available to prefab reports: > @@ -5946,5 +5947,71 @@ > GPRINT:pktsOut:AVERAGE:"Avg \\: %8.2lf %s" \ > GPRINT:pktsOut:MIN:"Min \\: %8.2lf %s" \ > GPRINT:pktsOut:MAX:"Max \\: %8.2lf %s\\n" > - > + > +report.framerelay.bits.name=Bits In/Out > +report.framerelay.bits.columns=frReceivedOctets,frSentOctets > +report.framerelay.bits.propertiesValues=frDlci > +report.framerelay.bits.type=frCircuitIfIndex > +report.framerelay.bits.command=--title="Bits In/Out of DLCI {frDlci}" \ > + --vertical-label="Bits per second" \ > + DEF:octIn={rrd1}:frReceivedOctets:AVERAGE \ > + DEF:octOut={rrd2}:frSentOctets:AVERAGE \ > + CDEF:rawbitsIn=octIn,8,* \ > + CDEF:rawbitsOut=octOut,8,* \ > + CDEF:rawbitsOutNeg=0,rawbitsOut,- \ > + CDEF:rawtotBits=octIn,octOut,+,8,* \ > + CDEF:bitsIn=rawbitsIn,UN,0,rawbitsIn,IF \ > + CDEF:bitsOut=rawbitsOut,UN,0,rawbitsOut,IF \ > + CDEF:totBits=rawtotBits,UN,0,rawtotBits,IF \ > + CDEF:outSum=bitsOut,{diffTime},* \ > + CDEF:inSum=bitsIn,{diffTime},* \ > + CDEF:totSum=totBits,{diffTime},* \ > + AREA:rawbitsIn#00ff00:"In " \ > + GPRINT:rawbitsIn:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:rawbitsIn:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:rawbitsIn:MAX:"Max \\: %8.2lf %s\\n" \ > + AREA:rawbitsOutNeg#0000ff:"Out" \ > + GPRINT:rawbitsOut:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:rawbitsOut:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:rawbitsOut:MAX:"Max \\: %8.2lf %s\\n" \ > + GPRINT:inSum:AVERAGE:" Tot In \\: %8.2lf %s" \ > + GPRINT:outSum:AVERAGE:" Tot Out \\: %8.2lf %s" \ > + GPRINT:totSum:AVERAGE:" Tot \\: %8.2lf %s\\n" > + > +report.framerelay.frames.name=Frames In/Out > +report.framerelay.frames.columns=frReceivedFrames,frSentFrames > +report.framerelay.frames.propertiesValues=frDlci > +report.framerelay.frames.type=frCircuitIfIndex > +report.framerelay.frames.command=--title="Frames In/Out of DLCI {frDlci}" \ > + --vertical-label="Frames per Second" \ > + DEF:fpsIn={rrd1}:frReceivedFrames:AVERAGE \ > + DEF:fpsOut={rrd2}:frSentFrames:AVERAGE \ > + CDEF:fpsOutNeg=0,fpsOut,- \ > + AREA:fpsIn#00ff00:"In " \ > + GPRINT:fpsIn:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:fpsIn:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:fpsIn:MAX:"Max \\: %8.2lf %s\\n" \ > + AREA:fpsOutNeg#0000ff:"Out" \ > + GPRINT:fpsOut:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:fpsOut:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:fpsOut:MAX:"Max \\: %8.2lf %s\\n" \ > + > +report.framerelay.congestion.name=FECNs / BECNs > +report.framerelay.congestion.columns=frReceivedBECNs,frReceivedFECNs > +report.framerelay.congestion.propertiesValues=frDlci > +report.framerelay.congestion.type=frCircuitIfIndex > +report.framerelay.congestion.command=--title="FECNs/BECNs of DLCI {frDlci}" \ > + --vertical-label="FECN/BECN per Second" \ > + DEF:becns={rrd1}:frReceivedBECNs:AVERAGE \ > + DEF:fecns={rrd2}:frReceivedFECNs:AVERAGE \ > + CDEF:fecnsNeg=0,fecns,- \ > + AREA:becns#00ff00:"BECNs" \ > + GPRINT:becns:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:becns:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:becns:MAX:"Max \\: %8.2lf %s\\n" \ > + AREA:fecnsNeg#0000ff:"FECNs" \ > + GPRINT:fecns:AVERAGE:"Avg \\: %8.2lf %s" \ > + GPRINT:fecns:MIN:"Min \\: %8.2lf %s" \ > + GPRINT:fecns:MAX:"Max \\: %8.2lf %s\\n" \ > + > ## EOF > Index: opennms-daemon/src/main/filtered/etc/datacollection-config.xml > =================================================================== > --- opennms-daemon/src/main/filtered/etc/datacollection-config.xml (revision > 9264) > +++ opennms-daemon/src/main/filtered/etc/datacollection-config.xml (working > copy) > @@ -9,6 +9,11 @@ > <rra>RRA:MIN:0.5:288:366</rra> > </rrd> > > + <resourceType name="frCircuitIfIndex" label="Frame-Relay (RFC1315)"> > + <persistenceSelectorStrategy > class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/> > + <storageStrategy > class="org.opennms.netmgt.dao.support.FrameRelayStorageStrategy"/> > + </resourceType> > + > <resourceType name="ciscoEnvMonTemperatureStatusIndex" label="Cisco > Temperature" > resourceLabel="${cvmTempStatusDescr} (index ${index})"> > <persistenceSelectorStrategy > class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/> > @@ -36,7 +41,7 @@ > <resourceType name="hrStorageIndex" label="Storage (MIB-2 Host > Resources)" > resourceLabel="${hrStorageDescr} (index ${index})"> > <persistenceSelectorStrategy > class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/> > - <storageStrategy > class="org.opennms.netmgt.dao.support.IndexStorageStrategy"/> > + <storageStrategy > class="org.opennms.netmgt.dao.support.HostFileSystemStorageStrategy"/> > </resourceType> > > <resourceType name="ipuMGCPMsgStatsEntry" label="IP Unity MGCP Message > Stats" > @@ -129,6 +134,27 @@ > </resourceType> > > <groups> > + <group name="cisco-frame-relay" ifType="all"> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.2.1.1" > instance="frCircuitIfIndex" alias="frIfName" type="string" /> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.2.1.2" > instance="frCircuitIfIndex" alias="frIfType" type="string" /> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.2.1.3" > instance="frCircuitIfIndex" alias="frSubifIndex" type="string" /> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.1.1.1" > instance="frCircuitIfIndex" alias="frDEins" type="counter" /> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.1.1.2" > instance="frCircuitIfIndex" alias="frDEouts" type="counter" /> > + <mibObj oid=".1.3.6.1.4.1.9.9.49.1.2.1.1.3" > instance="frCircuitIfIndex" alias="frDropPktsOuts" type="counter" /> > + </group> > + > + <group name="rfc1315-frame-relay" ifType="all"> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.1" instance="frCircuitIfIndex" > alias="frIfIndex" type="string" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.2" instance="frCircuitIfIndex" > alias="frDlci" type="string" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.3" instance="frCircuitIfIndex" > alias="frState" type="string" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.4" instance="frCircuitIfIndex" > alias="frReceivedFECNs" type="Counter" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.5" instance="frCircuitIfIndex" > alias="frReceivedBECNs" type="Counter" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.6" instance="frCircuitIfIndex" > alias="frSentFrames" type="Counter" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.7" instance="frCircuitIfIndex" > alias="frSentOctets" type="Counter" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.8" instance="frCircuitIfIndex" > alias="frReceivedFrames" type="Counter" /> > + <mibObj oid=".1.3.6.1.2.1.10.32.2.1.9" instance="frCircuitIfIndex" > alias="frReceivedOctets" type="Counter" /> > + </group> > + > <!-- data from standard (mib-2) sources --> > <group name="mib2-interfaces" ifType="all"> > <mibObj oid=".1.3.6.1.2.1.2.2.1.10" instance="ifIndex" > alias="ifInOctets" type="counter" /> > @@ -1642,6 +1668,8 @@ > <includeGroup>adsl-line</includeGroup> > <includeGroup>cisco-rttmon-latest-jitter-stats</includeGroup> > <includeGroup>cisco-rttmon-latest-rtp-stats</includeGroup> > + <includeGroup>rfc1315-frame-relay</includeGroup> > + <includeGroup>cisco-frame-relay</includeGroup> > </collect> > </systemDef> > > @@ -1810,6 +1838,7 @@ > <collect> > <includeGroup>mib2-host-resources-system</includeGroup> > <includeGroup>mib2-host-resources-memory</includeGroup> > + <includeGroup>mib2-host-resources-storage</includeGroup> > <includeGroup>net-snmp-disk</includeGroup> > <includeGroup>ucd-loadavg</includeGroup> > <includeGroup>ucd-memory</includeGroup> > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/NodeInfo.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/NodeInfo.java (revi > sion 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/NodeInfo.java (work > ing copy) > @@ -91,4 +91,9 @@ > public String getInstance() { > return null; //For node type resources, use the default instance > } > + > + public String getLabel() { > + return null; > + } > + > } // end class > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/AliasedResource.jav> a > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/AliasedResource.jav > a (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/AliasedResource.jav > a (working copy) > @@ -123,4 +123,8 @@ > public String getInstance() { > return null; //For node and interface type resources, use the default > instance > } > + > + public String getLabel() { > + return getDomain() + '/' + getAliasDir(); > + } > } > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionResource. > java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionResource. > java (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionResource. > java (working copy) > @@ -67,4 +67,11 @@ > * @return > */ > public String getInstance(); > + > + /** > + * Returns a unique label for each resource depending on resource type. > + * This label is the same label used when constructing the resource ID. > + * @Return > + */ > + public String getLabel(); > } > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionAgent.jav> a > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionAgent.jav > a (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectionAgent.jav > a (working copy) > @@ -38,6 +38,7 @@ > import java.net.InetAddress; > import java.util.Set; > > +import org.opennms.netmgt.config.SnmpCollectionAgent; > import org.opennms.netmgt.poller.NetworkInterface; > import org.opennms.netmgt.snmp.SnmpAgentConfig; > > @@ -45,7 +46,7 @@ > * > * @author <a href="mailto:[EMAIL PROTECTED]">Mathew Brozowski</a> > */ > -public interface CollectionAgent extends NetworkInterface { > +public interface CollectionAgent extends NetworkInterface,SnmpCollectionAgent > { > > public abstract void setMaxVarsPerPdu(int maxVarsPerPdu); > > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > e.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > e.java (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > e.java (working copy) > @@ -33,6 +33,7 @@ > > import java.io.File; > > +import org.opennms.netmgt.config.StorageStrategy; > import org.opennms.netmgt.model.RrdRepository; > import org.opennms.netmgt.snmp.SnmpInstId; > > @@ -40,6 +41,7 @@ > > private SnmpInstId m_inst; > private String m_name; > + private String m_resourceLabel; > > public GenericIndexResource(ResourceType def, String name, SnmpInstId > inst) { > super(def); > @@ -47,19 +49,16 @@ > m_inst = inst; > } > > - // XXX should be based on the storageStrategy > @Override > public File getResourceDir(RrdRepository repository) { > - File rrdBaseDir = repository.getRrdBaseDir(); > - File nodeDir = new File(rrdBaseDir, > String.valueOf(getCollectionAgent().getNodeId())); > - File typeDir = new File(nodeDir, m_name); > - File instDir = new File(typeDir, m_inst.toString()); > - log().debug("getResourceDir: " + instDir.toString()); > - return instDir; > + String resourcePath = > getStrategy().getRelativePathForAttribute(getParent(), getLabel(), null); > + File resourceDir = new File(repository.getRrdBaseDir(), > resourcePath); > + log().debug("getResourceDir: " + resourceDir); > + return resourceDir; > } > > public String toString() { > - return "node["+getCollectionAgent().getNodeId() + "]." + > getResourceTypeName() + "[" + m_inst + "]"; > + return "node["+getCollectionAgent().getNodeId() + "]." + > getResourceTypeName() + "[" + getLabel() + "]"; > } > > > @@ -80,4 +79,23 @@ > public String getInstance() { > return m_inst.toString(); > } > + > + private StorageStrategy getStrategy() { > + return > ((GenericIndexResourceType)getResourceType()).getStorageStrategy(); > + } > + > + private String getParent() { > + return String.valueOf(getCollectionAgent().getNodeId()); > + } > + > + /* > + * Because call getResourceNameFromIndex could be expensive. > + * This class save the returned value from Strategy on a local variable. > + */ > + public String getLabel() { > + if (m_resourceLabel == null) { > + m_resourceLabel = > getStrategy().getResourceNameFromIndex(getParent(), getInstance()); > + } > + return m_resourceLabel; > + } > } > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/DefaultCollectionAg > ent.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/DefaultCollectionAg > ent.java (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/DefaultCollectionAg > ent.java (working copy) > @@ -279,6 +279,14 @@ > return ifInfos; > } > > + public String getSnmpInterfaceLabel(int ifIndex) { > + for (SnmpIfData ifData : getSnmpInterfaceData()) { > + if (ifData.getIfIndex() == ifIndex) > + return ifData.getLabelForRRD(); > + } > + return null; > + } > + > public long getSavedSysUpTime() { > return m_sysUpTime; > } > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > eType.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > eType.java (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourc > eType.java (working copy) > @@ -85,6 +85,8 @@ > } > > m_storageStrategy.setResourceTypeName(m_name); > + if (getAgent() != null) > + m_storageStrategy.setCollectionAgent(getAgent()); > } > > @Override > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/HttpCollector.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/HttpCollector.java > (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/HttpCollector.java > (working copy) > @@ -675,6 +675,10 @@ > public String getInstance() { > return null; > } > + > + public String getLabel() { > + return null; > + } > } > > class HttpCollectionAttributeType implements CollectionAttributeType { > Index: > opennms-services/src/main/java/org/opennms/netmgt/collectd/AbstractCollectionR > esource.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/collectd/AbstractCollectionR > esource.java (revision 9264) > +++ > opennms-services/src/main/java/org/opennms/netmgt/collectd/AbstractCollectionR > esource.java (working copy) > @@ -111,4 +111,8 @@ > > public abstract boolean shouldPersist(ServiceParameters params); > > -} > \ No newline at end of file > + public String getLabel() { > + return null; > + } > + > +} > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > Please read the OpenNMS Mailing List FAQ: > http://www.opennms.org/index.php/Mailing_List_FAQ > > opennms-devel mailing list > > To *unsubscribe* or change your subscription options, see the bottom of this > page: > https://lists.sourceforge.net/lists/listinfo/opennms-devel ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Please read the OpenNMS Mailing List FAQ: http://www.opennms.org/index.php/Mailing_List_FAQ opennms-devel mailing list To *unsubscribe* or change your subscription options, see the bottom of this page: https://lists.sourceforge.net/lists/listinfo/opennms-devel