Commit 71ae70b0fb82b309744825d19d633c4f635bc011

Authored by Schwirg László
1 parent 56460ca9

v1.22.3.0

Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs
@@ -305,13 +305,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -305,13 +305,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
305 ColorConsole.Write($", User:"); 305 ColorConsole.Write($", User:");
306 ColorConsole.Write($"{ws.StartName}", ConsoleColor.White); 306 ColorConsole.Write($"{ws.StartName}", ConsoleColor.White);
307 ColorConsole.WriteLine(); 307 ColorConsole.WriteLine();
308 - return ws.DisplayName+ws.Description; 308 + return ws.DisplayName + ws.Description;
309 } 309 }
310 else if (lineix == 1) 310 else if (lineix == 1)
311 { 311 {
312 ColorConsole.Write($"Win service:"); 312 ColorConsole.Write($"Win service:");
313 ColorConsole.Write($"{ws.Name}", ConsoleColor.Cyan); 313 ColorConsole.Write($"{ws.Name}", ConsoleColor.Cyan);
314 - var fc2 = 314 + var fc2 =
315 ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.OK)) ? ConsoleColor.Green 315 ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.OK)) ? ConsoleColor.Green
316 : ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.Unknown)) ? ConsoleColor.Red 316 : ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.Unknown)) ? ConsoleColor.Red
317 : ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.Error)) ? ConsoleColor.Red 317 : ws.Status.Contains(nameof(WindowsService.WmiServiceStatus.Error)) ? ConsoleColor.Red
@@ -323,12 +323,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -323,12 +323,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
323 : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unknown)) ? ConsoleColor.Red 323 : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unknown)) ? ConsoleColor.Red
324 : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unregistered)) ? ConsoleColor.Red 324 : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unregistered)) ? ConsoleColor.Red
325 : ConsoleColor.Yellow; 325 : ConsoleColor.Yellow;
  326 + var wsstatetext =
  327 + ws.State.Contains(nameof(WindowsService.WmiServiceState.Running)) ? ws.State
  328 + : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unknown)) ? ws.State
  329 + : ws.State.Contains(nameof(WindowsService.WmiServiceState.Unregistered)) ? ws.State
  330 + : ws.State;
