1. 程式人生 > >Delphi - Server Monitor開發並實現指定埠定時重新整理、重啟和郵件提醒等功能

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/
  本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。