<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:Calibri;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Thanks!  I don’t know if it will work with datapower, but we have ISAM appliances as well.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">Jason Brockdorf <apocalysque@yahoo.com><br>
<b>Date: </b>Sunday, April 16, 2017 at 15:17<br>
<b>To: </b>Dan McDonald <Dan.McDonald@austinenergy.com>, Xymon-users <xymon@xymon.com><br>
<b>Subject: </b>RE: [Xymon] Anyone have a plugin for IBM Datapower?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Times New Roman""><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt">I wrote one that works with the REST API on ISAM appliances.  I believe they’re pretty similar to the datapower appliances.  There’s 2 parts to it and you’ll need to have node.js installed, as well as the
 jq - commandline JSON processor executable.  The username and password for the appliance should go on the line immediately following the tag for this host.  I found that putting the user/passwd on the same line as the host/tags made the information show up
 on the “info” page in xymon and I don’t think you want credentials published there.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">This particular test only checks to see if any of the junctions are “red” and reports a red status if so.  The entire junction tree is reported along with green/red for good/bad junctions.  I didn’t write
 in anything for junction specificity, though that’s probably coming soon.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">The first file I called isam-junctions.sh and the 2<sup>nd</sup> file I called isam-jct-parse.js</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I know it’s not exactly what you’re looking for but I hope it will help you to develop one that you can use for the datapower appliances.</span><o:p></o:p></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:11.0pt">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">#!/bin/bash</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">#</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"># get the status of junctions from ISAM appliances</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">#</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">HOSTTAG=junctions                                                       # What we put in hosts.cfg to trigger this test</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">COLUMN=junctions                                                        # Name of the column, often same as tag in hosts.cfg</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">CURLCOMMAND=/usr/bin/curl                                         # where to find curl executable</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">CURLOPTIONS="-skH 'Accept:application/json'"                # set any preferred options here</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">SEARCHTEXT='ServiceAccount'                                             # set the content to look for here</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">$XYMONHOME/bin/xymongrep $HOSTTAG | while read L</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">do</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">set $L                                                                              # To get one line of output from xymongrep</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">JCTUID=`grep -A 1 $2 /etc/xymon/hosts.cfg | egrep -io 'jctuid=[^[:space:]]+' | cut -f2 -d '='`</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">JCTPWD=`grep -A 1 $2 /etc/xymon/hosts.cfg | egrep -io 'jctpwd=[^[:space:]]+' | cut -f2 -d '='`</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">COLOR="green"                                                                 # default to all is ok</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">RESULT="0"</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">HOSTIP="$1"</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">MACHINEDOTS="$2"</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">MACHINE=`echo $2 | sed -e's/\./,/g'`</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">URL="https://$MACHINEDOTS/wga/widgets/health.json"                                              # set the URL here</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">RESPONSE=`$CURLCOMMAND $CURLOPTIONS --user "$JCTUID:$JCTPWD" -X GET $URL`          # get the HTTP response from the URL</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">HTML=`echo "$RESPONSE" | jq '.items[] | walk(if type == "array" then (sort_by(.label | ascii_downcase)) else . end)' | /etc/xymon/ext/isam-jct-parse.js`</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">RESULT=`echo "$HTML" | grep -ic "color:red"`                                                    # check to see if search text is present in the response</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">[[ "$RESULT" -ne "0" ]] && COLOR="red"</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">$XYMON $XYMSRV "status $MACHINE.$COLUMN $COLOR `date`</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">${HTML}"</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">done</span><o:p></o:p></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:11.0pt">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">#!/usr/bin/env node</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">var parseJsonAsHTMLTree = function(jsn){</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">    var result = '';</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">    if(jsn.label){</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        switch(jsn.health){</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        case "0":</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        result += '<ul style="list-style-type:none; color:green;"><li>' + jsn.label + "\n";</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        break;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        case "1":</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        result += '<ul style="list-style-type:none; color:red;"><li>' + jsn.label + "\n";</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        break;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        for(var i in jsn.children)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">            result += parseJsonAsHTMLTree(jsn.children[i]);
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">        result += '</li></ul>';</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">    }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">    return result;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">}</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">process.stdin.resume();</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">process.stdin.setEncoding('utf8');</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">process.stdin.on('data', function(data) {</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">var result = parseJsonAsHTMLTree(JSON.parse(data));</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">process.stdout.write("<pre>" + result + "</pre>\n");</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Consolas">});</span><o:p></o:p></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:11.0pt">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt">From:</span></b><span style="font-size:11.0pt"> Xymon [mailto:xymon-bounces@xymon.com]
<b>On Behalf Of </b>McDonald, Daniel (Dan)<br>
<b>Sent:</b> Friday, March 3, 2017 7:29 AM<br>
<b>To:</b> xymon@xymon.com<br>
<b>Subject:</b> [Xymon] Anyone have a plugin for IBM Datapower?</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I’ve been asked to monitor an IBM Datapower XML gateway, and wanted to see if anyone else had a plugin to do it before I re-invented the wheel.  They have a mib, so supposedly I can poll it with mrtg and feed
 statuses into xymon with bbmrtg.pl, but IBM claims that their web service has greater detail and information.  So, if anyone has written a xymon plugin to poll a datapower webservice and come up with useful stats to display in xymon, I’d love to hear about
 it.</span><o:p></o:p></p>
</div>
</body>
</html>