2014-02-04 5 views
1

Я использую свой веб-сервер IIS7 с PHP в сочетании с ping.exe для ping-адресов наших клиентов. Для того, чтобы запустить Pinging Simultaniously, я сделал следующее:Обнаружение при выполнении асинхронного пинга

  • Поместите все IP-адресов, которые будут контролироваться в таблице базы данных
  • Сделано в PHP файл с именем batch.php, который генерирует пакетный файл, который pinglist.bat содержит строку типа «start php -qc: \ inetpub \ monitor \ autotask \ pingip.php IPADDRESS» для каждого IP-адреса и затем выполняет пакетный файл. Используя «start», командный файл не дожидается завершения предыдущей команды.
  • Запланирован этот файл batch.php в планировщике заданий для запуска каждую минуту.
  • pingip.php ping IP-адрес, указанный в параметре, а затем вставляет результат ping в базу данных mysql.

Однако, я хочу, чтобы сценарий выполнял несколько шагов обработки (например, генерирует средние значения для этой партии), когда все IP-адреса отправляются на ping для этой партии в эту минуту.

Проблема в том, что я не знаю, когда все одновременные пинги закончены, так как время отклика и количество адресов различаются.

Что было бы лучшим способом? Чтобы batch.php запустил pinglist.php, затем используйте цикл while для запроса базы данных, если все результаты для этой партии есть каждые x миллисекунд?

Просьба сообщить. Благодарю.

+0

'Какой будет лучший способ? Используйте что-то вроде [Nagios] (http://www.nagios.org/) или [Zabbix] (http://www.zabbix.com/). –

+0

Извините, я хочу сам сделать ik. Это начало большей вещи :) – Mbrouwer88

+0

Похоже, вы хотите вычислить среднее значение момента, когда все пинги выполнены. Это действительно необходимо? Достаточно ли было бы рассчитать среднее значение «на лету», когда действительно будут запрошены результаты? (I.e., через SELECT AVG или аналогичный.) –

ответ

2

Используйте восходящее число в качестве идентификатора партии. У batch.php передать два параметра pingip.php - партию и IP для пинг:

$batch = time(); // or whatever 
foreach ($ips as $ip) { 
    echo "start php pingip.php $batch $ip"; 
} 

Сценарий pingip.php должен написать как номер партии и результат пинга к БД. Убедитесь, что в поле номера партии есть индекс. Тогда вы можете найти самую последнюю его номер партии с:

SELECT MAX(batch) FROM pings 

Вы можете найти, если есть какие-либо ошибки в последней партии с:

SELECT COUNT(*) FROM pings WHERE batch = $batch AND <whatever> 

И вы можете найти среднее с:

SELECT AVG(ping) FROM pings WHERE batch = $batch 

Пока у вас есть индекс в поле партии, каждый из этих запросов будет очень быстрым. Я бы не стал делиться на две таблицы, это просто лишняя работа.

+0

Спасибо, это сработало! – Mbrouwer88

Смежные вопросы