2013-12-20 63 views
2

我正在更新监视tomcat7的tomcat线程利用率的nagios插件,并且存在“引号”中所包含值的问题。包含引号的Perl xml

相关的XML从自卸车:

$VAR1 = { 
      'connector' => { 
         '"ajp-bio-8009"' => { 
              'requestInfo' => { 
                   'maxTime' => '0', 
                   'errorCount' => '0', 
                   'bytesSent' => '0', 
                   'processingTime' => '0', 
                   'requestCount' => '0', 
                   'bytesReceived' => '0' 
                  }, 
              'workers' => {}, 
              'threadInfo' => { 
                  'currentThreadCount' => '0', 
                  'maxThreads' => '500', 
                  'currentThreadsBusy' => '0' 
                  } 
              } 
         }, 

培训相关的Perl:

$max = $xml->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'maxThreads'}; 
$current = $xml->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'currentThreadCount'}; 
$busy = $xml->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'currentThreadsBusy'}; 

但不幸的是这似乎不工作,当我不填充为$最大的任何值,$当前或$繁忙。根据要求

完整的XML:

<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="/manager/xform.xsl" ?> 
<status> 
    <jvm> 
     <memory free="70176624" total="165605376" max="2534080512"/> 
     <memorypool name="Eden Space" type="Heap memory" usageInit="12582912" 
      usageCommitted="45744128" usageMax="699072512" usageUsed="23043760"/> 
     <memorypool name="Survivor Space" type="Heap memory" usageInit="1572864" 
      usageCommitted="5701632" usageMax="87359488" usageUsed="5545632"/> 
     <memorypool name="Tenured Gen" type="Heap memory" usageInit="31588352" 
      usageCommitted="114159616" usageMax="1747648512" usageUsed="66839360"/> 
     <memorypool name="Code Cache" type="Non-heap memory" usageInit="2555904" 
      usageCommitted="5505024" usageMax="50331648" usageUsed="5395264"/> 
     <memorypool name="Perm Gen" type="Non-heap memory" usageInit="21757952" 
      usageCommitted="51904512" usageMax="1048576000" usageUsed="51657456"/> 
    </jvm> 
    <connector name='"ajp-bio-8009"'> 
     <threadInfo maxThreads="500" currentThreadCount="0" currentThreadsBusy="0"/> 
     <requestInfo maxTime="0" processingTime="0" requestCount="0" errorCount="0" 
      bytesReceived="0" bytesSent="0"/> 
     <workers/> 
    </connector> 
    <connector name='"http-bio-8080"'> 
     <threadInfo maxThreads="200" currentThreadCount="10" currentThreadsBusy="1"/> 
     <requestInfo maxTime="1596" processingTime="4078" requestCount="416" errorCount="64" 
      bytesReceived="0" bytesSent="639904"/> 
     <workers> 
      <worker stage="R" requestProcessingTime="0" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="&#63;" virtualHost="&#63;" method="&#63;" 
       currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;"/> 
      <worker stage="R" requestProcessingTime="0" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="&#63;" virtualHost="&#63;" method="&#63;" 
       currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;"/> 
      <worker stage="R" requestProcessingTime="0" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="&#63;" virtualHost="&#63;" method="&#63;" 
       currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;"/> 
      <worker stage="S" requestProcessingTime="3" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="38.88.49.38" virtualHost="blah01.blah.com" 
       method="GET" currentUri="/manager/status" currentQueryString="XML=true" 
       protocol="HTTP/1.1"/> 
      <worker stage="R" requestProcessingTime="0" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="&#63;" virtualHost="&#63;" method="&#63;" 
       currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;"/> 
      <worker stage="R" requestProcessingTime="0" requestBytesSent="0" 
       requestBytesReceived="0" remoteAddr="&#63;" virtualHost="&#63;" method="&#63;" 
       currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;"/> 
     </workers> 
    </connector> 
</status> 
+0

你可以显示原始XML吗? – David

+0

当然,编辑后。 – user3029353

+0

尝试逐节点调试。例如,打印Dumper $ xml - > {'connector'} - > {'“ajp-bio-8009”'}然后下一个节点,直到最后一个节点。并检查你在哪里缺少价值。 –

回答

3

我想你的XML是好的。你已经从翻车机得到了你的结果。也许你不要追求你的acutal xml对象。

如果你看一下自卸车输出,只是把它再次检查比你得到你想要的值:

$max = $VAR1->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'maxThreads'}; 
$current = $VAR1->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'currentThreadCount'}; 
$busy = $VAR1->{'connector'}->{'"ajp-bio-8009"'}->{'threadInfo'}->{'currentThreadsBusy'}; 

print $max."\n"; print $current."\n"; print $busy."\n"; 

其中给出:

500 
0 
0 

所以,我的结论,即您的对象在某种程度上不是您想分析的对象(或者它是您想要遍历的引用的子结构或子结构)。