xml and xpaths
Hey all I'm having troubles figuring this out.. so I have set up a datasource that pulls the xml directly from a bind statistics web server and that's working but I can't get the values to show up in the datapoints.
given this small snippet...
<span class="tag"><statistics></span><span class="pln">
</span><span class="tag"><server></span><span class="pln">
</span><span class="tag"><boot-time></span><span class="pln">2021-05-20T18:36:19.674Z</span><span class="tag"></boot-time></span><span class="pln">
</span><span class="tag"><config-time></span><span class="pln">2021-05-20T18:36:19.842Z</span><span class="tag"></config-time></span><span class="pln">
</span><span class="tag"><current-time></span><span class="pln">2021-05-20T21:43:29.263Z</span><span class="tag"></current-time></span><span class="pln">
</span><span class="tag"><counters</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"qtype"</span><span class="tag">></span><span class="pln">
</span><span class="tag"><counter</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"A"</span><span class="tag">></span><span class="pln">448606</span><span class="tag"></counter></span><span class="pln">
</span><span class="tag"><counter</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"PTR"</span><span class="tag">></span><span class="pln">395691</span><span class="tag"></counter></span><span class="pln">
</span><span class="tag"></counters></span><span class="pln">
</span><span class="tag"></server></span><span class="pln">
</span><span class="tag"></statistics></span>
When I try "/statistics/server/counters/counter/@name='A'", I just get a value of True back.
When I try "/statistics/server/counters/counter/@name='A'/text()", I get NAN.
Any ideas on what I can try ? I've been looking at xpath examples all day and haven't been able to figure out what's going on...
Additionally if anyone is interested I'll share the datasource after I'm done making it.. I was able to make a complex datasource for the boot/config times with groovy doing something like this:
<span class="pln">stats </span><span class="pun">=</span><span class="pln"> new XmlSlurper</span><span class="pun">().</span><span class="pln">parseText</span><span class="pun">(</span><span class="pln">body</span><span class="pun">);</span><span class="pln">
rawDate </span><span class="pun">=</span><span class="pln"> stats</span><span class="pun">.</span><span class="str">'**'</span><span class="pun">.</span><span class="pln">find </span><span class="pun">{</span><span class="pln"> it</span><span class="pun">.</span><span class="pln">name</span><span class="pun">()</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">'boot-time'</span><span class="pln"> </span><span class="pun">}.</span><span class="pln">text</span><span class="pun">();</span><span class="pln">
Date fd </span><span class="pun">=</span><span class="pln"> Date</span><span class="pun">.</span><span class="pln">parse</span><span class="pun">(</span><span class="pln"> </span><span class="str">"yyyy-MM-dd'T'HH:mm:ss.SSS"</span><span class="pun">,</span><span class="pln"> rawDate </span><span class="pun">);</span><span class="pln">
today </span><span class="pun">=</span><span class="pln"> new Date</span><span class="pun">();</span><span class="pln">
timeDiff </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">today</span><span class="pun">.</span><span class="pln">time </span><span class="pun">-</span><span class="pln"> fd</span><span class="pun">.</span><span class="pln">time</span><span class="pun">)/</span><span class="lit">1000</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">timeDiff</span><span class="pun">);</span>
Then of course if we want we can set up a threshold to let us know if a dns server was reloaded (config-time) or rebooted (boot-time)
Keimond
OP5 years agoThanks again, I just wanted to show my final output as I added the boot-time and config-time that I wanted as well.
My modified /etc/snmp/script/runstats.sh is
Note to anyone out there that also might see this, adding boot-time and config-time does require this in your named.conf
LM User
·5 years agoYeah, I have a whole slew of datasources i need to push into the exchange. Just gotta find the time. That would have made this easier for you.
Keimond
OP5 years agoAh great thank you I don't think we've ever run across this one when searching for past tools!
Keimond
OP5 years agoAnd of course after I post this I decide to try one more thing and it works..
I understand why this is working but what if I don't always know if for example the "name=A" is going to be the first element ? Which led me to try
Which does seem to work, so back to building all of the datapoints !