Delphi - Server Monitor開發並實現指定IP地址的定時檢測和郵件提醒等功能


項目背景

  近期,總經辦郵件反饋考勤數據頻繁丟失,請IT排查其根本原因,並提供整改措施。

  措不及防,這個項目當初並不是IT主導的,是設備部采購,然后協同軟件供應商直接安裝、部署和調試的,IT只是提供幾個數據庫表接口給供應商。然后我們就開始在設備、總經辦、供應商之間相互扯皮,之所以扯皮的原因是,經過供應商排查並沒有發現任何問題(具體情況不得而知),也就是說他們也不知道造成數據丟失的具體原因。

  求人不如求己,后來我們這邊排查數據庫日志,發現在數據丟失的時間段內,數據庫和上位機之間很少或者說基本沒有數據交互。繼續排查設備上位機日志,發現其網絡端口會有間歇性響應異常等問題,重啟端口后一切正常。

  知道這些以后,那接下來問題就簡單了。

解決方案

  • 項目總目標  

  客制化一個系統/腳本,實現定時檢測某個網絡端口相關功能是否正常,通過其DLL接口實現端口刷新或重啟,並將日志通過郵件方式發送給指定人員。

  • 節點目標一:網絡端口通斷檢測模塊;

  • 節點目標二:DLL接口重寫,實現端口刷新或重啟模塊;

  • 節點目標三:日志檢測和郵件發送模塊;

  • 節點目標四:定時模塊。

 

關鍵模塊Demo

下面給出幾個關鍵模塊Demo

網絡端口檢測模塊(需要引用IdIcmpClient單元)

 1 var
 2   icmp: TIdIcmpClient;
 3   rpss: TReplyStatus;
 4 begin
 5   icmp := TIdIcmpClient.Create(nil);
 6   try
 7     icmp.Host := strIP;
 8     icmp.ReceiveTimeout := intLinkTimeOut;
 9     try
10       icmp.Ping;
11       rpss := icmp.ReplyStatus;
12       Result := not (rpss.ReplyStatusType = rsTimeOut);
13     except
14       Result := False;
15     end;
16   finally
17     icmp.Free;
18   end;
19 end;

Dll接口模塊

關於Dll接口其實沒什么可說的,不同的接口使用方法不一樣,這里給出通用的Dll接口重寫和調用的例子

關於Delphi Dll接口重寫:Delphi - 創建SuperDll 持續更新

關於Delphi Dll接口調用:Delphi - 調用SuperDll 持續更新

郵件發送模塊

參考我以前寫過的:Delphi - Indy TIdMessage和TIdSMTP實現郵件的發送

定時模塊

采用Timer控件,通過前台設置執行間隔、Enable屬性,來控制對關鍵事件的定時執行效果 

測試Demo運行效果

頁面布局

運行效果

 

 

  作者:Jeremy.Wu
  出處:https://www.cnblogs.com/jeremywucnblog/
  本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM