我目前正在开发一个小型服务器监控应用程序,它使用WMI收集硬件信息,如CPU和RAM使用情况,以及查询服务的一些其他方法(FTP,HTTP,IMAP,SMTP,原始TCP套接字等) 。
我已经为上面的每个项目创建了数据收集器,并且能够从中获取数据。每次刷新服务监视器时,服务数据提供程序都将提供服务的响应时间和服务器响应。
然而,我试图构建用于通知用户错误和恢复的逻辑。 My Services类,所有服务子类的基类包含多个事件 - OnRefreshed,OnErrorOccured,OnErrorRecovered,OnResponseTimeThresholdReached,OnResponseTimeThresholdRecovered。
我正在尝试实现以下方案:
当服务正常响应时,每个刷新间隔都会触发OnRefreshed事件。
当发生错误(例如HTTP上的404)时,将触发OnErrorOccured事件,如果用户希望发送通知,则继续发送通知,但只发送一次,直到服务恢复
当服务从错误中恢复时,将触发OnErrorRecovered事件,如果用户需要通知,则只发送一次,直到再次出现错误。
同样的事情发生在ResponseTime事件中,应该在相应的情况发生时触发。
如果服务在每个刷新间隔之间在OK和Error / ThresholdReached之间交替,则通知之间应该有一个冷却时间,以防止通知狂欢。
我目前正在使用C#构建此应用程序。任何关于这个问题的启示,或任何其他更好的解决方案来实现这一点非常感谢。
谢谢。
答案 0 :(得分:0)
我不是C#编码员,但我会为每项服务做些什么。
我假设您将存储每个服务的通知信息。
我会为每个服务维护一个通知数组<用户> - >标志映射。旗帜是
0 - 未通知
1 - error_occurred_notified
2 - error_recovered_notified
3 - 两个