Commit 71ae70b0fb82b309744825d19d633c4f635bc011
1 parent
56460ca9
v1.22.3.0
Showing
3 changed files
with
66 additions
and
14 deletions
Show diff stats
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")] |