項目背景
近期,總經辦郵件反饋考勤數據頻繁丟失,請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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。