I have a XML/REST Value sensor working fine, unfortunately, the XML return value is a string, not a numeric value. We would like to receive the string, and use a custom lookup to convert translate to the PRTG state.

Something like this, within the lookup .ovl file -

<SingleInt state="OK" value="Up">
  Service is UP
</SingleInt>

Is there a way to do this with the XML/REST value sensor, or should I use a different sensor?


Article Comments

Attention: This article is a record of a conversation with the Paessler support team. The information in this conversation is not updated to preserve the historical record. As a result, some of the information or recommendations in this conversation might be out of date.

PRTG lookups can only interpret numeric values. We have reversal lookups on our wishlist, but this may take a while. Please bear with us one this one.

In the meantime, you might need a custom PowerShell that does the evalution of the values :)


Oct, 2014 - Permalink

Ok, thanks. I had a feeling that might be the case.

I have been working on a custom SSH script that pulls the JSON encoded data, parses it, then returns a prtg-readable result. Looks like I'm on the right track.

Thanks!


Oct, 2014 - Permalink

Note that we also have a XML/REST available, it also works with JSON:

https://www.paessler.com/manuals/prtg/http_xmlrest_value_sensor.htm

Maybe you can use this one before you put any work into that script :)


Nov, 2014 - Permalink

Hi Stephan.

Yes, that is where I started. But that sensor does not process string (text) values. Only numeric values. Note that I'm looking to process a value of "UP". This is not something the XML/REST sensor can do. At least not yet.


Nov, 2014 - Permalink

Hi Paesler Team , was there a way to solve the same problem without the use of additional scripts, add-ons of the sensor, or by changing the custom lookup ?


Oct, 2018 - Permalink

Hi there,

You could take a look at the Rest Custom Sensor of PRTG which offers you more options. For example to check if the Value "Up" is found in a specific node you could use:

{
  "prtg": {
	"text": $.some.node,
    "result": [
      {
        "channel": "Total",
        "value": lookup($.some.node, "Up"),
	"limitmode": 1,
	"LimitMinError": 0,
	"LimitErrorMsg": "The value for 'node' is not 'Up'!"
      }
    ]
  }
}

Best regards.


Oct, 2018 - Permalink

I am completely confused in the sensor REST Custom. I ask you to help. I do not quite have a standard response from the device I want to monitor, when requested "http://1.1.1.1:2222/default/en_US/status.xml" (GoIP GSM-gateway)

I get such an answer

<status>
    <l1_module_status_gsm>1</l1_module_status_gsm>
    <l1_module_title_gsm/>
    <l1_module_status><a href="?type=list&down=1&line=1">Y</a></l1_module_status>
    <l1_module_title>Click to shut down module</l1_module_title>
    <l1_gsm_sim>Y</l1_gsm_sim>
    <l1_gsm_status>Y</l1_gsm_status>
    <l1_status_line>Y</l1_status_line>
    <l1_line_state>IDLE</l1_line_state>
    <l1_sms_login/>
    <l1_smb_login><font color="#FF0000">N</font></l1_smb_login>
    <l1_gsm_signal>19</l1_gsm_signal>
    <l1_gsm_cur_oper>MegaFon</l1_gsm_cur_oper>
    <l1_gsm_cur_bst/>
    <l1_lac/>
    <l1_sim_remain>NO LIMIT</l1_sim_remain>
    <l1_nocall_t>0</l1_nocall_t>
    <l1_acd>95</l1_acd>
    <l1_asr>18</l1_asr>
    <l1_callt>2118m</l1_callt>
    <l1_callc>1827/10575</l1_callc>
    <l1_rct>2018-09-06 04:00:46</l1_rct>
    <l1_sms_count>NO LIMIT</l1_sms_count>
    <l1_call_count>NO LIMIT</l1_call_count>
    <l2_module_status_gsm>2</l2_module_status_gsm>
    <l2_module_title_gsm/>
    <l2_module_status><a href="?type=list&down=1&line=2">Y</a></l2_module_status>
    <l2_module_title>Click to shut down module</l2_module_title>
    <l2_gsm_sim>Y</l2_gsm_sim>
    <l2_gsm_status>Y</l2_gsm_status>
    <l2_status_line>Y</l2_status_line>
    <l2_line_state>IDLE</l2_line_state>
    <l2_sms_login/>
    <l2_smb_login><font color="#FF0000">N</font></l2_smb_login>
    <l2_gsm_signal>25</l2_gsm_signal>
    <l2_gsm_cur_oper>MegaFon</l2_gsm_cur_oper>
    <l2_gsm_cur_bst/>
    <l2_lac/>
    <l2_sim_remain>NO LIMIT</l2_sim_remain>
    <l2_nocall_t>0</l2_nocall_t>
    <l2_acd>85</l2_acd>
    <l2_asr>17</l2_asr>
    <l2_callt>1509m</l2_callt>
    <l2_callc>1280/7861</l2_callc>
    <l2_rct>2018-09-06 04:00:46</l2_rct>
    <l2_sms_count>NO LIMIT</l2_sms_count>
    <l2_call_count>NO LIMIT</l2_call_count>
</status>    

I need only these lines

    <l1_gsm_sim>Y</l1_gsm_sim>
    <l1_gsm_status>Y</l1_gsm_status>
    <l1_status_line>Y</l1_status_line>
    <l1_gsm_signal>19</l1_gsm_signal>

The status "Y" is good, the status "N" is an accident, but in the event of an accident the next line comes

    <l1_gsm_sim><font color="#FF0000"></font></l1_gsm_sim>
    <l1_gsm_status><font color="#FF0000">N</font></l1_gsm_status>
    <l1_status_line><font color="#FF0000">N</font></l1_status_line>
    <l1_gsm_signal>0</l1_gsm_signal>

It is desirable in one sensor, with the ability to turn on the alarm when the status changes.


Oct, 2018 - Permalink

Hi there,

Unfortunately, the above "XML"-structure cannot be monitored as is it not an XMl structure. It looks more like HTML mixed with a XML-like structure, which the parser we use is not able to parse because of these lines:

<l1_module_status><a href="?type=list&down=1&line=1">Y</a></l1_module_status>
<l2_module_status><a href="?type=list&down=1&line=2">Y</a></l2_module_status>

And later because of the following within the "<l1_gsm_sim>"-node:

<font color="#FF0000"></font>

Maybe there is another API available that also outputs JSON or a clean XML structure?

Best regards.


Oct, 2018 - Permalink