326 ColorConsole.Write($" / "); 331 ColorConsole.Write($" / ");
327 - ColorConsole.Write($"{ws.State}", fc0); 332 + ColorConsole.Write($"{wsstatetext}", fc0);
328 ColorConsole.Write($")"); 333 ColorConsole.Write($")");
329 - ColorConsole.Write($", StartMode:");  
330 - ColorConsole.Write($"{ws.StartMode}", ConsoleColor.Cyan);  
331 - if(ws.Status==nameof(WindowsService.WmiServiceStatus.OK) && ws.State != nameof(WindowsService.WmiServiceState.Stopped) && ws.State != nameof(WindowsService.WmiServiceState.Unknown)) 334 + if (ws.Status == nameof(WindowsService.WmiServiceStatus.OK) && ws.State != nameof(WindowsService.WmiServiceState.Stopped) && ws.State != nameof(WindowsService.WmiServiceState.Unknown))
332 { 335 {
333 ColorConsole.Write($", Priority:"); 336 ColorConsole.Write($", Priority:");
334 ColorConsole.Write($"{ws.PriorityClass}", ConsoleColor.White); 337 ColorConsole.Write($"{ws.PriorityClass}", ConsoleColor.White);
@@ -340,23 +343,55 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -340,23 +343,55 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
340 } 343 }
341 else if (lineix == 2) 344 else if (lineix == 2)
342 { 345 {
  346 + ColorConsole.Write($"Service StartMode:");
  347 + ColorConsole.Write($"{ws.StartMode}", ConsoleColor.Cyan);
  348 + if (ws.State.Contains(nameof(WindowsService.WmiServiceState.Running)))
  349 + {
  350 + var uptime = (DateTime.Now - ws.ProcessLastStartTime);
  351 + var uptimetext = ""
  352 + + (Math.Truncate(uptime.TotalDays) == 0 ? "" : (string.Format("{0:%d}", uptime) + " days "))
  353 + + (Math.Truncate(uptime.TotalHours) == 0 ? "" : (string.Format("{0:%h}", uptime) + " hours "))
  354 + + (Math.Truncate(uptime.TotalMinutes) == 0 ? "" : (string.Format("{0:%m}", uptime) + " minutes"));
  355 + var uptimecolor = uptime.TotalHours > 72 ? ConsoleColor.Green : uptime.TotalHours > 24 ? ConsoleColor.White : uptime.TotalHours > 12 ? ConsoleColor.Yellow : ConsoleColor.Red;
  356 + ColorConsole.Write($", last started at:");
  357 + ColorConsole.Write($"{ws.ProcessLastStartTime}", uptimecolor);
  358 + ColorConsole.Write($", up time since then:");
  359 + ColorConsole.Write(uptimetext, uptimecolor);
  360 + }
  361 + else if (ws.ProcessLastExitTime.HasValue)
  362 + {
  363 + var downtime = (DateTime.Now - ws.ProcessLastExitTime.Value);
  364 + var downtimetext = ""
  365 + + (Math.Truncate(downtime.TotalDays) == 0 ? "" : (string.Format("{0:%d}", downtime) + " days "))
  366 + + (Math.Truncate(downtime.TotalHours) == 0 ? "" : (string.Format("{0:%h}", downtime) + " hours "))
  367 + + (Math.Truncate(downtime.TotalMinutes) == 0 ? "" : (string.Format("{0:%m}", downtime) + " minutes"));
  368 + ColorConsole.Write($", last exited at:");
  369 + ColorConsole.Write($"{ws.ProcessLastExitTime}", ConsoleColor.Red);
  370 + ColorConsole.Write($", down time since then:");
  371 + ColorConsole.Write(downtimetext, ConsoleColor.Red);
  372 + }
  373 + ColorConsole.WriteLine();
  374 + return " ";
  375 + }
  376 + else if (lineix == 3)
  377 + {
343 if (string.IsNullOrEmpty(ws.PathName)) { return ""; } 378 if (string.IsNullOrEmpty(ws.PathName)) { return ""; }
344 var cmdarray = CommandLineParser.SplitArgs(ws.PathName).ToArray(); 379 var cmdarray = CommandLineParser.SplitArgs(ws.PathName).ToArray();
345 ColorConsole.Write($"Start command:"); 380 ColorConsole.Write($"Start command:");
346 ColorConsole.WriteLine($"{cmdarray[0]}", ConsoleColor.White); 381 ColorConsole.WriteLine($"{cmdarray[0]}", ConsoleColor.White);
347 return ws.PathName; 382 return ws.PathName;
348 } 383 }
349 - else if (lineix == 3) 384 + else if (lineix == 4)
350 { 385 {
351 if (string.IsNullOrEmpty(ws.PathName)) { return ""; } 386 if (string.IsNullOrEmpty(ws.PathName)) { return ""; }
352 var cmdparams = CommandLineParser.SplitArgs(ws.PathName).Skip(1).ToArray(); 387 var cmdparams = CommandLineParser.SplitArgs(ws.PathName).Skip(1).ToArray();
353 - if (cmdparams.Length==0) { return ""; }  
354 - var cmdparamsstr = string.Join("][", cmdparams); 388 + if (cmdparams.Length == 0) { return ""; }
  389 + var cmdparamsstr = "["+string.Join("][", cmdparams)+"]";
355 ColorConsole.Write($"Start arguments:"); 390 ColorConsole.Write($"Start arguments:");
356 - ColorConsole.WriteLine($"[{cmdparamsstr}]", ConsoleColor.White); 391 + ColorConsole.WriteLine(cmdparamsstr, ConsoleColor.White);
357 return cmdparamsstr; 392 return cmdparamsstr;
358 } 393 }
359 - else if (lineix == 4) 394 + else if (lineix == 5)
360 { 395 {
361 ColorConsole.WriteLine(); 396 ColorConsole.WriteLine();
362 return " "; 397 return " ";
@@ -711,6 +746,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -711,6 +746,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
711 746
712 } 747 }
713 #endregion WindowsServiceManagerCore class 748 #endregion WindowsServiceManagerCore class
  749 +
