UNPKG

node-red-contrib-network-tools

Version:

Comprehensive network monitoring and discovery tools for Node-RED with Bonjour/mDNS support

256 lines (225 loc) 10.5 kB
<script type="text/javascript"> RED.nodes.registerType('network-performance-monitor', { category: 'brdc-network-nodes', color: '#2196F3', defaults: { name: {value: ""}, targets: {value: []}, interval: {value: 60000, validate: RED.validators.number()}, timeout: {value: 5000, validate: RED.validators.number()}, historyLimit: {value: 100, validate: RED.validators.number()}, latencyThreshold: {value: 100, validate: RED.validators.number()}, packetLossThreshold: {value: 5, validate: RED.validators.number()}, availabilityThreshold: {value: 95, validate: RED.validators.number()} }, inputs: 1, outputs: 2, outputLabels: ["measurements", "alerts"], icon: "inject.png", label: function() { return this.name || "network-performance-monitor"; }, oneditprepare: function() { var targetsList = $("#targets-list"); var addButton = $("#add-target-btn"); var targetInput = $("#new-target-input"); // Load existing targets if (this.targets && this.targets.length > 0) { this.targets.forEach(function(target) { addTargetToList(target); }); } addButton.click(function() { var target = targetInput.val().trim(); if (target) { addTargetToList(target); targetInput.val(''); } }); targetInput.keypress(function(e) { if (e.which === 13) { // Enter key addButton.click(); } }); function addTargetToList(target) { var row = $('<div class="target-row" style="margin-bottom: 5px;"></div>'); row.append('<span style="display: inline-block; width: 200px;">' + target + '</span>'); row.append('<button type="button" class="remove-target-btn" style="margin-left: 10px;">Remove</button>'); row.find('.remove-target-btn').click(function() { row.remove(); }); targetsList.append(row); } }, oneditsave: function() { var targets = []; $("#targets-list .target-row").each(function() { var target = $(this).find('span').text().trim(); if (target) { targets.push(target); } }); this.targets = targets; } }); </script> <script type="text/html" data-template-name="network-performance-monitor"> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label><i class="fa fa-bullseye"></i> Targets</label> <div style="margin-top: 5px;"> <input type="text" id="new-target-input" placeholder="Enter IP or hostname" style="width: 200px;"> <button type="button" id="add-target-btn" style="margin-left: 5px;">Add</button> </div> <div id="targets-list" style="margin-top: 10px; border: 1px solid #ccc; padding: 10px; min-height: 60px; max-height: 200px; overflow-y: auto;"> </div> <div class="form-tips">Add targets to monitor. You can also add targets via input messages.</div> </div> <div class="form-row"> <label for="node-input-interval"><i class="fa fa-clock-o"></i> Interval (ms)</label> <input type="number" id="node-input-interval" min="10000" max="3600000"> <div class="form-tips">Monitoring interval in milliseconds (minimum 10 seconds)</div> </div> <div class="form-row"> <label for="node-input-timeout"><i class="fa fa-hourglass"></i> Timeout (ms)</label> <input type="number" id="node-input-timeout" min="1000" max="30000"> </div> <div class="form-row"> <label for="node-input-historyLimit"><i class="fa fa-database"></i> History Limit</label> <input type="number" id="node-input-historyLimit" min="10" max="1000"> <div class="form-tips">Maximum number of measurements to keep per target</div> </div> <hr> <h4>Alert Thresholds</h4> <div class="form-row"> <label for="node-input-latencyThreshold"><i class="fa fa-tachometer"></i> Latency (ms)</label> <input type="number" id="node-input-latencyThreshold" min="1" max="10000"> </div> <div class="form-row"> <label for="node-input-packetLossThreshold"><i class="fa fa-exclamation-triangle"></i> Packet Loss (%)</label> <input type="number" id="node-input-packetLossThreshold" min="0" max="100"> </div> <div class="form-row"> <label for="node-input-availabilityThreshold"><i class="fa fa-check-circle"></i> Availability (%)</label> <input type="number" id="node-input-availabilityThreshold" min="50" max="100"> </div> </script> <script type="text/html" data-help-name="network-performance-monitor"> <p>Monitors network performance of multiple targets with alerting and historical tracking.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt class="optional">command <span class="property-type">string</span></dt> <dd>Control command: "start", "stop", "get-report", "clear-data", "add-target", "remove-target"</dd> <dt class="optional">targets <span class="property-type">array</span></dt> <dd>Array of IP addresses or hostnames to monitor</dd> <dt class="optional">target <span class="property-type">string</span></dt> <dd>Single target to add/remove (used with add-target/remove-target commands)</dd> <dt class="optional">interval <span class="property-type">number</span></dt> <dd>Monitoring interval in milliseconds</dd> <dt class="optional">timeout <span class="property-type">number</span></dt> <dd>Ping timeout in milliseconds</dd> </dl> <h3>Outputs</h3> <ol class="node-ports"> <li>Measurements output <dl class="message-properties"> <dt>payload <span class="property-type">object</span></dt> <dd>Performance measurements and aggregated statistics</dd> </dl> </li> <li>Alerts output <dl class="message-properties"> <dt>payload <span class="property-type">array</span></dt> <dd>Array of alert objects when thresholds are exceeded</dd> </dl> </li> </ol> <h3>Commands</h3> <ul> <li><code>start</code>: Start continuous monitoring</li> <li><code>stop</code>: Stop monitoring</li> <li><code>get-report</code>: Generate performance report</li> <li><code>clear-data</code>: Clear all performance data</li> <li><code>add-target</code>: Add new monitoring target</li> <li><code>remove-target</code>: Remove monitoring target</li> </ul> <h3>Features</h3> <ul> <li><strong>Multi-Target Monitoring:</strong> Monitor multiple hosts simultaneously</li> <li><strong>Performance Metrics:</strong> Latency, jitter, packet loss, availability</li> <li><strong>Threshold Alerts:</strong> Configurable alerting thresholds</li> <li><strong>Historical Tracking:</strong> Maintain performance history</li> <li><strong>Trend Analysis:</strong> Performance trend calculation</li> <li><strong>Real-time Reporting:</strong> Live performance dashboards</li> </ul> <h3>Configuration</h3> <p><strong>Name:</strong> Optional name for the node</p> <p><strong>Targets:</strong> IP addresses or hostnames to monitor</p> <p><strong>Interval:</strong> Monitoring interval in milliseconds (minimum 10 seconds)</p> <p><strong>Timeout:</strong> Ping timeout in milliseconds (1000-30000)</p> <p><strong>History Limit:</strong> Maximum number of measurements per target (10-1000)</p> <h4>Alert Thresholds</h4> <p><strong>Latency:</strong> Threshold for response time in milliseconds</p> <p><strong>Packet Loss:</strong> Threshold for packet loss percentage (0-100%)</p> <p><strong>Availability:</strong> Minimum availability percentage (50-100%)</p> <h3>Example Measurement Output</h3> <pre>{ "timestamp": "2024-01-01T00:00:00.000Z", "measurements": [ { "target": "192.168.1.1", "timestamp": "2024-01-01T00:00:00.000Z", "alive": true, "latency": 12.5, "packetLoss": 0 } ], "aggregate": { "totalTargets": 5, "aliveTargets": 4, "downTargets": 1, "availabilityPercent": 80, "averageLatency": 15.2, "minLatency": 8.1, "maxLatency": 28.5, "packetLossPercent": 2.5 }, "alerts": [] }</pre> <h3>Example Alert Output</h3> <pre>[ { "type": "latency", "target": "192.168.1.100", "value": 150, "threshold": 100, "timestamp": "2024-01-01T00:00:00.000Z", "severity": "warning" } ]</pre> <h3>Use Cases</h3> <ul> <li>Network Operations Center (NOC) dashboards</li> <li>SLA monitoring and reporting</li> <li>Proactive network maintenance</li> <li>Performance baseline establishment</li> <li>Capacity planning and optimization</li> <li>Network performance trending and analysis</li> </ul> <h3>Usage Examples</h3> <p><strong>Start monitoring multiple servers:</strong></p> <pre>msg.command = "start"; msg.targets = ["server1.company.com", "server2.company.com", "192.168.1.100"]; msg.interval = 30000; // Every 30 seconds</pre> <p><strong>Add new target:</strong></p> <pre>msg.command = "add-target"; msg.target = "new-server.company.com";</pre> <p><strong>Generate performance report:</strong></p> <pre>msg.command = "get-report";</pre> <h3>Performance Considerations</h3> <ul> <li>Use reasonable monitoring intervals to limit network load</li> <li>Limit the number of targets to control CPU and memory usage</li> <li>Configure history limits as needed</li> <li>Monitor only critical services for optimal performance</li> </ul> </script>