From 86115a1fa22bc986aac280b9560e56b0a3694a20 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 3 Feb 2021 17:19:40 -0500 Subject: [PATCH] Inital implementation --- Pinger.sln | 25 +++++++++++++++++++ Pinger/Dataset.cs | 50 +++++++++++++++++++++++++++++++++++++ Pinger/Pinger.csproj | 22 ++++++++++++++++ Pinger/PingerAppContext.cs | 43 +++++++++++++++++++++++++++++++ Pinger/PingerCore.cs | 35 ++++++++++++++++++++++++++ Pinger/Program.cs | 23 +++++++++++++++++ Pinger/Record.cs | 10 ++++++++ Pinger/Settings.cs | 32 ++++++++++++++++++++++++ Pinger/icon.ico | Bin 0 -> 106740 bytes 9 files changed, 240 insertions(+) create mode 100644 Pinger.sln create mode 100644 Pinger/Dataset.cs create mode 100644 Pinger/Pinger.csproj create mode 100644 Pinger/PingerAppContext.cs create mode 100644 Pinger/PingerCore.cs create mode 100644 Pinger/Program.cs create mode 100644 Pinger/Record.cs create mode 100644 Pinger/Settings.cs create mode 100644 Pinger/icon.ico diff --git a/Pinger.sln b/Pinger.sln new file mode 100644 index 0000000..9d5a431 --- /dev/null +++ b/Pinger.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30717.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pinger", "Pinger\Pinger.csproj", "{D316826F-4850-4869-9071-CCEF16AD94C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D316826F-4850-4869-9071-CCEF16AD94C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D316826F-4850-4869-9071-CCEF16AD94C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D316826F-4850-4869-9071-CCEF16AD94C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D316826F-4850-4869-9071-CCEF16AD94C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5D73A650-C364-4DDD-B93B-55D0003D4048} + EndGlobalSection +EndGlobal diff --git a/Pinger/Dataset.cs b/Pinger/Dataset.cs new file mode 100644 index 0000000..7bdfda2 --- /dev/null +++ b/Pinger/Dataset.cs @@ -0,0 +1,50 @@ +using CsvHelper; +using CsvHelper.Configuration; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; + +namespace Pinger +{ + public class Dataset + { + public static readonly string FileName = Environment.CurrentDirectory + @"\pings.csv"; + + public static IEnumerable Read() + { + using (var reader = new StreamReader(FileName)) + using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) + { + return csv.GetRecords(); + } + } + + public static void Write(Record record) + { + var config = new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = false, + }; + using (var stream = File.Open(FileName, FileMode.Append)) + using (var writer = new StreamWriter(stream)) + using (var csv = new CsvWriter(writer, config)) + { + csv.WriteRecord(record); + } + } + + public static void Init() + { + if (File.Exists(FileName)) + return; + + using (var writer = new StreamWriter(FileName)) + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + csv.WriteHeader(); + csv.NextRecord(); + } + } + } +} diff --git a/Pinger/Pinger.csproj b/Pinger/Pinger.csproj new file mode 100644 index 0000000..dd26878 --- /dev/null +++ b/Pinger/Pinger.csproj @@ -0,0 +1,22 @@ + + + + WinExe + netcoreapp3.1 + true + + + + + + + + + Always + + + Always + + + + \ No newline at end of file diff --git a/Pinger/PingerAppContext.cs b/Pinger/PingerAppContext.cs new file mode 100644 index 0000000..4fb728b --- /dev/null +++ b/Pinger/PingerAppContext.cs @@ -0,0 +1,43 @@ +using System.ComponentModel; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Pinger +{ + public class PingerAppContext : ApplicationContext + { + private NotifyIcon trayIcon; + private Container components = new Container(); + + public PingerAppContext() + { + var contextMenu = new ContextMenuStrip(); + + var menuItemExit = new ToolStripMenuItem("Exit", null, (sender, e) => + { + trayIcon.Visible = false; + Application.Exit(); + }); + + var menuItemSettings = new ToolStripMenuItem("Settings", null, (sender, e) => + { + Process.Start(Settings.FileName); + }); + + var menuItemViewData = new ToolStripMenuItem("View data", null, (sender, e) => + { + Process.Start(Dataset.FileName); + }); + + contextMenu.Items.AddRange(new[] { menuItemViewData, menuItemSettings, menuItemExit }); + + trayIcon = new NotifyIcon(components) + { + ContextMenuStrip = contextMenu, + Icon = new System.Drawing.Icon("icon.ico"), + Text = "Pinger is collecting data!", + Visible = true + }; + } + } +} diff --git a/Pinger/PingerCore.cs b/Pinger/PingerCore.cs new file mode 100644 index 0000000..44f5935 --- /dev/null +++ b/Pinger/PingerCore.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.NetworkInformation; +using System.Threading; + +namespace Pinger +{ + class PingerCore + { + public void Collect() + { + Dataset.Init(); + Settings.Init(); + + var settings = Settings.Read(); + + var pinger = new Ping(); + Record record; + + while (true) + { + record = new Record + { + RoundtripTime = pinger.Send(settings.host).RoundtripTime, + Timestamp = DateTime.Now + }; + + Dataset.Write(record); + + Thread.Sleep(settings.frequencyInSec * 1000); + } + } + } +} diff --git a/Pinger/Program.cs b/Pinger/Program.cs new file mode 100644 index 0000000..88f8a3a --- /dev/null +++ b/Pinger/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Pinger +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Task.Run(() => new PingerCore().Collect()); + + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new PingerAppContext()); + } + } +} diff --git a/Pinger/Record.cs b/Pinger/Record.cs new file mode 100644 index 0000000..9078206 --- /dev/null +++ b/Pinger/Record.cs @@ -0,0 +1,10 @@ +using System; + +namespace Pinger +{ + public class Record + { + public long RoundtripTime { get; set; } + public DateTime Timestamp { get; set; } + } +} diff --git a/Pinger/Settings.cs b/Pinger/Settings.cs new file mode 100644 index 0000000..35d9673 --- /dev/null +++ b/Pinger/Settings.cs @@ -0,0 +1,32 @@ +using System; +using System.IO; +using System.Text.Json; + +namespace Pinger +{ + public class Settings + { + public static readonly string FileName = Environment.CurrentDirectory + @"\settings.json"; + + public string host { get; set; } = "www.google.ca"; + public int frequencyInSec { get; set; } = 3; + + public static Settings Read() + { + return JsonSerializer.Deserialize(File.ReadAllText(FileName)); + } + + public static void Write(Settings settings) + { + File.WriteAllText(FileName, JsonSerializer.Serialize(settings)); + } + + public static void Init() + { + if (File.Exists(FileName)) + return; + + Write(new Settings()); + } + } +} \ No newline at end of file diff --git a/Pinger/icon.ico b/Pinger/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..664cb2afa97b8dc20a6383ef7f4956b8cab38265 GIT binary patch literal 106740 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 CKgJCJ literal 0 HcmV?d00001