Commit bea496aa3383b137cfc434a5dd47f88d6edad80d
1 parent
ca5e6d7e
v1.8.1
- pinger javítgatása
Showing
3 changed files
with
136 additions
and
56 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - TcpIp.cs
| @@ -41,7 +41,31 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -41,7 +41,31 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 41 | this.PingCycleNumberOfPackages = pc.pingcyclenumofpackages; | 41 | this.PingCycleNumberOfPackages = pc.pingcyclenumofpackages; |
| 42 | this.PingerActiveLength = pc.pingeractivlength; | 42 | this.PingerActiveLength = pc.pingeractivlength; |
| 43 | this.Configuration = pc; | 43 | this.Configuration = pc; |
| 44 | + if (pc.RoundTripTimeLimits!=null) | ||
| 45 | + { | ||
| 46 | + Pinger.RoundTripTimeLimits = pc.RoundTripTimeLimits; | ||
| 47 | + Pinger.MaxRoundTripTimeoutCategory = pc.RoundTripTimeLimits.Last(); | ||
| 48 | + Pinger.RoundTripTimeyCategoryLimits = pc.RoundTripTimeyCategoryLimits; | ||
| 49 | + } | ||
| 44 | } | 50 | } |
| 51 | + /// <summary> | ||
| 52 | + /// A maximális ping timeout kategória értéke | ||
| 53 | + /// </summary> | ||
| 54 | + public static int MaxRoundTripTimeoutCategory = 5000; | ||
| 55 | + | ||
| 56 | + /// <summary> | ||
| 57 | + /// A FINOM válaszidő kategóriákat tartalmazza; egy válasz az i. válaszidő kategóriába tartozik, ha a pontos válaszidő nagyobb, vagy egyenlő, | ||
| 58 | + /// mint az i. elem értéke, de kisebb, mint az i+1. elem értéke.A sor első elemének értéke mindig 0!!!! | ||
| 59 | + /// Ha a sor értékei: 0:0,1:100,2:200,3:300,4:400,5:500, a pontos válaszidő 350, akkor ez a 2. kategóriába tartozik, ha pontos válaszidő. | ||
| 60 | + /// </summary> | ||
| 61 | + public static List<int> RoundTripTimeLimits = new List<int> { 0, 25, 50, 75, 100, 150, 200, 250, 300, 400, 500, 750, 1000, 1250, 1500, 1750, 2000, 2500, 3000, 3500, 4000, 4500, Pinger.MaxRoundTripTimeoutCategory, }; | ||
| 62 | + | ||
| 63 | + /// <summary> | ||
| 64 | + /// A DURVA válaszidő kategóriákat tartalmazza; egy válasz az i. válaszidő kategóriába tartozik, ha a pontos válaszidő nagyobb, vagy egyenlő, | ||
| 65 | + /// mint az i. elem értéke, de kisebb, mint az i+1. elem értéke.A sor első elemének értéke mindig 0!!!! | ||
| 66 | + /// Ha a sor értékei: 0:0,1:100,2:200,3:300,4:400,5:500, a pontos válaszidő 350, akkor ez a 2. kategóriába tartozik, ha pontos válaszidő. | ||
| 67 | + /// </summary> | ||
| 68 | + public static List<int> RoundTripTimeyCategoryLimits = new List<int> { 0, 50, 250, 750, }; | ||
| 45 | 69 | ||
| 46 | /// <summary> | 70 | /// <summary> |
| 47 | /// A pinger indítása/újraindítása; elindítja a ping ciklus időzítőt, és elkezdi/folytatja a ping státusz adatok letárolását | 71 | /// A pinger indítása/újraindítása; elindítja a ping ciklus időzítőt, és elkezdi/folytatja a ping státusz adatok letárolását |
| @@ -88,6 +112,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -88,6 +112,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 88 | this.PingCycleNumberOfPackages = pc.pingcyclenumofpackages; | 112 | this.PingCycleNumberOfPackages = pc.pingcyclenumofpackages; |
| 89 | this.PingerActiveLength = pc.pingeractivlength; | 113 | this.PingerActiveLength = pc.pingeractivlength; |
| 90 | this.History.SetHistoryLength(pc.pingerhistorylength); | 114 | this.History.SetHistoryLength(pc.pingerhistorylength); |
| 115 | + if (pc.RoundTripTimeLimits != null) | ||
| 116 | + { | ||
| 117 | + Pinger.RoundTripTimeLimits = pc.RoundTripTimeLimits; | ||
| 118 | + Pinger.MaxRoundTripTimeoutCategory = pc.RoundTripTimeLimits.Last(); | ||
| 119 | + Pinger.RoundTripTimeyCategoryLimits = pc.RoundTripTimeyCategoryLimits; | ||
| 120 | + } | ||
| 91 | } | 121 | } |
| 92 | } | 122 | } |
| 93 | } | 123 | } |
| @@ -234,12 +264,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -234,12 +264,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 234 | { | 264 | { |
| 235 | if (pingerconfig != null) | 265 | if (pingerconfig != null) |
| 236 | { | 266 | { |
| 237 | - var _pingtimeout = GetPositiveIntFromXml(PINGTIMEOUT, pingerconfig, DEFAULT_PINGTIMEOUT); | ||
| 238 | - var _pingcyclefrequency = GetPositiveIntFromXml(PINGCYCLEFREQUENCY, pingerconfig, 0); | ||
| 239 | - var _pingcyclenumofpackages = GetPositiveIntFromXml(PINGCYCLENUMOFPACKAGES, pingerconfig, DEFAULT_PINGCYCLENUMOFPACKAGES); | ||
| 240 | - var _pingeractivlength = GetPositiveIntFromXml(PINGERACTIVELENGTHTOSTOPPERIOD, pingerconfig, DEFAULT_PINGERACTIVELENGTH); | ||
| 241 | - var _pingerhistorylength = GetPositiveIntFromXml(PINGERHISTORYLENGTH, pingerconfig, DEFAULT_PINGERHISTORYLENGTH); | ||
| 242 | - SetValues(_pingtimeout, _pingcyclefrequency, _pingcyclenumofpackages, _pingeractivlength, _pingerhistorylength); | 267 | + var _pingtimeout = GetPositiveIntFromXml(PINGTIMEOUT, pingerconfig); |
| 268 | + var _pingcyclefrequency = GetPositiveIntFromXml(PINGCYCLEFREQUENCY, pingerconfig); | ||
| 269 | + var _pingcyclenumofpackages = GetPositiveIntFromXml(PINGCYCLENUMOFPACKAGES, pingerconfig); | ||
| 270 | + var _pingerlifetime = GetPositiveIntFromXml(PINGERACTIVELENGTHTOSTOPPERIOD, pingerconfig); | ||
| 271 | + var _pingerhistorylength = GetPositiveIntFromXml(PINGERHISTORYLENGTH, pingerconfig); | ||
| 272 | + var _roundtriptimelimits = pingerconfig.Element(ROUNDTRIPTIMELIMITS)?.Value; | ||
| 273 | + var _roundtriptimecategorylimits = pingerconfig.Element(ROUNDTRIPTIMECATEGORYLIMITS)?.Value; | ||
| 274 | + SetValues(_pingtimeout, _pingcyclefrequency, _pingcyclenumofpackages, _pingerlifetime, _pingerhistorylength, _roundtriptimelimits, _roundtriptimecategorylimits); | ||
| 243 | } | 275 | } |
| 244 | else { SetValues(); } | 276 | else { SetValues(); } |
| 245 | } | 277 | } |
| @@ -252,9 +284,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -252,9 +284,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 252 | /// <param name="pingcyclenumofpackages">pcs</param> | 284 | /// <param name="pingcyclenumofpackages">pcs</param> |
| 253 | /// <param name="pingeractivelength">minutes</param> | 285 | /// <param name="pingeractivelength">minutes</param> |
| 254 | /// <param name="pingerhistorylength">minutes</param> | 286 | /// <param name="pingerhistorylength">minutes</param> |
| 255 | - public PingerConfig(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0) | 287 | + public PingerConfig(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0,string rttlimits=null, string rttcatlimits=null) |
| 256 | { | 288 | { |
| 257 | - SetValues(pingtimeout, pingcyclefrequency, pingcyclenumofpackages, pingeractivelength, pingerhistorylength); | 289 | + SetValues(pingtimeout, pingcyclefrequency, pingcyclenumofpackages, pingeractivelength, pingerhistorylength, rttlimits , rttcatlimits); |
| 258 | } | 290 | } |
| 259 | 291 | ||
| 260 | /// <summary> | 292 | /// <summary> |
| @@ -265,15 +297,40 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -265,15 +297,40 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 265 | /// <param name="pingcyclenumofpackages">pcs</param> | 297 | /// <param name="pingcyclenumofpackages">pcs</param> |
| 266 | /// <param name="pingeractivelength">minutes</param> | 298 | /// <param name="pingeractivelength">minutes</param> |
| 267 | /// <param name="pingerhistorylength">minutes</param> | 299 | /// <param name="pingerhistorylength">minutes</param> |
| 268 | - private void SetValues(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0) | 300 | + private void SetValues(int pingtimeout = 0, int pingcyclefrequency = 0, int pingcyclenumofpackages = 0, int pingeractivelength = 0, int pingerhistorylength = 0, string rttlimits = null, string rttcatlimits = null) |
| 269 | { | 301 | { |
| 270 | - this.pingtimeout = pingtimeout <= 0 ? PingerConfig.DEFAULT_PINGTIMEOUT : pingtimeout; | ||
| 271 | - this.pingcyclefrequency = pingcyclefrequency * 1000; | ||
| 272 | - if (this.pingcyclefrequency < this.pingtimeout) { this.pingcyclefrequency = this.pingtimeout; } | ||
| 273 | this.pingcyclenumofpackages = pingcyclenumofpackages <= 0 ? PingerConfig.DEFAULT_PINGCYCLENUMOFPACKAGES : pingcyclenumofpackages; | 302 | this.pingcyclenumofpackages = pingcyclenumofpackages <= 0 ? PingerConfig.DEFAULT_PINGCYCLENUMOFPACKAGES : pingcyclenumofpackages; |
| 274 | this.pingeractivlength = (pingeractivelength <= 0 ? PingerConfig.DEFAULT_PINGERACTIVELENGTH : pingeractivelength) * 60 * 1000; | 303 | this.pingeractivlength = (pingeractivelength <= 0 ? PingerConfig.DEFAULT_PINGERACTIVELENGTH : pingeractivelength) * 60 * 1000; |
| 275 | this.pingerhistorylength = (pingerhistorylength <= 0 ? PingerConfig.DEFAULT_PINGERHISTORYLENGTH : pingerhistorylength) * 60 * 1000; | 304 | this.pingerhistorylength = (pingerhistorylength <= 0 ? PingerConfig.DEFAULT_PINGERHISTORYLENGTH : pingerhistorylength) * 60 * 1000; |
| 305 | + | ||
| 306 | + try | ||
| 307 | + { | ||
| 308 | + // ha a megadott sor nem ok, akkor nem változtat a default-on | ||
| 309 | + List<int> rttl = rttlimits.Split(new char[] { ' ', ',', ';', '/', }, StringSplitOptions.RemoveEmptyEntries).ToList().Select(x => int.Parse(x)).ToList(); | ||
| 310 | + if (rttl.Count <4) { throw new Exception(); } | ||
| 311 | + if (rttl.ElementAt(0) != 0) { throw new Exception(); } | ||
| 312 | + int lastelementvalue = -1; | ||
| 313 | + for(var i=0;i<rttl.Count;i++) { if (rttl.ElementAt(i) <= lastelementvalue) { throw new Exception(); } lastelementvalue=rttl.ElementAt(i); } | ||
| 314 | + | ||
| 315 | + List<int> rttcl = rttcatlimits.Split(new char[] { ' ', ',', ';', '/', }, StringSplitOptions.RemoveEmptyEntries).ToList().Select(x => int.Parse(x)).ToList(); | ||
| 316 | + if (rttcl.Count != 4) { throw new Exception(); } | ||
| 317 | + if (rttcl.ElementAt(0) != 0) { throw new Exception(); } | ||
| 318 | + lastelementvalue = -1; | ||
| 319 | + for (var i = 0; i < rttcl.Count; i++) { if (rttcl.ElementAt(i) <= lastelementvalue) { throw new Exception(); } lastelementvalue = rttcl.ElementAt(i); } | ||
| 320 | + | ||
| 321 | + this.RoundTripTimeLimits = rttl; | ||
| 322 | + this.RoundTripTimeyCategoryLimits = rttcl; | ||
| 323 | + } | ||
| 324 | + catch | ||
| 325 | + { | ||
| 326 | + this.RoundTripTimeLimits = Pinger.RoundTripTimeLimits; | ||
| 327 | + this.RoundTripTimeyCategoryLimits = Pinger.RoundTripTimeyCategoryLimits; | ||
| 328 | + } | ||
| 329 | + this.pingtimeout = pingtimeout <= 0 ? rttlimits.Last() : pingtimeout; | ||
| 330 | + this.pingcyclefrequency = pingcyclefrequency * 1000; | ||
| 331 | + if (this.pingcyclefrequency < this.pingtimeout) { this.pingcyclefrequency = this.pingtimeout; } | ||
| 276 | } | 332 | } |
| 333 | + | ||
| 277 | /// <summary> | 334 | /// <summary> |
| 278 | /// Egy int értéket kiemel a megadott xml struktúrából, ha nincs ott a keresett érték, | 335 | /// Egy int értéket kiemel a megadott xml struktúrából, ha nincs ott a keresett érték, |
| 279 | /// vagy nem integer, vagy nem pozitív, akkor az alapértelmezést adja vissza | 336 | /// vagy nem integer, vagy nem pozitív, akkor az alapértelmezést adja vissza |
| @@ -282,7 +339,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -282,7 +339,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 282 | /// <param name="pingerconfig">az xml struktúra</param> | 339 | /// <param name="pingerconfig">az xml struktúra</param> |
| 283 | /// <param name="defaultvalue">az alapértelmezett érték</param> | 340 | /// <param name="defaultvalue">az alapértelmezett érték</param> |
| 284 | /// <returns></returns> | 341 | /// <returns></returns> |
| 285 | - private static int GetPositiveIntFromXml(string xname, XElement pingerconfig, int defaultvalue) | 342 | + private static int GetPositiveIntFromXml(string xname, XElement pingerconfig, int defaultvalue=0) |
| 286 | { | 343 | { |
| 287 | string valstr = pingerconfig?.Element(XName.Get(xname))?.Value; | 344 | string valstr = pingerconfig?.Element(XName.Get(xname))?.Value; |
| 288 | int val = defaultvalue; | 345 | int val = defaultvalue; |
| @@ -290,6 +347,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -290,6 +347,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 290 | return val; | 347 | return val; |
| 291 | } | 348 | } |
| 292 | 349 | ||
| 350 | + public List<int> RoundTripTimeLimits=null; | ||
| 351 | + public List<int> RoundTripTimeyCategoryLimits=null; | ||
| 293 | public int pingtimeout; | 352 | public int pingtimeout; |
| 294 | public int pingcyclefrequency; | 353 | public int pingcyclefrequency; |
| 295 | public int pingcyclenumofpackages; | 354 | public int pingcyclenumofpackages; |
| @@ -301,7 +360,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -301,7 +360,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 301 | const string PINGCYCLENUMOFPACKAGES = "PingCycleNumOfPackages"; | 360 | const string PINGCYCLENUMOFPACKAGES = "PingCycleNumOfPackages"; |
| 302 | const string PINGERACTIVELENGTHTOSTOPPERIOD = "PingerActiveLength"; | 361 | const string PINGERACTIVELENGTHTOSTOPPERIOD = "PingerActiveLength"; |
| 303 | const string PINGERHISTORYLENGTH = "PingerHistoryLength"; | 362 | const string PINGERHISTORYLENGTH = "PingerHistoryLength"; |
| 304 | - public const int DEFAULT_PINGTIMEOUT = PingCycle.MAXROUNDTRIPTIMEOUTCATEGORY; | 363 | + const string ROUNDTRIPTIMELIMITS = "RoundTripTimeLimits"; |
| 364 | + const string ROUNDTRIPTIMECATEGORYLIMITS = "RoundTripCategoryLimits"; | ||
| 365 | + public const int DEFAULT_PINGTIMEOUT = 0; | ||
| 305 | public const int DEFAULT_PINGCYCLENUMOFPACKAGES = 4; | 366 | public const int DEFAULT_PINGCYCLENUMOFPACKAGES = 4; |
| 306 | public const int DEFAULT_PINGERACTIVELENGTH = 60; | 367 | public const int DEFAULT_PINGERACTIVELENGTH = 60; |
| 307 | public const int DEFAULT_PINGERHISTORYLENGTH = 60; | 368 | public const int DEFAULT_PINGERHISTORYLENGTH = 60; |
| @@ -380,6 +441,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -380,6 +441,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 380 | this.LastPingCycle.RoundtripTimeAverage = totalrtt / this.LastPingCycle.NumberOfCycles; | 441 | this.LastPingCycle.RoundtripTimeAverage = totalrtt / this.LastPingCycle.NumberOfCycles; |
| 381 | this.LastPingCycle.PackagesSent += newpc.PackagesSent; | 442 | this.LastPingCycle.PackagesSent += newpc.PackagesSent; |
| 382 | this.LastPingCycle.PackagesLost += newpc.PackagesLost; | 443 | this.LastPingCycle.PackagesLost += newpc.PackagesLost; |
| 444 | + this.LastPingCycle.PackagesSentCategory = this.LastPingCycle.GetLostPackageCategory(); | ||
| 383 | this.LastPingCycle.LastTimestamp = newpc.StartTimestamp; | 445 | this.LastPingCycle.LastTimestamp = newpc.StartTimestamp; |
| 384 | if (newpc.RoundtripTimeMax != -1 && this.LastPingCycle.RoundtripTimeMax != -1) | 446 | if (newpc.RoundtripTimeMax != -1 && this.LastPingCycle.RoundtripTimeMax != -1) |
| 385 | { | 447 | { |
| @@ -400,12 +462,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -400,12 +462,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 400 | firstelement.NumberOfCycles = (int)((double)firstelement.NumberOfCycles * partiallength / fulllength); | 462 | firstelement.NumberOfCycles = (int)((double)firstelement.NumberOfCycles * partiallength / fulllength); |
| 401 | if (firstelement.NumberOfCycles == 0 || firstelement.PackagesSent == 0) { this.PingStateQueue.Remove(firstelement); firstelement = this.PingStateQueue.FirstOrDefault(); } | 463 | if (firstelement.NumberOfCycles == 0 || firstelement.PackagesSent == 0) { this.PingStateQueue.Remove(firstelement); firstelement = this.PingStateQueue.FirstOrDefault(); } |
| 402 | 464 | ||
| 403 | - var packagelostratio = firstelement.PackagesLost / firstelement.PackagesSent; | ||
| 404 | - firstelement.PackagesSentCategory = | ||
| 405 | - packagelostratio == 0 ? PingCycle.LostPackageCategory.Excellent | ||
| 406 | - : packagelostratio < 0.1 ? PingCycle.LostPackageCategory.Good | ||
| 407 | - : packagelostratio < 0.3 ? PingCycle.LostPackageCategory.Acceptable | ||
| 408 | - : PingCycle.LostPackageCategory.Bad; | 465 | + firstelement.PackagesSentCategory = firstelement.GetLostPackageCategory(); |
| 409 | firstelement.StartTimestamp = borderts; | 466 | firstelement.StartTimestamp = borderts; |
| 410 | } | 467 | } |
| 411 | StartTime = firstelement?.StartTimestamp ?? DateTime.MaxValue; | 468 | StartTime = firstelement?.StartTimestamp ?? DateTime.MaxValue; |
| @@ -457,17 +514,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -457,17 +514,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 457 | this.PackagesSentCategory = pc.PackagesSentCategory; | 514 | this.PackagesSentCategory = pc.PackagesSentCategory; |
| 458 | this.NumberOfCycles = pc.NumberOfCycles; | 515 | this.NumberOfCycles = pc.NumberOfCycles; |
| 459 | this.StatusCategory = pc.StatusCategory; | 516 | this.StatusCategory = pc.StatusCategory; |
| 517 | + this.RoundtripTime = pc.RoundtripTime; | ||
| 460 | this.RoundtripTimeAverage = pc.RoundtripTimeAverage; | 518 | this.RoundtripTimeAverage = pc.RoundtripTimeAverage; |
| 461 | this.RoundtripTimeMax = pc.RoundtripTimeMax; | 519 | this.RoundtripTimeMax = pc.RoundtripTimeMax; |
| 462 | this.RoundtripTimeMin= pc.RoundtripTimeMin; | 520 | this.RoundtripTimeMin= pc.RoundtripTimeMin; |
| 521 | + this.RoundtripTimeCategory = pc.RoundtripTimeCategory; | ||
| 463 | } | 522 | } |
| 464 | 523 | ||
| 465 | #region public fields,enums | 524 | #region public fields,enums |
| 466 | /// <summary> | 525 | /// <summary> |
| 467 | - /// A maximális ping timeout kategória értéke | ||
| 468 | - /// </summary> | ||
| 469 | - public const int MAXROUNDTRIPTIMEOUTCATEGORY = 5000; | ||
| 470 | - /// <summary> | ||
| 471 | /// A Ping állapot ezen időpillanattól kezdődően állt/áll fenn | 526 | /// A Ping állapot ezen időpillanattól kezdődően állt/áll fenn |
| 472 | /// </summary> | 527 | /// </summary> |
| 473 | public DateTime StartTimestamp; | 528 | public DateTime StartTimestamp; |
| @@ -553,15 +608,19 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -553,15 +608,19 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 553 | { | 608 | { |
| 554 | this.StartTimestamp = DateTime.Now; | 609 | this.StartTimestamp = DateTime.Now; |
| 555 | this.LastTimestamp = this.StartTimestamp; | 610 | this.LastTimestamp = this.StartTimestamp; |
| 611 | + PingReply pr; | ||
| 556 | for (var i = 0; i < this.PackagesSent; i++) | 612 | for (var i = 0; i < this.PackagesSent; i++) |
| 557 | { | 613 | { |
| 558 | - var pr = PingTool.Ping(this.HostNameOrAddress, (int)PingTimeout);//egy ping kérés feladása | 614 | + pr = null; |
| 615 | + try { pr = PingTool.Ping(this.HostNameOrAddress, (int)PingTimeout); }//egy ping kérés feladása | ||
| 616 | + catch { } | ||
| 559 | AddResponse(pr, i + 1);//a ping válasz "bedolgozása" a pingciklus-állapotba | 617 | AddResponse(pr, i + 1);//a ping válasz "bedolgozása" a pingciklus-állapotba |
| 560 | } | 618 | } |
| 561 | - | ||
| 562 | - this.RoundtripTime = RoundTripTimeLimits.LastOrDefault(x => x <= this.RoundtripTimeAverage); | ||
| 563 | - var RoundTripTimeyCategoryValue = RoundTripTimeyCategoryLimits.LastOrDefault(x => x < this.RoundtripTimeAverage); | ||
| 564 | - var RoundTripTimeyCategoryIndex = RoundTripTimeyCategoryLimits.FindIndex(x => x == RoundTripTimeyCategoryValue); | 619 | + |
| 620 | + this.PackagesSentCategory = GetLostPackageCategory(); | ||
| 621 | + this.RoundtripTime = Pinger.RoundTripTimeLimits.LastOrDefault(x => x <= this.RoundtripTimeAverage); | ||
| 622 | + var RoundTripTimeyCategoryValue = Pinger.RoundTripTimeyCategoryLimits.LastOrDefault(x => x < this.RoundtripTimeAverage); | ||
| 623 | + var RoundTripTimeyCategoryIndex = Pinger.RoundTripTimeyCategoryLimits.FindIndex(x => x == RoundTripTimeyCategoryValue); | ||
| 565 | this.RoundtripTimeCategory = RoundTripTimeyCategoryIndex == 0 ? RoundTripTimeCategory.Q1 | 624 | this.RoundtripTimeCategory = RoundTripTimeyCategoryIndex == 0 ? RoundTripTimeCategory.Q1 |
| 566 | : RoundTripTimeyCategoryIndex == 1 ? RoundTripTimeCategory.Q2 | 625 | : RoundTripTimeyCategoryIndex == 1 ? RoundTripTimeCategory.Q2 |
| 567 | : RoundTripTimeyCategoryIndex == 2 ? RoundTripTimeCategory.Q3 | 626 | : RoundTripTimeyCategoryIndex == 2 ? RoundTripTimeCategory.Q3 |
| @@ -576,19 +635,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -576,19 +635,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 576 | /// </summary> | 635 | /// </summary> |
| 577 | private string HostNameOrAddress; | 636 | private string HostNameOrAddress; |
| 578 | /// <summary> | 637 | /// <summary> |
| 579 | - /// A FINOM válaszidő kategóriákat tartalmazza; egy válasz az i. válaszidő kategóriába tartozik, ha a pontos válaszidő nagyobb, vagy egyenlő, | ||
| 580 | - /// mint az i. elem értéke, de kisebb, mint az i+1. elem értéke.A sor első elemének értéke mindig 0!!!! | ||
| 581 | - /// Ha a sor értékei: 0:0,1:100,2:200,3:300,4:400,5:500, a pontos válaszidő 350, akkor ez a 2. kategóriába tartozik, ha pontos válaszidő. | ||
| 582 | - /// </summary> | ||
| 583 | - private static List<int> RoundTripTimeLimits = new List<int> { 0, 25, 50, 75, 100, 150, 200, 250, 300, 400, 500, 750, 1000, 1250, 1500, 1750, 2000, 2500, 3000, 3500, 4000, 4500, PingCycle.MAXROUNDTRIPTIMEOUTCATEGORY, }; | ||
| 584 | - | ||
| 585 | - /// <summary> | ||
| 586 | - /// A DURVA válaszidő kategóriákat tartalmazza; egy válasz az i. válaszidő kategóriába tartozik, ha a pontos válaszidő nagyobb, vagy egyenlő, | ||
| 587 | - /// mint az i. elem értéke, de kisebb, mint az i+1. elem értéke.A sor első elemének értéke mindig 0!!!! | ||
| 588 | - /// Ha a sor értékei: 0:0,1:100,2:200,3:300,4:400,5:500, a pontos válaszidő 350, akkor ez a 2. kategóriába tartozik, ha pontos válaszidő. | ||
| 589 | - /// </summary> | ||
| 590 | - private static List<int> RoundTripTimeyCategoryLimits = new List<int> { 0, 50, 250, 750, }; | ||
| 591 | - /// <summary> | ||
| 592 | /// Az egyes ping kérések timeout-ja | 638 | /// Az egyes ping kérések timeout-ja |
| 593 | /// </summary> | 639 | /// </summary> |
| 594 | private int PingTimeout; | 640 | private int PingTimeout; |
| @@ -610,13 +656,30 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -610,13 +656,30 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
| 610 | else { this.PackagesLost++; } | 656 | else { this.PackagesLost++; } |
| 611 | if (ipsCat < this.StatusCategory) { this.StatusCategory = ipsCat; }// a legjobb státuszt tárolja | 657 | if (ipsCat < this.StatusCategory) { this.StatusCategory = ipsCat; }// a legjobb státuszt tárolja |
| 612 | } | 658 | } |
| 659 | + | ||
| 660 | + /// <summary> | ||
| 661 | + /// Visszaadja az elveszett és összes csomagok száma alapján a lostpackagecategory értéket | ||
| 662 | + /// </summary> | ||
| 663 | + /// <param name="packageslost">az elveszett csomagok száma</param> | ||
| 664 | + /// <param name="packagessent">az összes csomagok száma</param> | ||
| 665 | + /// <returns></returns> | ||
| 666 | + public LostPackageCategory GetLostPackageCategory() | ||
| 667 | + { | ||
| 668 | + double packagelostratio = (double)this.PackagesLost / (double)this.PackagesSent; | ||
| 669 | + return packagelostratio == 0 ? PingCycle.LostPackageCategory.Excellent | ||
| 670 | + : packagelostratio < 0.1 ? PingCycle.LostPackageCategory.Good | ||
| 671 | + : packagelostratio < 0.3 ? PingCycle.LostPackageCategory.Acceptable | ||
| 672 | + : PingCycle.LostPackageCategory.Bad; | ||
| 673 | + } | ||
| 613 | /// <summary> | 674 | /// <summary> |
| 614 | /// Visszaadja, hogy a PingReply adat alapján a válasz melyik státusz kategóriába tartozik | 675 | /// Visszaadja, hogy a PingReply adat alapján a válasz melyik státusz kategóriába tartozik |
| 615 | /// </summary> | 676 | /// </summary> |
| 616 | /// <param name="pr"></param> | 677 | /// <param name="pr"></param> |
| 617 | /// <returns></returns> | 678 | /// <returns></returns> |
| 618 | - private IPStatusCategory GetIPStatusCategory(PingReply pr) | 679 | + private static IPStatusCategory GetIPStatusCategory(PingReply pr) |
| 619 | { | 680 | { |
| 681 | + //if (new Random().Next(0, 9) < 3) { return IPStatusCategory.Failed; } | ||
| 682 | + if (pr == null) { return IPStatusCategory.Failed; } | ||
| 620 | switch (pr.Status) | 683 | switch (pr.Status) |
| 621 | { | 684 | { |
| 622 | case IPStatus.Success: return IPStatusCategory.Success;//Success = 0,The ICMP echo request succeeded; an ICMP echo reply was received. When you get this status code, the other System.Net.NetworkInformation.PingReply properties contain valid data. | 685 | case IPStatus.Success: return IPStatusCategory.Success;//Success = 0,The ICMP echo request succeeded; an ICMP echo reply was received. When you get this status code, the other System.Net.NetworkInformation.PingReply properties contain valid data. |
Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs
| @@ -109,11 +109,11 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -109,11 +109,11 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 109 | var config = (parameter as Menu.ExecutorParameter).GetConfig<MaintenanceToolsXmlProcessor>(); | 109 | var config = (parameter as Menu.ExecutorParameter).GetConfig<MaintenanceToolsXmlProcessor>(); |
| 110 | var pingerconfigxml = config.PingerConfigXml; | 110 | var pingerconfigxml = config.PingerConfigXml; |
| 111 | var iplist = config.PingerIpAddressList; | 111 | var iplist = config.PingerIpAddressList; |
| 112 | - DisplayPingerParameters(pingerconfigxml); | ||
| 113 | var firstrun = true; | 112 | var firstrun = true; |
| 114 | var suppresserroneousipaddresses = false; | 113 | var suppresserroneousipaddresses = false; |
| 115 | while (true) | 114 | while (true) |
| 116 | { | 115 | { |
| 116 | + DisplayPingerParameters(pingerconfigxml); | ||
| 117 | DisplayAllPingerStatus(pingerconfigxml,iplist, suppresserroneousipaddresses); | 117 | DisplayAllPingerStatus(pingerconfigxml,iplist, suppresserroneousipaddresses); |
| 118 | suppresserroneousipaddresses = true; | 118 | suppresserroneousipaddresses = true; |
| 119 | if (!firstrun) { DisplayPingerCommands(); } | 119 | if (!firstrun) { DisplayPingerCommands(); } |
| @@ -162,15 +162,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -162,15 +162,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 162 | 162 | ||
| 163 | private static void DisplayPingerCommands() | 163 | private static void DisplayPingerCommands() |
| 164 | { | 164 | { |
| 165 | - ColorConsole.WriteLine($"Enter 'START [ip address]' to start/restart pinging.", ConsoleColor.Yellow); | ||
| 166 | - ColorConsole.WriteLine($"Enter 'STOP [ip address]' to stop pinging.", ConsoleColor.Yellow); | ||
| 167 | - ColorConsole.WriteLine($"Enter 'DROP [ip address]' to drop collected data.", ConsoleColor.Yellow); | ||
| 168 | - ColorConsole.WriteLine($"Enter 'SHOW [ip address]' to start monitoring .", ConsoleColor.Yellow); | 165 | + ColorConsole.WriteLine(); |
| 166 | + ColorConsole.WriteLine($"Pinger commands:", ConsoleColor.Yellow); | ||
| 167 | + ColorConsole.WriteLine($"START", ConsoleColor.Yellow,prefix:" ",suffix: " [ip address] to start/restart pinging.",bracket:"[]"); | ||
| 168 | + ColorConsole.WriteLine($"STOP", ConsoleColor.Yellow, prefix: " ", suffix: " [ip address] to stop pinging.", bracket: "[]"); | ||
| 169 | + ColorConsole.WriteLine($"DROP", ConsoleColor.Yellow, prefix: " ", suffix: " [ip address] to drop collected data.", bracket: "[]"); | ||
| 170 | + ColorConsole.WriteLine($"SHOW", ConsoleColor.Yellow, prefix: " ", suffix: " [ip address] to start monitoring.", bracket: "[]"); | ||
| 169 | ColorConsole.WriteLine($"Set [ip address] to 'ALL' or '*' for action to all ip addresses.", ConsoleColor.Yellow); | 171 | ColorConsole.WriteLine($"Set [ip address] to 'ALL' or '*' for action to all ip addresses.", ConsoleColor.Yellow); |
| 170 | } | 172 | } |
| 171 | 173 | ||
| 172 | private static void DisplayPingerParameters(XElement pingerconfigxml) | 174 | private static void DisplayPingerParameters(XElement pingerconfigxml) |
| 173 | { | 175 | { |
| 176 | + ColorConsole.Clear(); | ||
| 177 | + var pingertitle = "IP Pinger"; | ||
| 178 | + ColorConsole.WriteLine(ColorConsole.WideString(pingertitle), ConsoleColor.Yellow); | ||
| 179 | + ColorConsole.WriteLine(new string('-', 2*pingertitle.Length), ConsoleColor.Yellow); | ||
| 180 | + ColorConsole.WriteLine(); | ||
| 174 | ColorConsole.WriteLine($"Pinger configuration parameters:", ConsoleColor.Yellow); | 181 | ColorConsole.WriteLine($"Pinger configuration parameters:", ConsoleColor.Yellow); |
| 175 | var pconfig = new Pinger("127.0.0.1", pingerconfigxml).Configuration; | 182 | var pconfig = new Pinger("127.0.0.1", pingerconfigxml).Configuration; |
| 176 | ColorConsole.WriteLine(pconfig.pingtimeout.ToString(), ConsoleColor.Yellow, prefix: " pingtimeout :", suffix: "ms"); | 183 | ColorConsole.WriteLine(pconfig.pingtimeout.ToString(), ConsoleColor.Yellow, prefix: " pingtimeout :", suffix: "ms"); |
| @@ -178,11 +185,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -178,11 +185,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 178 | ColorConsole.WriteLine((pconfig.pingcyclefrequency / 1000).ToString(), ConsoleColor.Yellow, prefix: " cycle frequency:", suffix: "sec"); | 185 | ColorConsole.WriteLine((pconfig.pingcyclefrequency / 1000).ToString(), ConsoleColor.Yellow, prefix: " cycle frequency:", suffix: "sec"); |
| 179 | ColorConsole.WriteLine((pconfig.pingeractivlength / 60000).ToString(), ConsoleColor.Yellow, prefix: " pinger liftime :", suffix: "min"); | 186 | ColorConsole.WriteLine((pconfig.pingeractivlength / 60000).ToString(), ConsoleColor.Yellow, prefix: " pinger liftime :", suffix: "min"); |
| 180 | ColorConsole.WriteLine((pconfig.pingerhistorylength / 60000).ToString(), ConsoleColor.Yellow, prefix: " history length :", suffix: "min"); | 187 | ColorConsole.WriteLine((pconfig.pingerhistorylength / 60000).ToString(), ConsoleColor.Yellow, prefix: " history length :", suffix: "min"); |
| 181 | - ColorConsole.WriteLine($"Pinger status for the following addresses:", ConsoleColor.Yellow); | 188 | + var rttlstring = (string.Join(",", pconfig.RoundTripTimeLimits)).ToString(); |
| 189 | + ColorConsole.WriteLine(rttlstring.Substring(0, rttlstring.Length>20?20: rttlstring.Length) + (rttlstring.Length > 20 ? "..." : ""), ConsoleColor.Yellow, prefix: " roundtrip time limit values :", suffix: "ms"); | ||
| 190 | + ColorConsole.WriteLine((string.Join(",", pconfig.RoundTripTimeyCategoryLimits)).ToString(), ConsoleColor.Yellow, prefix: " roundtrip time category limit values:", suffix: "ms"); | ||
| 182 | } | 191 | } |
| 183 | private static void DisplayPingerHistory(List<Pinger> selectedpingers) | 192 | private static void DisplayPingerHistory(List<Pinger> selectedpingers) |
| 184 | { | 193 | { |
| 185 | ColorConsole.WriteLine(); | 194 | ColorConsole.WriteLine(); |
| 195 | + ColorConsole.WriteLine($"Pinger History:", ConsoleColor.Yellow); | ||
| 186 | var cursorleftposition = ColorConsole.CursorLeft; | 196 | var cursorleftposition = ColorConsole.CursorLeft; |
| 187 | var cursortopposition = ColorConsole.CursorTop; | 197 | var cursortopposition = ColorConsole.CursorTop; |
| 188 | while (true) | 198 | while (true) |
| @@ -202,8 +212,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -202,8 +212,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 202 | { | 212 | { |
| 203 | var _h = pinger.GetHistory(); | 213 | var _h = pinger.GetHistory(); |
| 204 | if (_h == null) { return 0; } | 214 | if (_h == null) { return 0; } |
| 205 | - var h = new Pinger.PingHistory(pinger.GetHistory());//klónozzuk, mert egyébként ha az adatgyűjtés miatt megváltozik akkor exception-re fut a foreach | ||
| 206 | - ColorConsole.Write(pinger.HostNameOrAddress, ConsoleColor.Yellow, suffix: ": "); | 215 | + 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 |
| 216 | + ColorConsole.Write(pinger.HostNameOrAddress, ConsoleColor.Yellow, suffix: ": ",prefix:" "); | ||
| 207 | var pingerstatus = pinger.Operating ? "pinging" : "still"; | 217 | var pingerstatus = pinger.Operating ? "pinging" : "still"; |
| 208 | var pingerstatuscolor = pinger.Operating ? ConsoleColor.Green : ConsoleColor.Yellow; | 218 | var pingerstatuscolor = pinger.Operating ? ConsoleColor.Green : ConsoleColor.Yellow; |
| 209 | ColorConsole.Write(pingerstatus.PadRight(10), pingerstatuscolor); | 219 | ColorConsole.Write(pingerstatus.PadRight(10), pingerstatuscolor); |
| @@ -212,7 +222,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -212,7 +222,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 212 | if (lc != null) | 222 | if (lc != null) |
| 213 | { | 223 | { |
| 214 | var responseinfo = lc.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success ? $"{lc.StatusCategory}" : $"RT:{lc.RoundtripTime} [{lc.RoundtripTimeMin}<{lc.RoundtripTimeAverage}<{lc.RoundtripTimeMax}]ms, LP:{lc.PackagesSentCategory}"; | 224 | var responseinfo = lc.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success ? $"{lc.StatusCategory}" : $"RT:{lc.RoundtripTime} [{lc.RoundtripTimeMin}<{lc.RoundtripTimeAverage}<{lc.RoundtripTimeMax}]ms, LP:{lc.PackagesSentCategory}"; |
| 215 | - responseinfo=responseinfo.PadRight(35)+" "; | 225 | + responseinfo=responseinfo.PadRight(40)+" "; |
| 216 | ColorConsole.Write(responseinfo, GetPingCycleDisplayColor(lc)); | 226 | ColorConsole.Write(responseinfo, GetPingCycleDisplayColor(lc)); |
| 217 | 227 | ||
| 218 | foreach (var he in h.PingStateQueue) | 228 | foreach (var he in h.PingStateQueue) |
| @@ -227,7 +237,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -227,7 +237,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 227 | ColorConsole.WriteLine(); | 237 | ColorConsole.WriteLine(); |
| 228 | return h.PingCycleFrequency; | 238 | return h.PingCycleFrequency; |
| 229 | } | 239 | } |
| 230 | - private static string GetPingCycleDisplayCharacter(Pinger.PingCycle he) { return he.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success ? "9" : he.RoundtripTimeCategory.ToString().Substring(1); } | 240 | + private static string GetPingCycleDisplayCharacter(Pinger.PingCycle he) |
| 241 | + { | ||
| 242 | + return he.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success | ||
| 243 | + ? "9" | ||
| 244 | + : he.RoundtripTimeCategory.ToString().Substring(1); | ||
| 245 | + } | ||
| 231 | private static ConsoleColor GetPingCycleDisplayColor(Pinger.PingCycle pingcycle) | 246 | private static ConsoleColor GetPingCycleDisplayColor(Pinger.PingCycle pingcycle) |
| 232 | { | 247 | { |
| 233 | return pingcycle.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success ? ConsoleColor.Red | 248 | return pingcycle.StatusCategory != Pinger.PingCycle.IPStatusCategory.Success ? ConsoleColor.Red |
| @@ -239,13 +254,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | @@ -239,13 +254,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS | ||
| 239 | } | 254 | } |
| 240 | private static void DisplayAllPingerStatus(XElement pingerconfigxml,List<MaintenanceToolsXmlProcessor.IPAddressParsingResult> iplist, bool suppresserroneousipaddresses=false) | 255 | private static void DisplayAllPingerStatus(XElement pingerconfigxml,List<MaintenanceToolsXmlProcessor.IPAddressParsingResult> iplist, bool suppresserroneousipaddresses=false) |
| 241 | { | 256 | { |
| 257 | + ColorConsole.WriteLine(); | ||
| 258 | + ColorConsole.WriteLine($"Pinger status for the following addresses:", ConsoleColor.Yellow); | ||
| 242 | foreach (var ip in iplist) { DisplayOnePingerStatus(ip, pingerconfigxml, suppresserroneousipaddresses); } | 259 | foreach (var ip in iplist) { DisplayOnePingerStatus(ip, pingerconfigxml, suppresserroneousipaddresses); } |
| 243 | } | 260 | } |
| 244 | private static void DisplayOnePingerStatus(MaintenanceToolsXmlProcessor.IPAddressParsingResult ip, XElement pingerconfigxml,bool suppresserroneousipaddresses = false) | 261 | private static void DisplayOnePingerStatus(MaintenanceToolsXmlProcessor.IPAddressParsingResult ip, XElement pingerconfigxml,bool suppresserroneousipaddresses = false) |
| 245 | { | 262 | { |
| 246 | if (ip.GoodIP) | 263 | if (ip.GoodIP) |
| 247 | { | 264 | { |
| 248 | - ColorConsole.Write($"{ip.IP}", ConsoleColor.Green); | 265 | + ColorConsole.Write($"{ip.IP}", ConsoleColor.Green,prefix:" "); |
| 249 | 266 | ||
| 250 | var pingerlist = PingerList.Select(x => x.HostNameOrAddress).ToList(); | 267 | var pingerlist = PingerList.Select(x => x.HostNameOrAddress).ToList(); |
| 251 | Pinger pinger; | 268 | Pinger pinger; |
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
| @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | ||
| 32 | // You can specify all the values or you can default the Build and Revision Numbers | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
| 33 | // by using the '*' as shown below: | 33 | // by using the '*' as shown below: |
| 34 | // [assembly: AssemblyVersion("1.0.*")] | 34 | // [assembly: AssemblyVersion("1.0.*")] |
| 35 | -[assembly: AssemblyVersion("1.8.0.0")] | ||
| 36 | -[assembly: AssemblyFileVersion("1.8.0.0")] | 35 | +[assembly: AssemblyVersion("1.8.1.0")] |
| 36 | +[assembly: AssemblyFileVersion("1.8.1.0")] |