网络设备自动巡检工具(四)——Timer控件的灵活使用【2020-10-29】
网络设备自动巡检工具(四)——Timer控件的灵活使用
按照昨天的想法,今天将登录设备和自动巡检都完成了,我们先来看看成果;如下图,在左边树状列表中选择要登录的设备,然后点击工具栏上登录设备图标,会弹出一个确认窗口,点击确定后,Visual FoxPro会自动打开SecureCRT并自动登录。
自动巡检功能再如下图,当点击工具栏的自动巡检按钮时,程序会弹出进度条,将巡检设备数据库中巡检状态是Ture的设备逐台按照各自的巡检命令,以静默的方式打开SecureCRT自动登录执行巡检命令,执行完毕后自动关闭SecureCRT,而且是多实例同时登录采集,最后将设备的巡检log文件存放在“配置”文件夹里。功能测试超出了我的期望,以63台设备测试巡检大约2分多钟后完毕,速度杠杠的,我非常满意。
其次,分享一下今天的开发,首先登录设备采用上期说的先自动生成CRT脚本,然后调用CRT运行脚本就可以了,很顺利一试成功;自动巡检时我如法炮制,把它放进循环语句中运行,同时巡检采集多台设备,但是由于每台设备的巡检命令多少不一致,设备响应时间不同等原因,我的程序无法知道CRT什么时候执行完毕,造成程序不知何时读取log信息、删除临时脚本等,经过反复思考和实验后,我采用了VFP的Timer计时器控件(这里介绍下Timer控件,它的功能是每经过可设定的时间间隔,就去自动执行一段代码的控件,只要enable属性是Ture,他就一直运行),使用Timer控件轻松解决问题了。下面就详细分享一下实现方法:
首先在循环调用CRT时,给每一个调用创建一个Timer控件,用各自的脚本文件名区分开,创建时Timer的enable属性为False,当CRT开始运行脚本时,就将enable属性为Ture,这时Timer开始计时,并每隔1秒(1秒是我设定的)执行一次我设定好的程序。
其次设定好的程序编写如下功能:1、检测“配置”文件夹下是否生成同脚本文件名一致的log文件,2、如果生成对应的log文件,使用Fopen()函数尝试锁定打开log文件写模式,如果CRT没有运行完毕,那么Fopen()函数就锁定不成功,就这样每隔1秒尝试一次锁定,当CRT执行完毕后,log文件被CRT释放,这样Fopen()函数就能锁定成功。
最后当Fopen()函数锁定成功后,将Timer控件的enable属性设为False,将CRT关闭,将临时脚本文件删除,将log文件信息及路径记录到数据库,准备下一步的数据解析。
今天太晚了,截止现在,网络设备自动巡检工具的第一阶段完成了,就是建立设备列表和自动登录自动巡检的功能都完成了,从明天开始进入第二阶段数据解析的阶段。