Логика / Алгоритм для мониторинга и оповещения сервера - PullRequest
1 голос
/ 07 июня 2011

В настоящее время я занимаюсь разработкой небольшого приложения для мониторинга серверов, которое использует WMI для сбора информации об оборудовании, такой как использование ЦП и ОЗУ, а также некоторые другие методы для запросов к службам (FTP, HTTP, IMAP, SMTP, Raw TCP Socket и т. Д.),

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

Однако я врезался в стену, пытаясь построить логику для уведомления пользователей об ошибках и восстановлениях.Класс My Services, который базовый класс для всех подклассов служб содержит несколько событий - OnRefreshed, OnErrorOccured, OnErrorRecovered, OnResponseTimeThresholdReached, OnResponseTimeThresholdRecovered.

Я пытаюсь выполнить следующий сценарий:

  • Когда службы отвечают нормально, событие OnRefreshed запускается на каждом из интервалов обновления.

  • Когда произошла ошибка (например, 404 по HTTP), OnErrorOccuredсобытие должно быть запущено, и если пользователь желает, чтобы уведомление было отправлено, приступайте к отправке уведомления, но только один раз, пока служба не восстановится.

  • Когда служба восстанавливается изошибка, событие OnErrorRecovered должно быть запущено, и если пользователь желает получить уведомление, отправьте его только один раз, пока снова не возникнет ошибка.

  • То же самое относится и к событиям ResponseTime, которыедолжен быть запущен при возникновении соответствующей ситуации.

  • Если служба переключается между OK и Error / ThresholdReached на каждом интервале обновления, между уведомлениями должно быть время остывания, чтобы предотвратить увеличение количества уведомлений.

В настоящее время я создаю это приложениеиспользуя C #.Мы высоко ценим любое просвещение по этому вопросу или любые другие лучшие решения для его реализации.

Спасибо.

1 Ответ

0 голосов
/ 07 июня 2011

Я не кодер C #, но вот что я хотел бы сделать для каждого сервиса.
Я предполагаю, что вы будете хранить информацию об уведомлениях для каждой службы где-нибудь.
Я бы поддерживал массив уведомлений для каждого сервиса с отображением флага ->. Флаги
0 - не уведомлено
1 - сообщение об ошибке_оценено
2 - сообщение об ошибке восстановлено
3 - оба

  1. Всякий раз, когда пользователь уведомляется о событии, отметьте его на основе флага
  2. Всякий раз, когда происходит событие обновления, установите флаг на 0.
...