From 7e23fb052f26383c53c09370d6298d0c77510107 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Tue, 21 Sep 2021 16:59:53 +0200 Subject: [PATCH] Pinger javítgatása --- Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs | 34 ++++++++++++++++++++++++++++++++++ Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs | 34 ++++++++++++++++++++++++---------- Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs | 13 ++++++------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 4 files changed, 66 insertions(+), 19 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs index cd9f695..ac3db91 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs @@ -93,6 +93,40 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS } /// + /// Törli az aktuális sort (szóközökkel) a pillanatnyi pozíciótól a megadott szélességben + /// + /// ha 0, akkor a sor végéig + public static void ClearLine(int width=0,char fillchar=' ') + { + int currentLineCursor = Console.CursorTop; + int currentColCursor = Console.CursorLeft; + if (width == 0) { width = Console.WindowWidth - currentColCursor; } + Console.SetCursorPosition(currentColCursor, Console.CursorTop); + Console.Write(new string(fillchar, width)); + Console.SetCursorPosition(currentColCursor, currentLineCursor); + } + + + /// + /// Törli (szóközökkel) a megadott szélességű és magasságú területet a megadott cursor pozíciótól véve + /// + /// ha 0, akkor az ablak aljáig + /// ha 0, akkor a sorok végéig + public static void ClearArea(int width=0, int height=0, char fillchar = ' ') + { + int currentLineCursor = Console.CursorTop; + int currentColCursor = Console.CursorLeft; + if (height == 0) { height = Console.WindowHeight; } + for (var i=0;i /// Beolvas egy sort a consolról, vagy commandmode-ban a bufferból /// /// diff --git a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs index 4830e59..cf0a2de 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs @@ -35,7 +35,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS private Pinger(string hostNameOrAddress, PingerConfig pc) { this.HostNameOrAddress = hostNameOrAddress; - this.History = new PingHistory(hostNameOrAddress, pc.pingerhistorylength, pc.pingcyclefrequency); + this.History = new PingHistory(hostNameOrAddress, pc); this.PingTimeout = pc.pingtimeout; this.PingCycleFrequency = pc.pingcyclefrequency; this.PingCycleNumberOfPackages = pc.pingcyclenumofpackages; @@ -269,9 +269,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS var _pingcyclenumofpackages = GetPositiveIntFromXml(PINGCYCLENUMOFPACKAGES, pingerconfig); var _pingerlifetime = GetPositiveIntFromXml(PINGERACTIVELENGTHTOSTOPPERIOD, pingerconfig); var _pingerhistorylength = GetPositiveIntFromXml(PINGERHISTORYLENGTH, pingerconfig); + var _optimizehistorylength = pingerconfig.Element(OPTIMIZEHISTORYLENGTH)?.Value; ; var _roundtriptimelimits = pingerconfig.Element(ROUNDTRIPTIMELIMITS)?.Value; var _roundtriptimecategorylimits = pingerconfig.Element(ROUNDTRIPTIMECATEGORYLIMITS)?.Value; - SetValues(_pingtimeout, _pingcyclefrequency, _pingcyclenumofpackages, _pingerlifetime, _pingerhistorylength, _roundtriptimelimits, _roundtriptimecategorylimits); + SetValues(_pingtimeout, _pingcyclefrequency, _pingcyclenumofpackages, _pingerlifetime, _pingerhistorylength, _roundtriptimelimits, _roundtriptimecategorylimits,_optimizehistorylength); } else { SetValues(); } } @@ -284,9 +285,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS /// pcs /// minutes /// minutes - public PingerConfig(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0,string rttlimits=null, string rttcatlimits=null) + public PingerConfig(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0,string rttlimits=null, string rttcatlimits=null,string optimizehlength=null) { - SetValues(pingtimeout, pingcyclefrequency, pingcyclenumofpackages, pingeractivelength, pingerhistorylength, rttlimits , rttcatlimits); + SetValues(pingtimeout, pingcyclefrequency, pingcyclenumofpackages, pingeractivelength, pingerhistorylength, rttlimits , rttcatlimits, optimizehlength); } /// @@ -297,11 +298,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS /// pcs /// minutes /// minutes - private void SetValues(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0, string rttlimits = null, string rttcatlimits = null) + private void SetValues(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0, string rttlimits = null, string rttcatlimits = null,string optimizehlength=null) { this.pingcyclenumofpackages = pingcyclenumofpackages <= 0 ? PingerConfig.DEFAULT_PINGCYCLENUMOFPACKAGES : pingcyclenumofpackages; this.pingeractivlength = (pingeractivelength <= 0 ? PingerConfig.DEFAULT_PINGERACTIVELENGTH : pingeractivelength) * 60 * 1000; this.pingerhistorylength = (pingerhistorylength <= 0 ? PingerConfig.DEFAULT_PINGERHISTORYLENGTH : pingerhistorylength) * 60 * 1000; + bool optimizehlengthbool=true; + if (optimizehlength != null) { optimizehlengthbool = bool.TryParse(optimizehlength.ToLower(), out optimizehlengthbool) ? optimizehlengthbool : true; } + this.optimizehistorylength = optimizehlengthbool; try { @@ -354,12 +358,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS public int pingcyclenumofpackages; public int pingeractivlength; public int pingerhistorylength; + public bool optimizehistorylength; const string PINGTIMEOUT = "PingTimeout"; const string PINGCYCLEFREQUENCY = "PingCycleFrequency"; const string PINGCYCLENUMOFPACKAGES = "PingCycleNumOfPackages"; const string PINGERACTIVELENGTHTOSTOPPERIOD = "PingerActiveLength"; const string PINGERHISTORYLENGTH = "PingerHistoryLength"; + const string OPTIMIZEHISTORYLENGTH = "OptimizeHistoryLength"; const string ROUNDTRIPTIMELIMITS = "RoundTripTimeLimits"; const string ROUNDTRIPTIMECATEGORYLIMITS = "RoundTripCategoryLimits"; public const int DEFAULT_PINGTIMEOUT = 0; @@ -397,19 +403,25 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS /// public int PingCycleFrequency; + /// + /// Az érvényes configuráció + /// + public PingerConfig PingerConfig; + public string HostNameOrAddress; public PingerStatus PingerState = PingerStatus.Still; public DateTime StartTime; private object historylocker = new object(); - public PingHistory(string hostnameoraddress, int pingerhistorylength,int pingcyclefrequency) + public PingHistory(string hostnameoraddress, PingerConfig pingerconfig) { this.HostNameOrAddress = hostnameoraddress; this.PingStateQueue = new List(); this.LastPingCycle = null; - this.Length = pingerhistorylength; - this.PingCycleFrequency = pingcyclefrequency; + this.Length = pingerconfig.pingerhistorylength; + this.PingCycleFrequency = pingerconfig.pingcyclefrequency; + this.PingerConfig = pingerconfig; } public PingHistory(PingHistory ph) { @@ -418,6 +430,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS this.LastPingCycle = ph.LastPingCycle; this.Length = ph.Length; this.PingCycleFrequency = ph.PingCycleFrequency; + this.PingerConfig = ph.PingerConfig; } public void Dispose() @@ -433,7 +446,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS { lock (historylocker) { - if (this.LastPingCycle?.isDifferent(newpc) ?? true) { this.PingStateQueue.Add(newpc); this.LastPingCycle = newpc; } + if (!this.PingerConfig.optimizehistorylength || (this.LastPingCycle?.isDifferent(newpc) ?? true)) { this.PingStateQueue.Add(newpc); this.LastPingCycle = newpc; } else { var totalrtt = ((this.LastPingCycle.RoundtripTimeAverage * this.LastPingCycle.NumberOfCycles) + newpc.RoundtripTimeAverage); @@ -590,7 +603,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS /// public bool isDifferent(PingCycle pc) { - return this.StatusCategory != pc.StatusCategory || this.RoundtripTime != pc.RoundtripTime; + return this.StatusCategory != pc.StatusCategory + || this.RoundtripTime != pc.RoundtripTime; } #endregion isDifferent diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs index 10491f7..03484e0 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs @@ -191,6 +191,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS ColorConsole.WriteLine((pconfig.pingcyclefrequency / 1000).ToString(), ConsoleColor.Yellow, prefix: " cycle frequency:", suffix: "sec"); ColorConsole.WriteLine((pconfig.pingeractivlength / 60000).ToString(), ConsoleColor.Yellow, prefix: " pinger liftime :", suffix: "min"); ColorConsole.WriteLine((pconfig.pingerhistorylength / 60000).ToString(), ConsoleColor.Yellow, prefix: " history length :", suffix: "min"); + ColorConsole.WriteLine((pconfig.optimizehistorylength).ToString(), ConsoleColor.Yellow, prefix: " optimize history length :", suffix: ""); var rttlstring = (string.Join(",", pconfig.RoundTripTimeLimits)).ToString(); ColorConsole.WriteLine(rttlstring.Substring(0, rttlstring.Length>20?20: rttlstring.Length) + (rttlstring.Length > 20 ? "..." : ""), ConsoleColor.Yellow, prefix: " roundtrip time limit values :", suffix: "ms"); ColorConsole.WriteLine((string.Join(",", pconfig.RoundTripTimeyCategoryLimits)).ToString(), ConsoleColor.Yellow, prefix: " roundtrip time category limit values:", suffix: "ms"); @@ -198,13 +199,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS private static void DisplayPingerHistory(List selectedpingers,int firstrow,int cc) { if (selectedpingers == null || !selectedpingers.Any()) { return; } - var lastrow = ColorConsole.CursorTop; - ColorConsole.SetCursorPosition(cc,firstrow); - for (var i= 0; i< lastrow - firstrow;i++) { ColorConsole.WriteLine(new string(' ',100)); } ColorConsole.SetCursorPosition(cc, firstrow); - ColorConsole.WriteLine(); - ColorConsole.WriteLine($"Pinger History:", ConsoleColor.Yellow); + ColorConsole.ClearLine();ColorConsole.WriteLine(); + ColorConsole.ClearLine();ColorConsole.WriteLine($"Pinger History:", ConsoleColor.Yellow); var cursorleftposition = ColorConsole.CursorLeft; var cursortopposition = ColorConsole.CursorTop; while (true) @@ -215,8 +213,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS foreach (var pinger in selectedpingers) { pingcyclefrequency=DisplayOnePingerHistory(pinger); if (ColorConsole.KeyAvailable) { goto finishdisplayhistory; };} var elapsed = DateTime.Now.Subtract(monitorcyclestart).TotalMilliseconds; if (elapsed < pingcyclefrequency) { Thread.Sleep((int)((double)pingcyclefrequency - elapsed)); } - ColorConsole.WriteLine(); - ColorConsole.WriteLine($"Press any key to exit from monitoring...", ConsoleColor.Yellow); + ColorConsole.ClearLine(); ColorConsole.WriteLine(); + ColorConsole.ClearLine(); ColorConsole.WriteLine($"Press any key to exit from monitoring...", ConsoleColor.Yellow); } finishdisplayhistory:; } @@ -225,6 +223,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS var _h = pinger.GetHistory(); if (_h == null) { return 0; } var h = new Pinger.PingHistory(_h);//klónozzuk, mert egyébként ha az adatgyűjtés miatt megváltozik akkor exception-re fut a foreach + ColorConsole.ClearLine(); ColorConsole.Write(pinger.HostNameOrAddress, ConsoleColor.Yellow, suffix: ": ",prefix:" "); var pingerstatus = pinger.Operating ? "pinging" : "still"; var pingerstatuscolor = pinger.Operating ? ConsoleColor.Green : ConsoleColor.Yellow; diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index bd747b3..203ef90 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.8.2.0")] -[assembly: AssemblyFileVersion("1.8.2.0")] +[assembly: AssemblyVersion("1.8.3.0")] +[assembly: AssemblyFileVersion("1.8.3.0")] -- libgit2 0.21.2