[Сценарий] Ping множества устройств

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Ответить
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

[Сценарий] Ping множества устройств

Сообщение PAV » Ср июн 25, 2014 12:14 pm

Вот есть задача пинговать 20 устройств.
Я под каждое пишу код пинга.
Как бы так сделать, чтобы код пинга для всех устройств выглядел типа:

Код: Выделить всё

if (ping(gg('СПИСОК ВСЕХ IP'))) {
$nping = 1;
    if ($nping != gg('КОГО ПИНГУЕМ.status')) {
    callMethod('КОГО ПИНГУЕМ.statusChanged',array("value"=>1));
    
    }
} else {
$nping = 0;
    if ($nping != gg('КОГО ПИНГУЕМ.status')) {
    $tries=gg('КОГО ПИНГУЕМ.attempt');
    $tries++;
    sg('КОГО ПИНГУЕМ.attempt',$tries);
        if ($tries>15) { // три попытки
        callMethod('КОГО ПИНГУЕМ.statusChanged',array("value"=>0));
        }
    } 
}
Т.е сделать список ip адресов и чтобы одной командой их пинговать, а все действия уже расписывать в методах к каждому объекту.


И еще вопрос - можно ли как-то сделать, чтобы, например, при команде ДОКЛАД система сканировала бы все объекты на наличие свойства AlertSay = 1 и проговаривала бы то, что находится в свойстве AlertToSay каждого найденного объекта.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ping множества устройств

Сообщение sergejey » Ср июн 25, 2014 12:37 pm

по поводу пинга:

Код: Выделить всё


$list=gg('СПИСОК ВСЕХ IP'); // список в виде "192.168.0.1=object1, 192.168.0.2=object2, 192.168.0.3=object3" т.е. через запятую элементы IP=ОБЪЕКТ
$items=explode(',',$list);

foreach($items as $item) {

$item=trim($item);
$tmp=explode('=',$item);
$ip=$tmp[0];
$object=$tmp[1];

if (ping($ip)) {
$nping = 1;
    if ($nping != gg($object.'.status')) {
    callMethod($object.'.statusChanged',array("value"=>1));
    
    }
} else {
$nping = 0;
    if ($nping != gg($object.'.status')) {
    $tries=gg($object.'.attempt');
    $tries++;
    sg($object.'.attempt',$tries);
        if ($tries>15) { // три попытки
        callMethod($object.'.statusChanged',array("value"=>0));
        }
    } 
}

}
 
по поводу алертов:

Код: Выделить всё

 $objects=SQLSelect("SELECT TITLE FROM objects");
 $total=count($objects);
 for($i=0;$i<$total;$i++) {
  if (gg($objects[$i]['TITLE'].'.AlertSay')) {
    say(gg($objects[$i]['TITLE'].'.AlertToSay'));
  } 
 } 
 
За это сообщение автора sergejey поблагодарил:
melnikas (Ср дек 25, 2019 9:56 am)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Ping множества устройств

Сообщение PAV » Ср июн 25, 2014 7:35 pm

Ураган просто. Спасибо.
Я и host online по второму примеру переделал ;)

Код: Выделить всё

$objects=SQLSelect("SELECT TITLE FROM objects");
 $total=count($objects);
 for($i=0;$i<$total;$i++) {
 
    if (gg($objects[$i]['TITLE'].'.IP')) {
     if ((gg($objects[$i]['TITLE'].'.IP'))>0){
         
      if (ping(gg($objects[$i]['TITLE'].'.IP'))) {
          $nping = 1;
          
    if ($nping != gg($objects[$i]['TITLE'].'.status')) {
    callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
    
    }
} else {
$nping = 0;

    if ($nping != gg($objects[$i]['TITLE'].'.status')) {
    $tries=gg($objects[$i]['TITLE'].'.attempt');
    $tries++;
    sg($objects[$i]['TITLE'].'.attempt',$tries);
    $tri=gg($objects[$i]['TITLE'].'.PingTime');
       if ($tri>0) {
            if ($tries > $tri) { // три попытки
        callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>0));
        }
        } else {
        if ($tries>2) { // три попытки
        callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>0));
        }
        
        }
    } 
}
 
  } 
  }
 }
 
Ответить