Commit bea496aa3383b137cfc434a5dd47f88d6edad80d

Authored by Schwirg László
1 parent ca5e6d7e

v1.8.1

- pinger javítgatása
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")]