Index: opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java =================================================================== --- opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java (revision 5981) +++ opennms-dao/src/main/java/org/opennms/netmgt/config/StorageStrategy.java (working copy) @@ -31,8 +31,11 @@ // package org.opennms.netmgt.config; +import org.opennms.netmgt.snmp.SnmpAgentConfig; + public interface StorageStrategy { public String getRelativePathForAttribute(String resourceParent, String resource, String attribute); - + public String getResourceNameFromIndex(String resourceParent, String resourceIndex); + public void setSnmpAgentConfig(SnmpAgentConfig agentConfig); public void setResourceTypeName(String name); } Index: opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResource.java =================================================================== --- opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResource.java (revision 5981) +++ opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResource.java (working copy) @@ -34,6 +34,7 @@ import java.io.File; import java.util.Collection; +import org.opennms.netmgt.config.StorageStrategy; import org.opennms.netmgt.model.RrdRepository; import org.opennms.netmgt.snmp.SnmpInstId; @@ -41,11 +42,13 @@ private SnmpInstId m_inst; private String m_name; + private String m_resourceLabel; public GenericIndexResource(ResourceType def, String name, SnmpInstId inst) { super(def); m_name = name; m_inst = inst; + m_resourceLabel = null; } @Override @@ -57,18 +60,35 @@ public CollectionAgent getCollectionAgent() { return getResourceType().getAgent(); } + + public String getOidIndex() { + return m_inst.toString(); + } - // XXX should be based on the storageStrategy + private StorageStrategy getStrategy() { + return ((GenericIndexResourceType)getResourceType()).getStorageStrategy(); + } + + private String getParent() { + return String.valueOf(getCollectionAgent().getNodeId()); + } + + public String getLabel() { + if (m_resourceLabel == null) { + m_resourceLabel = getStrategy().getResourceNameFromIndex(getParent(), getOidIndex()); + } + return m_resourceLabel; + } + @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; + public File getResourceDir(RrdRepository repository) { + String resourcePath = getStrategy().getRelativePathForAttribute(getParent(), getLabel(), null); + File resourceDir = new File(repository.getRrdBaseDir(), resourcePath); + log().debug("getResourceDir: " + resourceDir); + return resourceDir; } + @Override public String toString() { return "Node["+getCollectionAgent().getNodeId() + "]/type[" + m_name + "]/instance[" + m_inst + "]"; } Index: opennms-services/src/main/java/org/opennms/netmgt/collectd/IndexStorageStrategy.java =================================================================== --- opennms-services/src/main/java/org/opennms/netmgt/collectd/IndexStorageStrategy.java (revision 5981) +++ opennms-services/src/main/java/org/opennms/netmgt/collectd/IndexStorageStrategy.java (working copy) @@ -35,10 +35,17 @@ import org.opennms.netmgt.config.StorageStrategy; import org.opennms.netmgt.dao.support.RrdFileConstants; +import org.opennms.netmgt.snmp.SnmpAgentConfig; public class IndexStorageStrategy implements StorageStrategy { private String m_resourceTypeName; + @SuppressWarnings("unused") + protected SnmpAgentConfig m_snmpAgentConfig; + /* + * If you pass null for attribute, the String returned is a path relative to + * a resource + */ public String getRelativePathForAttribute(String resourceParent, String resource, String attribute) { StringBuffer buffer = new StringBuffer(); @@ -47,12 +54,18 @@ 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(); } + public String getResourceNameFromIndex(String resourceParent, String resourceIndex) { + return resourceIndex; + } + public void setResourceTypeName(String name) { m_resourceTypeName = name; } @@ -60,4 +73,9 @@ public String getResourceTypeName() { return m_resourceTypeName; } + + public void setSnmpAgentConfig(SnmpAgentConfig agentConfig) { + m_snmpAgentConfig = agentConfig; + } + } Index: opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourceType.java =================================================================== --- opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourceType.java (revision 5981) +++ opennms-services/src/main/java/org/opennms/netmgt/collectd/GenericIndexResourceType.java (working copy) @@ -69,9 +69,8 @@ "Could not load class", e); } - StorageStrategy storageStrategy; try { - storageStrategy = (StorageStrategy) cinst.newInstance(); + m_storageStrategy = (StorageStrategy) cinst.newInstance(); } catch (InstantiationException e) { throw new ObjectRetrievalFailureException(StorageStrategy.class, className, @@ -84,7 +83,8 @@ e); } - storageStrategy.setResourceTypeName(m_name); + m_storageStrategy.setResourceTypeName(m_name); + m_storageStrategy.setSnmpAgentConfig(getAgent().getAgentConfig()); }