UNPKG

node-red-nagios-nsca-send

Version:

A Node-RED node to forward to Nagios using NSCA send

493 lines (460 loc) 24 kB
<script type="text/x-red" data-template-name="nagios-nsca-send"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label> <input type="text" id="node-input-name" placeholder=""> </div> <div class="form-row"> <label for="node-input-nagioshost"><i class="fa fa-tag"></i> Nagios Host</label> <input type="text" id="node-input-nagioshost" placeholder=""> </div> <div class="form-row"> <label for="node-input-nscaport"><i class="fa fa-desktop"></i> NSCA port</label> <input type="text" id="node-input-nscaport" placeholder="5667"> </div> <div class="form-row"> <label for="node-input-host"><i class="fa fa-rss"></i> Host</label> <input type="text" id="node-input-host"> </div> <div class="form-row"> <label for="node-input-service"><i class="fa fa-wrench"></i> Service</label> <input type="text" id="node-input-service"> </div> <div class="form-row"> <label for="node-input-send_nsca_script"><i class="fa fa-wrench"></i> send_nsca script</label> <input type="text" id="node-input-send_nsca_script" placeholder="/usr/sbin/send_nsca"> </div> <div class="form-row"> <label for="node-input-send_nsca_config"><i class="fa fa-wrench"></i> <span data-i18n="nagios-nsca-send.label.send_nsca_config"></span></label> <input type="text" id="node-input-send_nsca_config" placeholder="/etc/send_nsca.cfg"> </div> <div class="form-row" style="margin-bottom:0;"> <label><i class="fa fa-list"></i> <span data-i18n="nagios-nsca-send.label.perfdata"></span></label> </div> <div class="form-row node-input-perfdata-container-row"> <ol id="node-input-perfdata-container"></ol> </div> </script> <script type="text/x-red" data-help-name="nagios-nsca-send"> <p>A node to send a message to the Nagios NSCA service.</p> <p>The Nagios server running the NSCA service must be given as well as the host and the service for which this passive check sends data.</p> <p>The input message:</p> <ul> <li><code>nagioshost</code>, mandatory, specifies the Nagios host running the NSCA service.</li> <li><code>nscaport</code>, if set, replaces the default port 5667.</li> <li><code>host</code>, mandatory, is the name of the host as defined in your Nagios.</li> <li><code>service</code>, mandatory, is the name of the service as defined in your Nagios.</li> <li><code>send_nsca_script</code>, mandatory, is full path of the executable used for sending data to the NSCA running Nagios server.</li> <li><code>send_nsca_config</code>, mandatory, is full path of the configuration file needed to send to that NSCA service..</li> </ul> <p>messages for each set of performance data:</p> <ul> <li><code>name</code> unique name identifying the performance data.</li> <li><code>value of key</code> name of the key, that carries the value to be send.</li> <li><code>warning</code> defines when the warning state is reached.</li> <li><code>critical</code> defines when the critical state is reached.</li> <li><code>Minimum</code> defines the lower end of the scale.</li> <li><code>Maximum</code> defines the upper end of the scale.</li> <li><code>UOM</code> defines the Unit Of Meassure.</li> </ul> <p>Further explanations will be given as the project progresses.</p> </script> <script type="text/javascript"> RED.nodes.registerType('nagios-nsca-send', { category: 'output', color: '#E2C96C', defaults: { name: { value: '', type: 'string', required: false, }, nagioshost: { value: '', type: 'string', required: true, }, nscaport: { value: 5667, type: 'number', required: false, }, host: { value: '', type: 'string', required: true, }, service: { value: '', type: 'string', required: true, }, status: { value: '', type: 'number', required: false, }, send_nsca_script: { value: '/usr/sbin/send_nsca', type: 'string', required: true, }, send_nsca_config: { value: '/etc/send_nsca.cfg', type: 'string', required: true, }, perfdata: { value: [{ /* perfname: 'Temperatur', perfname_t: 'str', value_from: 'payload.Temperature', value_from_t: 'msg', warn_t: 'between', warn_lt: 'num', warn_l: 10, warn_ht: 'num', warn_h: 30, crit_t: 'outside', crit_lt: 'num', crit_l: -5, crit_ht: 'num', crit_h: -40, min: '-10', min_t: 'num', max: '60', max_t: 'num', UOM: '',*/ perfname: '', perfname_t: 'str', value_from: '', value_from_t: 'str', warn_t: 'above', warn_lt: 'num', warn_l: '', warn_ht: 'num', warn_h: '', crit_t: 'above', crit_lt: 'num', crit_l: '', crit_ht: 'num', crit_h: '', min: '', min_t: 'num', max: '', max_t: 'num', UOM: '', }], required: false, } }, inputs: 1, outputs: 0, icon: 'nagios.png', label: function() { if (this.name) { return this.name || 'nagios nsca send'; } if (!this.perfdata) { return this._("nagios-nsca-send.label.unconfigured_node",{property:'alex was here'}); } else { console.log( JSON.stringify(this.perfdata) ); if (this.perfdata.length == 1) { return this._("nagios-nsca-send.label.NSCA",{property:(this.perfdata[0].perfname||this._("nagios-nsca-send.label.default_name"))}); } else { return this._("nagios-nsca-send.label.NSCA",{property:(this.perfdata[0].perfname||this._("nagios-nsca-send.label.default_name"))}); } } }, labelStyle: function() { return this.name ? 'node_label_italic' : ''; }, align: 'right', oneditprepare: function() { /* warn 0 < warn < b a < warn warn < n warn < a < b < warn a <= warn <=b crit */ var perfname = this._("nagios-nsca-send.label.name"); var warn = this._("nagios-nsca-send.label.warn"); var crit = this._("nagios-nsca-send.label.crit"); var value_from = this._("nagios-nsca-send.label.value_from"); var below = this._("nagios-nsca-send.action.below"); var above = this._("nagios-nsca-send.action.above"); var between = this._("nagios-nsca-send.action.between"); var outside = this._("nagios-nsca-send.action.outside"); var and = this._("nagios-nsca-send.label.and"); var min = this._("nagios-nsca-send.label.min"); var max = this._("nagios-nsca-send.label.max"); var uom = this._("nagios-nsca-send.label.UOM"); function resizeRule(perfd) { var newWidth = perfd.width(); perfd.find('.red-ui-typedInput').typedInput("width",newWidth-150); } $('#node-input-perfdata-container').css('min-height','300px').css('min-width','450px').editableList({ addItem: function(container,i,opt) { var perfd = opt; console.log( "i", i); console.log( "container", JSON.stringify(container) ); console.log( "perfd", JSON.stringify(perfd) ); if (!perfd.hasOwnProperty('perfname')) { /* perfd = {perfname:"",perfname_t:"str",value_from:"",value_from_t:"str",warn_t:"above",warn_l:"",warn_lt:"num",warn_h:50,warn_ht:"num",crit_t:"outside",crit_l:-10,crit_lt:"num",crit_h:60,crit_ht:"num",min:-20,max:70,UOM:""}; */ perfd = {perfname:"",perfname_t:"str",value_from:"payload",value_from_t:"msg",warn_t:"above",warn_l:"",warn_lt:"num",warn_h:"",warn_ht:"num",crit_t:"above",crit_l:"",crit_lt:"num",crit_h:"",crit_ht:"num",min:"",max:"",UOM:""}; } console.log( "perfd", JSON.stringify(perfd) ); var row = [ $('<div/>').appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container), $('<div/>',{style:"margin-top:8px;"}).appendTo(container) ]; /* name */ $('<div/>',{style:"display:inline-block; text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(perfname) .appendTo(row[0]); var propertyName = $('<input/>',{class:"node-input-perfdata-property-perfname",type:"text"}) .appendTo(row[0]) .typedInput({default:'str',types:['msg','flow','global','str','num','json','jsonata']}); /* value_from */ $('<div/>',{style:"display:inline-block; text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(value_from) .appendTo(row[1]); var propertyValueFrom = $('<input/>',{class:"node-input-perfdata-property-value_from",type:"text"}) .appendTo(row[1]) .typedInput({default:'msg',types:['msg','flow','global','str','json','jsonata']}); /* $('<input/>',{class:"node-input-perfdata-type",style:"width:250px; margin-right:10px;"}).appendTo(row[0]); */ /* warn */ var warnrow = $('<div/>',{style:"display:inline-block; text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(warn) .appendTo(row[2]); var warnSelectField = $('<select/>',{class:"node-input-perfdata-property-warn_t",style:"width:110px; margin-right:10px;"}) .appendTo(row[2]); var selectOptions = [{v:"below",l:below},{v:"above",l:above},{v:"between",l:between},{v:"outside",l:outside}]; for (var i=0; i<selectOptions.length; i++) { warnSelectField.append($("<option></option>").val(selectOptions[i].v).text(selectOptions[i].l)); } /* warn_l */ $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}).appendTo(row[3]); var propertyWarn_l = $('<input/>',{class:"node-input-perfdata-property-warn_l",type:"text"}) .appendTo(row[3]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); 5667 /* and */ var propertyWarnAnd = $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(and) .appendTo(row[4]); /* warn_h */ var propertyWarn_h = $('<input/>',{class:"node-input-perfdata-property-warn_h",type:"text"}) .appendTo(row[4]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); warnSelectField.change(function() { var width = $("#node-input-perfdata-container").width(); var type = $(this).val(); if (type == "below") { row[3].show(); propertyWarnAnd.hide(); row[4].hide(); } else if (type == "above") { row[3].hide(); propertyWarnAnd.text(""); propertyWarnAnd.show(); row[4].show(); } else if (type == "between" || type == "outside") { row[3].show(); propertyWarnAnd.text(and); propertyWarnAnd.show(); row[4].show(); } resizeRule(container); }); /* crit */ var critrow = $('<div/>',{style:"display:inline-block; text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(crit) .appendTo(row[5]); var critSelectField = $('<select/>',{class:"node-input-perfdata-property-crit_t",style:"width:110px; margin-right:10px;"}) .appendTo(row[5]); var selectOptions = [{v:"below",l:below},{v:"above",l:above},{v:"between",l:between},{v:"outside",l:outside}]; for (var i=0; i<selectOptions.length; i++) { critSelectField.append($("<option></option>").val(selectOptions[i].v).text(selectOptions[i].l)); } /* crit_l */ $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}).appendTo(row[6]); var propertyCrit_l = $('<input/>',{class:"node-input-perfdata-property-crit_l",type:"text"}) .appendTo(row[6]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); /* and */ var propertyCritAnd = $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(and) .appendTo(row[7]); /* crit_h */ var propertyCrit_h = $('<input/>',{class:"node-input-perfdata-property-crit_h",type:"text"}) .appendTo(row[7]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); critSelectField.change(function() { var width = $("#node-input-perfdata-container").width(); var type = $(this).val(); if (type == "below") { row[6].show(); propertyCritAnd.hide(); row[7].hide(); } else if (type == "above") { row[6].hide(); propertyCritAnd.text(""); propertyCritAnd.show(); row[7].show(); } else if (type == "between" || type == "outside") { row[6].show(); propertyCritAnd.text(and); propertyCritAnd.show(); row[7].show(); } resizeRule(container); }); /* min */ $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(min) .appendTo(row[8]); var propertyMin = $('<input/>',{class:"node-input-perfdata-property-min",type:"text"}) .appendTo(row[8]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); /* max */ $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(max) .appendTo(row[9]); var propertyMax = $('<input/>',{class:"node-input-perfdata-property-max",type:"text"}) .appendTo(row[9]) .typedInput({default:'num',types:['msg','flow','global','num','json','jsonata']}); /* UOM */ $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) .text(uom) .appendTo(row[10]); var propertyUOM = $('<input/>',{class:"node-input-perfdata-property-uom",type:"text"}) .appendTo(row[10]) .typedInput({default:'str',types:['msg','flow','global','str','json','jsonata']}); warnSelectField.val(perfd.warn_t); critSelectField.val(perfd.crit_t); propertyName.typedInput('value',perfd.perfname); propertyName.typedInput('type',perfd.perfname_t); propertyValueFrom.typedInput('value',perfd.value_from); propertyValueFrom.typedInput('type',perfd.value_fromt); propertyWarn_l.typedInput('value',perfd.warn_l); propertyWarn_l.typedInput('type',perfd.warn_lt); propertyWarn_h.typedInput('value',perfd.warn_h); propertyWarn_h.typedInput('type',perfd.warn_ht); propertyCrit_l.typedInput('value',perfd.crit_l); propertyCrit_l.typedInput('type',perfd.crit_lt); propertyCrit_h.typedInput('value',perfd.crit_h); propertyCrit_h.typedInput('type',perfd.crit_ht); propertyMin.typedInput('value',perfd.min); propertyMin.typedInput('type',perfd.min_t); propertyMax.typedInput('value',perfd.max); propertyMax.typedInput('type',perfd.max_t); propertyUOM.typedInput('value',perfd.uom); propertyUOM.typedInput('type',perfd.uom_t); warnSelectField.change(); critSelectField.change(); var newWidth = $("#node-input-perfd-container").width(); resizeRule(container); }, resizeItem: resizeRule, removable: true, sortable: true }); console.log( "perfdata", JSON.stringify(this.perfdata) ); if (!this.perfdata) { console.log( "this", JSON.stringify(this) ); var perfd = { perfname: '', perfname_t: 'str', value_from: '', value_fromt: 'msg', warn_t: 'above', warn_lt: 'num', warn_l: '', warn_ht: 'num', warn_h: '', crit_t: 'above', crit_lt: 'num', crit_l: '', crit_ht: 'num', crit_h: '', min: '', min_t: 'num', max: '', max_t: 'num', UOM: '' } this.perfdata = [perfd]; } console.log( "perfdata", JSON.stringify(this.perfdata) ); for (var i=0; i<this.perfdata.length; i++) { var perfd = this.perfdata[i]; console.log( "perfd", JSON.stringify(perfd) ); $("#node-input-perfdata-container").editableList('addItem',perfd); console.log( "added one perfdata-row" ); } console.log( "added alls perfdata-rows" ); }, oneditsave: function() { var perfdata = $("#node-input-perfdata-container").editableList('items'); console.log( "perfdata while saving", JSON.stringify(this.perfdata) ); var node = this; node.name = $("#node-input-name").val(); node.nagioshost = $("#node-input-nagioshost").val(); node.nscaport= $("#node-input-nscaport").val(); node.host = $("#node-input-host").val(); node.service = $("#node-input-service").val(); node.send_nsca_script = $("#node-input-send_nsca_script").val(); node.send_nsca_config = $("#node-input-send_nsca_config").val(); node.perfdata= []; perfdata.each(function(i) { var perfd = $(this); var r = { perfname: perfd.find(".node-input-perfdata-property-perfname").typedInput('value'), perfname_t: perfd.find(".node-input-perfdata-property-perfname").typedInput('type'), value_from: perfd.find(".node-input-perfdata-property-value_from").typedInput('value'), value_fromt: perfd.find(".node-input-perfdata-property-value_from").typedInput('type'), warn_t: perfd.find(".node-input-perfdata-property-warn_t").val(), warn_l: perfd.find(".node-input-perfdata-property-warn_l").typedInput('value'), warn_lt: perfd.find(".node-input-perfdata-property-warn_l").typedInput('type'), warn_h: perfd.find(".node-input-perfdata-property-warn_h").typedInput('value'), warn_ht: perfd.find(".node-input-perfdata-property-warn_h").typedInput('type'), crit_t: perfd.find(".node-input-perfdata-property-crit_t").val(), crit_l: perfd.find(".node-input-perfdata-property-crit_l").typedInput('value'), crit_lt: perfd.find(".node-input-perfdata-property-crit_l").typedInput('type'), crit_h: perfd.find(".node-input-perfdata-property-crit_h").typedInput('value'), crit_ht: perfd.find(".node-input-perfdata-property-crit_h").typedInput('type'), min: perfd.find(".node-input-perfdata-property-min").typedInput('value'), min_t: perfd.find(".node-input-perfdata-property-min").typedInput('type'), max: perfd.find(".node-input-perfdata-property-max").typedInput('value'), max_t: perfd.find(".node-input-perfdata-property-max").typedInput('type'), uom: perfd.find(".node-input-perfdata-property-uom").typedInput('value'), uom_t: perfd.find(".node-input-perfdata-property-uom").typedInput('type') }; node.perfdata.push(r); }); }, oneditresize: function(size) { var rows = $("#dialog-form>div:not(.node-input-perfdata-container-row)"); var height = size.height; for (var i=0; i<rows.size(); i++) { height -= $(rows[i]).outerHeight(true); } var editorRow = $("#dialog-form>div.node-input-perfdata-container-row"); height -= (parseInt(editorRow.css("marginTop"))+parseInt(editorRow.css("marginBottom"))); $("#node-input-perfdata-container").editableList('height',height); } }); </script>