RRDtool 1.6 doesn't like vames called ds
Description
Acceptance / Success Criteria
None
Lucidchart Diagrams
Activity
Alejandro Galue October 11, 2016 at 1:50 PM
I verified that the fix was propagated from foundation-2016 to develop and release-18.0.3 (as well as Meridian's develop)
Jesse White October 2, 2016 at 6:28 PM
I closed this one too fast, I'll keep it open until this is cherry-picked into the proper branches.
Alejandro Galue September 29, 2016 at 2:56 PM
By just renaming the vname, the problem is gone:
diff --git a/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java b/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java
index 9a597e5..06ddee2 100644
--- a/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java
+++ b/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java
@@ -94,12 +94,12 @@ public class DefaultRrdDao implements RrdDao, InitializingBean {
"-",
"--start=" + (startTimeInMillis / 1000),
"--end=" + (endTimeInMillis / 1000),
- "DEF:ds=" + RrdFileConstants.escapeForGraphing(rrdAttribute.getRrdRelativePath()) + ":" + attribute.getName() + ":" + rraConsolidationFunction,
+ "DEF:ds1=" + RrdFileConstants.escapeForGraphing(rrdAttribute.getRrdRelativePath()) + ":" + attribute.getName() + ":" + rraConsolidationFunction,
};
String[] printDefs = new String[printFunctions.length];
for (int i = 0; i < printFunctions.length; i++) {
- printDefs[i] = "PRINT:ds:" + printFunctions[i] + ":\"%le\"";
+ printDefs[i] = "PRINT:ds1:" + printFunctions[i] + ":\"%le\"";
}
String commandString = StringUtils.arrayToDelimitedString(command, " ") + ' ' + StringUtils.arrayToDelimitedString(printDefs, " ");
I tested it on a VM running Meridian 2016.1.3 and it works:
[root@onms-meridian ~]# curl -u admin:admin "http://localhost:8980/opennms/summary/results.htm?filterRule=ipaddr%3D%2712.0.0.2%27&startTime=1475085900&endTime=1475172300&attributeSieve=if(In|Out)Octets"
<?xml version="1.0" encoding="UTF-8"?>
<summary xmlns="http://xmlns.opennms.org/xsd/attr-summary">
<resource>
<name>Valencia</name>
<resource>
<name>Se3/0.201 (Caracas, 12.0.0.2, 1.544 Mbps)</name>
<attribute>
<name>ifOutOctets</name>
<min>66.25783</min>
<average>66.69313</average>
<max>67.19437</max>
</attribute>
<attribute>
<name>ifInOctets</name>
<min>44.76824</min>
<average>45.15052</average>
<max>45.80749</max>
</attribute>
</resource>
<resource>
<name>Lo0 (192.168.4.4, 8 Gbps)</name>
<attribute>
<name>ifOutOctets</name>
<min>12.88933</min>
<average>12.97805</average>
<max>13.05602</max>
</attribute>
<attribute>
<name>ifInOctets</name>
<min>0.0</min>
<average>0.0</average>
<max>0.0</max>
</attribute>
</resource>
</resource>
</summary>
Alejandro Galue September 29, 2016 at 2:34 PM
Fixing the name doesn't hurt for Horizon, as this is just a placeholder (it can be whatever we want). This is why I've created this error on the OpenNMS project instead of the LTS project.
Fixed
Details
Assignee
Alejandro GalueAlejandro GalueReporter
Alejandro GalueAlejandro GalueLabels
Components
Fix versions
Affects versions
Priority
Major
Details
Details
Assignee
Alejandro Galue
Alejandro GalueReporter
Alejandro Galue
Alejandro GalueLabels
Components
Fix versions
Affects versions
Priority
PagerDuty
PagerDuty Incident
PagerDuty
PagerDuty Incident
PagerDuty

PagerDuty Incident
Created September 29, 2016 at 2:33 PM
Updated October 11, 2016 at 1:50 PM
Resolved October 11, 2016 at 1:50 PM
For some unknown reason this doesn't affect Horizon 18, but Meridian 16 using RRDtool 1.6.0 complains when naming a vname "ds".
For example:
[root@onms-meridian rrd]# /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.3343676518579722860.png --start=1475085900 --end=1475172300 DEF:ds="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds:MIN:"%le" PRINT:ds:AVERAGE:"%le" PRINT:ds:MAX:"%le" ERROR: undefined vname ds
But, if I rename it to something else like "ds1":
[root@onms-meridian rrd]# /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.3343676518579722860.png --start=1475085900 --end=1475172300 DEF:ds1="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds1:MIN:"%le" PRINT:ds1:AVERAGE:"%le" PRINT:ds1:MAX:"%le" 0x0 6.625783e+01 6.669313e+01 6.719437e+01
Because of this error, the summary report obtained through an URL like the following is not working on Meridian (but works on Horizon):
curl -u admin:admin "http://localhost:8980/opennms/summary/results.htm?filterRule=ipaddr%3D%2712.0.0.2%27&startTime=1475085900&endTime=1475172300&attributeSieve=if(In|Out)Octets"
The command is generated inside the DefaultRrdDao.java (to be more precise, the method named getPrintValues):
Caused by: org.opennms.netmgt.rrd.RrdException: Can't execute command /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.8634894254809112395.png --start=1475085900 --end=1475172300 DEF:ds="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds:MIN:"%le" PRINT:ds:AVERAGE:"%le" PRINT:ds:MAX:"%le" at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphReturnDetails(AbstractJniRrdStrategy.java:195) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.QueuingRrdStrategy.createGraphReturnDetails(QueuingRrdStrategy.java:1298) ~[opennms-rrd-api-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.DefaultRrdDao.getPrintValues(DefaultRrdDao.java:110) ~[opennms-dao-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.getValues(DefaultRrdSummaryService.java:390) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addAttributes(DefaultRrdSummaryService.java:376) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addResource(DefaultRrdSummaryService.java:365) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addResource(DefaultRrdSummaryService.java:358) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.visitNode(DefaultRrdSummaryService.java:313) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.FilterWalker.walk(FilterWalker.java:61) ~[opennms-dao-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService.getSummary(DefaultRrdSummaryService.java:397) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService.getSummary(DefaultRrdSummaryService.java:462) ~[opennms-webapp-2016.1.3.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] ... Caused by: org.opennms.netmgt.rrd.RrdException: ERROR: undefined vname ds at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphAsByteArray(AbstractJniRrdStrategy.java:95) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraph(AbstractJniRrdStrategy.java:68) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphReturnDetails(AbstractJniRrdStrategy.java:165) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.QueuingRrdStrategy.createGraphReturnDetails(QueuingRrdStrategy.java:1298) ~[opennms-rrd-api-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.DefaultRrdDao.getPrintValues(DefaultRrdDao.java:110) ~[opennms-dao-2016.1.3.jar:?]