Skip to content

Commit 09bb4b6

Browse files
committed
NetworkTools: Add deviation and variance for ping statistics, Change minimum ping scaling defaults to 200ms
1 parent 1b527be commit 09bb4b6

File tree

5 files changed

+47
-14
lines changed

5 files changed

+47
-14
lines changed

plugins/NetworkTools/NetworkTools.rc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,13 @@ BEGIN
8585
GROUPBOX "Ping statistics",IDC_ICMP_PANEL,7,92,315,52,0,WS_EX_TRANSPARENT
8686
LTEXT "Average: 0ms",IDC_ICMP_AVG,13,104,73,8
8787
LTEXT "Pings sent: 0",IDC_PINGS_SENT,91,104,88,8
88-
LTEXT "Bad replies: 0",IDC_BAD_HASH,187,104,90,8
88+
LTEXT "Bad replies: 0",IDC_BAD_HASH,188,104,90,8
8989
LTEXT "Minimum: 0ms",IDC_ICMP_MIN,13,116,73,8
9090
LTEXT "Pings lost: 0 (0%)",IDC_PINGS_LOST,91,116,88,8
9191
LTEXT "Anon replies: 0",IDC_ANON_ADDR,188,116,87,8
9292
LTEXT "Maximum: 0ms",IDC_ICMP_MAX,13,129,73,8
93+
LTEXT "Deviation: 0.00",IDC_ICMP_STDEV,91,129,73,8
94+
LTEXT "Variance: 0.00",IDC_ICMP_STVAR,188,129,73,8
9395
END
9496

9597
IDD_TRACERT DIALOGEX 0, 0, 389, 212

