• Delphi


    项目背景

      近期,总经办邮件反馈考勤数据频繁丢失,请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/
      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    NSScanner 的使用
    判断ios设备型号
    图片渲染成蓝色的问题
    UITextView使用体会
    html标签的语义化之搜索引擎优化
    如何用 Canvas绘制图形
    js的几个案例
    js的几种面向对象
    CSS3的几个基本知识点简介
    关于html和CSS的几个基本知识点
  • 原文地址:https://www.cnblogs.com/jeremywucnblog/p/12010439.html
Copyright © 2020-2023  润新知