我的小工具开源一下-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 ...
随机推荐
- Django之路: 基本命令与网址进阶
一.Django 基本命令 温馨提示:如果你想学习Django,那么就请您从现在开始按照笔记记录一步一步的用手把代码敲出来,千万不要偷懒哦..... 1.创建一个Django project djan ...
- 读取excel数据 到 datagrid 出现 找不到可安装的ISAM
读取excel数据 到 datagrid 出现:找不到可安装的ISAM 错误: 实在没有办法了 就仔细的查看了 一下数据链接字符串: string strConn = "Prov ...
- JAVA基础--正则表达式
. any character \d A digit 0-9 \D a non-digit [^0-9] \s a whitespace character, 空白字符 \S a non-w ...
- hibernate---关联关系的 crud_cascade_fetch
CRUD怎么写?? 存user信息, 自动存group信息 user.java package com.bjsxt.hibernate; import javax.persistence.Cascad ...
- Identifying Dialogue Act Type
Natural Language Processing with Python Chapter 6.2 import nltk from nltk.corpus import nps_chat as ...
- EM 期望最大化算法
(EM算法)The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了. ...
- python web开发基本概念
参考了廖雪峰的Python博客. web请求顺序: 浏览器发送一个http请求 服务器收到请求后,生成一个html文档. 服务器将html文档作为http相应的body发送给浏览器 浏览器收到http ...
- width这样读取出来是一个字符串,并且带有单位,但是offsetwidth返回的是一个数值。
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title> ...
- CABasicAnimation 基本动画 分类: ios技术 2015-07-16 17:10 132人阅读 评论(0) 收藏
几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...
- js格式化时间戳
//js格式化时间戳,转换为时间格式 2017-1-15 4:10:15 function getLocalTime(nS) { var time = new Date(parseInt(nS) * ...