714 #region WindowsServiceManagerXmlProcessor class 750 #region WindowsServiceManagerXmlProcessor class
715 public class WindowsServiceManagerXmlProcessor : XmlParser 751 public class WindowsServiceManagerXmlProcessor : XmlParser
716 { 752 {
@@ -786,6 +822,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -786,6 +822,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
786 public List<string> ThisDependsOn; 822 public List<string> ThisDependsOn;
787 public List<string> ServicesDependOnThis; 823 public List<string> ServicesDependOnThis;
788 public int ProcessId; 824 public int ProcessId;
  825 + public DateTime ProcessLastStartTime;
  826 + public DateTime? ProcessLastExitTime;
789 public ServiceStartMode StartMode; 827 public ServiceStartMode StartMode;
790 public string State; 828 public string State;
791 public string Status; 829 public string Status;
@@ -907,7 +945,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -907,7 +945,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
907 if (this.State != nameof(WmiServiceState.Stopped)) 945 if (this.State != nameof(WmiServiceState.Stopped))
908 { 946 {
909 this.ProcessId = Convert.ToInt32(wmiService[nameof(WindowsService.ProcessId)]); 947 this.ProcessId = Convert.ToInt32(wmiService[nameof(WindowsService.ProcessId)]);
910 - this.PriorityClass = Process.GetProcessById(this.ProcessId).PriorityClass.ToString(); 948 + var thisprocess = Process.GetProcessById(this.ProcessId);
  949 + this.ProcessLastStartTime = thisprocess.StartTime;
  950 + this.ProcessLastExitTime = thisprocess.HasExited?thisprocess.ExitTime:(DateTime?)null;
  951 + this.PriorityClass = thisprocess.PriorityClass.ToString();
911 } 952 }
912 } 953 }
913 } 954 }
Vrh.Log4Pro.MaintenanceConsole/Program.cs
@@ -39,6 +39,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole @@ -39,6 +39,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole
39 { 39 {
40 static void Main(string[] args) 40 static void Main(string[] args)
41 { 41 {
  42 + //TESTS.TimeSpanFormatTest();
42 //TESTS.MSMQTest(); 43 //TESTS.MSMQTest();
43 //return; 44 //return;
44 var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE); 45 var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE);
@@ -94,6 +95,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole @@ -94,6 +95,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole
94 } 95 }
95 public static class TESTS 96 public static class TESTS
96 { 97 {
  98 + public static void TimeSpanFormatTest()
  99 + {
  100 + var uptime = new TimeSpan(3, 4, 15, 33);
  101 + var uptimetext0 = uptime.ToString("%d") + " days ";
  102 + var uptimetext1 = string.Format("{0:%d}", uptime) + " days ";
  103 + var uptimetext2 = string.Format("{0:%h}", uptime) + " hours";
  104 + var uptimetext3 = string.Format("{0:%m}", uptime) + " minutes";
  105 + Console.WriteLine(uptimetext1+uptimetext2+ uptimetext3);
  106 + Console.ReadKey();
  107 + }
97 public static void GetWorkingProcesses() 108 public static void GetWorkingProcesses()
98 { 109 {
99 using (ServerManager manager = new ServerManager()) 110 using (ServerManager manager = new ServerManager())
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.22.2.0")]  
36 -[assembly: AssemblyFileVersion("1.22.2.0")] 35 +[assembly: AssemblyVersion("1.22.3.0")]
  36 +[assembly: AssemblyFileVersion("1.22.3.0")]