prisme-flow
Version:
prisme platform flow engine
46 lines (42 loc) • 1.64 kB
JavaScript
/**
* Created by prisme.io on 09/06/2017.
*/
module.exports = function (RED) {
'use strict'
var spawn = require('child_process').spawn
var plat = require('os').platform()
function PingNode (n) {
RED.nodes.createNode(this, n)
this.host = n.host
this.timer = n.timer * 1000
var node = this
node.tout = setInterval(function () {
var ex
if (plat == 'linux') { ex = spawn('ping', ['-n', '-w', '5', '-c', '1', node.host]) } else if (plat.match(/^win/)) { ex = spawn('ping', ['-n', '1', '-w', '5000', node.host]) } else if (plat == 'darwin' || plat == 'freebsd') { ex = spawn('ping', ['-n', '-t', '5', '-c', '1', node.host]) } else { node.error('Sorry - your platform - ' + plat + ' - is not recognised.') }
var res = false
var line = ''
// var regex = /from.*time.(.*)ms/;
var regex = /=.*[<|=]([0-9]*).*TTL|ttl..*=([0-9\.]*)/
ex.stdout.on('data', function (data) {
line += data.toString()
})
// ex.stderr.on('data', function (data) {
// console.log('[ping] stderr: ' + data);
// });
ex.on('close', function (code) {
var m = regex.exec(line) || ''
if (m !== '') {
if (m[1]) { res = Number(m[1]) }
if (m[2]) { res = Number(m[2]) }
}
var msg = { payload: false, topic: node.host }
if (code === 0) { msg = { payload: res, topic: node.host } }
try { node.send(msg) } catch (e) {}
})
}, node.timer)
this.on('close', function () {
if (this.tout) { clearInterval(this.tout) }
})
}
RED.nodes.registerType('ping', PingNode)
}