plugins/NetworkTools/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Main program
44
*
55
* Copyright (C) 2010-2011 wj32
6-
* Copyright (C) 2013-2018 dmex
6+
* Copyright (C) 2013-2021 dmex
77
*
88
* This file is part of Process Hacker.
99
*
@@ -978,7 +978,7 @@ LOGICAL DllMain(
978978
{ StringSettingType, SETTING_NAME_ADDRESS_HISTORY, L"" },
979979
{ IntegerPairSettingType, SETTING_NAME_PING_WINDOW_POSITION, L"0,0" },
980980
{ ScalableIntegerPairSettingType, SETTING_NAME_PING_WINDOW_SIZE, L"@96|420,250" },
981-
{ IntegerSettingType, SETTING_NAME_PING_MINIMUM_SCALING, L"1F4" }, // 500ms minimum scaling
981+
{ IntegerSettingType, SETTING_NAME_PING_MINIMUM_SCALING, L"c8" }, // 200ms minimum scaling
982982
{ IntegerSettingType, SETTING_NAME_PING_SIZE, L"20" }, // 32 byte packet
983983
{ IntegerPairSettingType, SETTING_NAME_TRACERT_WINDOW_POSITION, L"0,0" },
984984
{ ScalableIntegerPairSettingType, SETTING_NAME_TRACERT_WINDOW_SIZE, L"@96|850,490" },

plugins/NetworkTools/ping.c

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Process Hacker Network Tools -
33
* Ping dialog
44
*
5-
* Copyright (C) 2015 dmex
5+
* Copyright (C) 2015-2021 dmex
66
*
77
* This file is part of Process Hacker.
88
*
@@ -21,7 +21,7 @@
2121
*/
2222

2323
#include "nettools.h"
24-
#include <commonutil.h>
24+
#include <math.h>
2525

2626
#define WM_PING_UPDATE (WM_APP + 151)
2727

@@ -42,7 +42,7 @@ NTSTATUS NetworkPingThreadStart(
4242
PPH_STRING icmpRandString = NULL;
4343
IP_OPTION_INFORMATION pingOptions =
4444
{
45-
255, // Time To Live
45+
UCHAR_MAX, // Time To Live
4646
0, // Type Of Service
4747
IP_FLAG_DF, // IP header flags
4848
0 // Size of options data
@@ -253,7 +253,7 @@ VOID NetworkPingUpdateGraph(
253253
)
254254
{
255255
Context->PingGraphState.Valid = FALSE;
256-
Context->PingGraphState.TooltipIndex = -1;
256+
Context->PingGraphState.TooltipIndex = ULONG_MAX;
257257
Graph_MoveGrid(Context->PingGraphHandle, 1);
258258
Graph_Draw(Context->PingGraphHandle);
259259
Graph_UpdateTooltip(Context->PingGraphHandle);
@@ -326,6 +326,8 @@ INT_PTR CALLBACK NetworkPingWndProc(
326326
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_ICMP_MAX), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
327327
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_PINGS_SENT), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
328328
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_PINGS_LOST), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
329+
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_ICMP_STDEV), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
330+
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_ICMP_STVAR), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
329331
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_BAD_HASH), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
330332
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_ANON_ADDR), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
331333
panelItem = PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_PING_LAYOUT), NULL, PH_ANCHOR_ALL);
@@ -401,19 +403,35 @@ INT_PTR CALLBACK NetworkPingWndProc(
401403
break;
402404
case WM_PING_UPDATE:
403405
{
404-
ULONG maxGraphHeight = 0;
405-
ULONG pingAvgValue = 0;
406+
ULONG pingHistoryValue = 0;
407+
ULONG pingSumValue = 0;
408+
DOUBLE pingAvgMeanValue = 0;
409+
DOUBLE pingDeviationValue = 0;
410+
DOUBLE pingVarianceValue = 0;
406411

407-
NetworkPingUpdateGraph(context);
412+
for (ULONG i = 0; i < context->PingHistory.Count; i++)
413+
{
414+
pingSumValue += PhGetItemCircularBuffer_ULONG(&context->PingHistory, i);
415+
}
416+
417+
pingAvgMeanValue = (DOUBLE)pingSumValue / context->PingHistory.Count;
408418

409419
for (ULONG i = 0; i < context->PingHistory.Count; i++)
410420
{
411-
maxGraphHeight = maxGraphHeight + PhGetItemCircularBuffer_ULONG(&context->PingHistory, i);
412-
pingAvgValue = maxGraphHeight / context->PingHistory.Count;
421+
pingHistoryValue = PhGetItemCircularBuffer_ULONG(&context->PingHistory, i);
422+
423+
pingDeviationValue += pow(pingHistoryValue - pingAvgMeanValue, 2);
424+
}
425+
426+
if (context->PingHistory.Count)
427+
{
428+
pingVarianceValue = pingDeviationValue / context->PingHistory.Count;
429+
430+
pingDeviationValue = sqrt(pingVarianceValue);
413431
}
414432

415433
PhSetDialogItemText(hwndDlg, IDC_ICMP_AVG, PhaFormatString(
416-
L"Average: %lums", pingAvgValue)->Buffer);
434+
L"Average: %lums", (ULONG)pingAvgMeanValue)->Buffer);
417435
PhSetDialogItemText(hwndDlg, IDC_ICMP_MIN, PhaFormatString(
418436
L"Minimum: %lums", context->PingMinMs)->Buffer);
419437
PhSetDialogItemText(hwndDlg, IDC_ICMP_MAX, PhaFormatString(
@@ -425,6 +443,11 @@ INT_PTR CALLBACK NetworkPingWndProc(
425443
L"Pings lost: %lu (%.0f%%)", context->PingLossCount,
426444
((DOUBLE)context->PingLossCount / context->PingSentCount * 100))->Buffer);
427445

446+
PhSetDialogItemText(hwndDlg, IDC_ICMP_STDEV, PhaFormatString(
447+
L"Deviation: %.2f", pingDeviationValue)->Buffer);
448+
PhSetDialogItemText(hwndDlg, IDC_ICMP_STVAR, PhaFormatString(
449+
L"Variance: %.2f", pingVarianceValue)->Buffer);
450+
428451
//PhSetDialogItemText(hwndDlg, IDC_BAD_HASH, PhaFormatString(
429452
// L"Bad hashes: %lu", context->HashFailCount)->Buffer);
430453
PhSetDialogItemText(hwndDlg, IDC_ANON_ADDR, PhaFormatString(

plugins/NetworkTools/resource.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@
265265
#define IDC_ICMP_AVG 1015
266266
#define IDC_MAINTEXT 1016
267267
#define IDC_ANON_ADDR 1017
268+
#define IDC_ICMP_STDEV 1018
269+
#define IDC_ICMP_STVAR 1019
268270
#define IDC_PINGS_SENT 1020
269271
#define IDC_PING_LAYOUT 1021
270272
#define IDC_BAD_HASH 1022
@@ -278,7 +280,7 @@
278280
//
279281
#ifdef APSTUDIO_INVOKED
280282
#ifndef APSTUDIO_READONLY_SYMBOLS
281-
#define _APS_NEXT_RESOURCE_VALUE 107
283+
#define _APS_NEXT_RESOURCE_VALUE 108
282284
#define _APS_NEXT_COMMAND_VALUE 40006
283285
#define _APS_NEXT_CONTROL_VALUE 1033
284286
#define _APS_NEXT_SYMED_VALUE 104

plugins/NetworkTools/update.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,12 @@ NTSTATUS GeoIPUpdateDialogThread(
614614
PhDereferenceObject(context);
615615
PhDeleteAutoPool(&autoPool);
616616

617+
if (UpdateDialogThreadHandle)
618+
{
619+
NtClose(UpdateDialogThreadHandle);
620+
UpdateDialogThreadHandle = NULL;
621+
}
622+
617623
PhResetEvent(&InitializedEvent);
618624

619625
return STATUS_SUCCESS;

0 commit comments

Comments
 (0)