Скрипт для пингования хоста

Пингует хост указанное количество раз с установленным интервалом. В случае отсутствия ответов больше указанного кличества подряд - отключает реле на установленное время.
Вот код:

//05_25_test_03.js 
//ChangeME! Определим пингуемый адрес
var addrString = "10.0.0.164"

//Устройство-реле
var devRelay="wb-mr6c_45/K1"

//ChangeME! Время между пингами, мс
var timeBeetveenPing=3000

//ChangeME! Максимальное количество пропущенных пингов
var pingFaultCountMAX = 3

//ChangeME! Время отключенного состояния, мс
var timeForDisable=5000

//Сделаем таймер, который будет работать каждые "timeBeetveenPing"
startTicker("pingTimer", timeBeetveenPing);

var pingFaultCount = 0

defineRule("rule_pingTimer",{
  when: function () { return timers.pingTimer.firing; },
  then: function () {
    //Отправим 1 пинг на адрес. Оценим результат
    runShellCommand("/bin/ping -c1 "+addrString,
        {
          captureOutput: true, //Захватывать stdout
          captureErrorOutput: true, //Захватывать stderr (если нужно)
          exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
            {
              	//log("exitCode:",exitCode); //Результат выполнения
              	//log("cmd output: " + capturedOutput); //строка полностью
                //log("cmd Erroroutput: " + capturedErrorOutput);
              	if (exitCode) {pingFaultCount=pingFaultCount+1} //инкрементим счетчик
              	  else {pingFaultCount=0}
              	if (pingFaultCount >= pingFaultCountMAX)  {
                  log.info("Device", addrString, "not answered for", pingFaultCount, "ping. Power reset ", devRelay," executed");
                  timers.pingTimer.stop(); //отключисм таймер
                  dev[devRelay]=false;  //вЫключим реле
                  pingFaultCount=0
                  setTimeout(function () {
				    dev[devRelay]=true; //включим реле
                    startTicker("pingTimer", timeBeetveenPing); //запустим таймер
                  }, timeForDisable);
                }
              
            }
    })
  }
});

Не стал выкидывать закомментированное и в целом упрощать в ущерб понятности.

1 лайк