Delphi - Server Monitor開發並實現指定埠定時重新整理、重啟和郵件提醒等功能
專案背景
近期,總經辦郵件反饋考勤資料頻繁丟失,請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/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。