繁体   English   中英

我将如何构建可以在运行时进行自我诊断的应用程序?

[英]How would I build an application that can diagnose itself at runtime?

我有一个使用各种外部资源(Web服务,文件系统,数据库)的应用程序,因此可能很难配置。 该计划是向应用程序添加一个自诊断工具,以便它可以报告配置问题并允许用户对其进行更正。 设计此类功能时,是否应考虑任何设计模式,库,示例等?

该应用程序是用C#和ASP.NET编写的。

一种方法是,在网站的管理区域中,包含一组页面,以报告这些外部资源的状态。 例如,它可能会告诉您配置为要连接到的数据库(以及是否可以建立连接),正在运行的服务器(如果负载平衡)等等。

对于Web服务,我有一个运行的小服务,每隔几分钟就会“ ping”该Web服务以查看它是否仍然存在。 如果不是这样,我会在手机上收到一条短信(偶然通过另一个第三方服务),并在电子邮件中收到详细的错误报告-您可能宁愿知道而不是查看网站上的网页。

我不知道是否有任何特定的设计模式,我只是将此报告元素添加到应用程序的常规层中。

如果他们可以看到您,您可以看到他们

在您的(外部)应用程序中添加一层,以某种形式发送异步“ ping”。 可能是消息传递,类似主题的中间件工具。

如果您无法控制外部系统,则可以添加进行诊断的sep-A-RAT-e“ facade”应用程序(例如,调用带有超时的http连接),然后代表外部应用程序发送ping 。

使用可配置的远程应用程序(消息类型)的可配置列表将侦听器添加到您的中央应用程序,如果这些应用程序无法侦听,则会发出警报。

只要确保在单独的线程中异步运行所有这些即可。 您不希望阻止UI线程或等待超时的太多打开的网络连接。

这样,您的中央应用程序几乎没有开销。 它不需要自己进行轮询,只需坐在那里有队列侦听器和应用程序映射以及上次调用的时间。如果其中一个达到了最近未调用的阈值,则您会遇到问题,并且您的应用程序可以通过某种方式让您知道。

假设您只是说静态配置,

添加锻炼所有系统界面的客户可访问的单元测试。 你已经有一个吧?

称其为“验证配置”。 或者其他的东西。

希望这可以帮助。

您可能会考虑使用规则引擎-长期以来,专家系统一直用于诊断和故障排除。 这允许修改和扩展规则,而不是更改代码库,因为您很可能会忽略许多情况,并且环境可能会发生变化,因此需要添加新规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM