我的小工具开源一下-PingTest
先交代下背景,最近我们项目组的网络真是太渣了,时常remote不了另外一个地方的机器,过个几分钟就断开连接,太烦躁了,严重影响工作心情。。。于是想着做个工具记录下每天的断开remote连接的时刻,然后将这份记录给IT人员,让他们去分析分析到底哪里出问题了。到了第二个版本,我就将这个记录汇总成了一个Report,包含了与远程机器的累计失联次数,累计失联时间,最长失联时间,最长在线时间。将失联和重新建立连接的时间点打印在控制台窗口和log文件中。效果还不错。
开源项目地址:https://github.com/Jackson0714/PingTest
1.项目结构:

2.结果展示:
Consel窗口

Log文件:

3.原理
1.检测的原理
1.1 用两个后台线程不断的去ping另外一台机器的IP地址,其中一个线程检测是否可以连接,如果可以连接,则记录时间点及状态,另外一个线程检测是否可以连接,如果不能连接,则retry ,如果连续retry 3次都不能ping通,则表示该机器失联,记录这次失联的时间点。
ping的代码:
public static bool Ping(string ip)
{
options.DontFragment = true;
byte[] buffer = Encoding.ASCII.GetBytes(data);
reply = p.Send(ip, timeout, buffer, options);
if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
{
return true;
}
else
{
return false;
}
}
1.2 两个线程去检测机器连接状态:
public static void TestTargetIP1Connecting()
{
while (true)
{
if (targetIP1lastStatus != NetworkStatus.Online)
{
pingTarget1Count++;
if (PingUtil.IsConnected(targetIP1))
{
timePoints1.Add(new TimePoint(DateTime.Now, NetworkStatus.Online));
targetIP1lastStatus = NetworkStatus.Online;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(FormatConnectingConsoleLog(targetIP1, pingTarget1Count));
Console.ForegroundColor = ConsoleColor.White;
log1.Info(FormatConnectingFileLog(targetIP1, pingTarget1Count));
}
}
Thread.Sleep(sleepTime);
}
}
public static void TestTargetIP1Disconnected()
{
while (true)
{
if (targetIP1lastStatus != NetworkStatus.Offline && !PingUtil.IsConnected(targetIP1))
{
timePoints1.Add(new TimePoint(DateTime.Now, NetworkStatus.Offline));
pingTarget1Count = 0;
targetIP1GroupCount++;
targetIP1lastStatus = NetworkStatus.Offline;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(FormatDisconnectedConsoleLog(targetIP1, targetIP1GroupCount));
Console.ForegroundColor = ConsoleColor.White;
log1.Info(FormatDisconnectedFileLog(targetIP1, targetIP1GroupCount));
}
Thread.Sleep(sleepTime);
}
}
1.3 retry的机制
public static bool IsConnected(string ipAddress)
{
bool isConnected = true;
try
{
RetryScope.BeginRetry(retryInterval);
do
{
try
{
try
{
if (!PingUtil.Ping(ipAddress))
{
throw new Exception(string.Format("{0} Disconnected", ipAddress), new Exception("Disconnected"));
}
}
finally
{
}
break;
}
catch (Exception ex)
{
if (!RetryScope.HandleException(ex))
{
throw;
}
}
} while (RetryScope.Continue);
}
catch (Exception cex)
{
isConnected = false;
}
finally
{
RetryScope.EndRetry(retryInterval);
}
return isConnected;
}
2.对所有时间点进行分析

2.1 统计分析的核心代码。发现用Linq超级爽,一下子就统计分析出来了。

2.2 单元测试:
因为每次统计分析都需要手动连网或断网来测试,所以写了这部分的单元测试。

3.生成Report
一个打印到Console窗口的类:ConsoleReport.cs
一个记录到Log4Net的日志文件中的类LogFileReport.cs
这两个类继承接口IExport.cs。


4.Log4Net的使用

Log4Net的配置文件

记录日志:

5.支持配置IP地址

作 者:
Jackson0714
出 处:http://www.cnblogs.com/jackson0714/
关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
我的小工具开源一下-PingTest的更多相关文章
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
- 性能测试开源小工具——http_load介绍
淘测试 性能测试开源小工具——http_load介绍 meizhu 发表于:2009-07-02 浏览:3552次 评论:1次 所属分类: 性能测试 性能测试开源小工具——http_load介绍 ht ...
- 开源小工具 酷狗、网易音乐缓存文件转mp3工具
发布一个开源小工具,支持将酷狗和网易云音乐的缓存文件转码为MP3文件. 以前写过kgtemp文件转mp3工具,正好当前又有网易云音乐缓存文件需求,因此就在原来小工具的基础上做了一点修改,增加了对网易云 ...
- 开源一个IE下获取XPath小工具,支持32/64位
背景是曾经友情支持了测试组一小段时间,发现他们使用selenium做页面的自动化测试,需要用到XPath,但IE下没有获取XPath的工具,只能在Firefox和chrome下获取,步骤还比较麻烦.而 ...
- 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码
开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows
- 时间都去哪儿了?开源一个统计iPhone上App运行时间和打开次数的小工具【iOS8已失效】
如今,大家每天都有大量时间花在手机上,但是,大家有没有想过自己的时间都花在哪些App上了呢?相信很多人都有这样的需求,不过iOS系统本身并不能显示每个App的运行时间和次数,因此,本人写了这样一个小工 ...
- 【python】【开源】使用Tkinter和matplotlib实时显示图像,打造属于自己的性能测试小工具
在腾讯的perfdog工具还未公开时,当时需要查看内存使用情况等信息,就用python写了个小工具 为了提升开发效率,就直接借用了雷子开源的性能测试工具的布局,自己美化了一下,然后加入了实时显示数据的 ...
- 访问github太慢?我写了一个开源小工具一键变快
前言 GitHub应该是广大开发者最常去的站点,这里面有大量的优秀项目,是广大开发者寻找资源,交友学习的好地方.尤其是前段时间GitHub公布了一项代码存档计划--Arctic Code Vault, ...
- 开源一个自动整理B站UWP客户端软件进行批量下载的视频文件的小工具BiliVideosReoganizeHelper
大家都知道B站是一个很受欢迎的视频学习网站,上面有很多无私的up主上传了大量优秀的教学视频,在此向B站致敬,向广大UP主致敬. 有时,我们需要下载收藏一些视频,以防止以后找不到了.那么我们可以用B ...
随机推荐
- iOS 程序间跳转传参(支付和地图)
两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...
- 【poj解题】1308
判断一个图是否是一个树,树满足一下2个条件即可:1. 边树比node数少12. 所有node的入度非0即1 节点数是0的时候,空树,合法树~ 代码如下 #include <stdio.h> ...
- centos 7用ss命令来查看端口占用和对应进程
mysqld进程在监听4567端口,进程id是2593:# ss -lnp|grep 4567tcp LISTEN 0 128 *:456 ...
- [Lua]Mac系统上安装Lua环境
1.下载 Lua语言的官方网站 http://www.lua.org/ 下载最新版本的Lua环境 2.安装 解压下载包lua-5.3.1.tar.gz 打开终端Terminal 使用cd命令进入该目录 ...
- CodeForces 622B The Time
水题. #include <stdio.h> #include <algorithm> #include <string.h> #include <queue ...
- mysql 之SQL语句--NSERT SELECT ON DUPLICATE KEY UPDATE的写法
Table source CREATE TABLE `source` ( `key` int(11) NOT NULL AUTO_INCREMENT, `data` int(11) DEFAULT N ...
- transform和transition
作者:zccst 例如:图片墙 .另外还有,便签墙 使用的样式: 1,正常情况下 ul#index_cards li { background: url("../images/ca ...
- MySQL常用命令总结3
id SMALLINT UNSIGNED [AUTO_INCREMENT] PRIMARY KEY, //把id定义为主键且自动排号,每张数据表只有一个主键,不能为NULL,确保记录唯一性 //省略a ...
- [无关IT]就这样在凌晨写一篇吧~
由于新浪博客广告实在太嚣张,自己也都是转载,故决定搬家至此,一改只转不写的习惯T^T,争取记录一下自己的小成长~日后有时间把脑子里的小东西一点点写出来~(好可怕的说)... 好了,睡了!各位爷早睡~ ...
- BZOJ 3101: N皇后
3101: N皇后 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 178 Solved: 94[Submit][ ...