Program.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System.Diagnostics;
  2. using Quadarax.Foundation.Core.Logging;
  3. using Quadarax.Foundation.Core.QMonitor;
  4. using Quadarax.Foundation.Core.QMonitor.Emit.TestStructures;
  5. namespace Quadarax.Foundation.Core.QMonitor.Emit // Note: actual namespace depends on the project name.
  6. {
  7. internal class Program
  8. {
  9. private static Random _rnd = new Random();
  10. static void Main(string[] args)
  11. {
  12. System.Console.WriteLine("qmonlib.emit * qmon random activity generator");
  13. System.Console.WriteLine("usage: qmonlib.emit <instance_name> <list_of_data>");
  14. System.Console.WriteLine("arguments:");
  15. System.Console.WriteLine("<instance_name> - mandatory. name of instance that generated data belongs");
  16. System.Console.WriteLine("<list_of_data> - optional. list of data categories to be generated (separated with semicolon). Available values are all (default),service,process,user");
  17. var instanceIdentifier = args.Length > 0 ? args[0] : "test";
  18. using (var qmonClient = new QMonClient(instanceIdentifier, QMonClientConfiuration.CreateDefault(), new ConsoleLogger()))
  19. {
  20. var ctx = new Context
  21. {
  22. Client = qmonClient,
  23. Status = new ServiceStatus(ServiceStatus.StatusEnum.Online, DateTime.Now),
  24. AvailableUsers = CreateAvailableUsers()
  25. };
  26. var servicelist = "all";
  27. if (args.Length == 2)
  28. servicelist = args[1].ToLower();
  29. Timer? tmStatus = null;
  30. Timer? tmProcesses = null;
  31. Timer? tmUsers = null;
  32. if (servicelist.Contains("all") || servicelist.Contains("service"))
  33. tmStatus = new Timer(OnServiceStatusTimer, ctx, TimeSpan.Zero, TimeSpan.FromSeconds(5));
  34. if (servicelist.Contains("all") || servicelist.Contains("process"))
  35. tmProcesses = new Timer(OnProcessesTimer, ctx, TimeSpan.Zero, TimeSpan.FromSeconds(2));
  36. if (servicelist.Contains("all") || servicelist.Contains("user"))
  37. tmUsers = new Timer(OnUsersTimer, ctx, TimeSpan.Zero, TimeSpan.FromSeconds(2));
  38. System.Console.WriteLine("Press any key to stop...");
  39. System.Console.ReadKey();
  40. tmStatus?.Dispose();
  41. tmProcesses?.Dispose();
  42. tmUsers?.Dispose();
  43. System.Console.WriteLine("Stopped.");
  44. }
  45. }
  46. private static void OnUsersTimer(object? state)
  47. {
  48. System.Console.WriteLine("* OnUsersTimer");
  49. if (state == null) return;
  50. var ctx = (Context)state;
  51. foreach (var user in ctx.AvailableUsers)
  52. {
  53. var randomBool = _rnd.Next(2) == 1;
  54. if (randomBool)
  55. ctx.Client.Notify(user);
  56. }
  57. }
  58. private static void OnProcessesTimer(object? state)
  59. {
  60. System.Console.WriteLine("* OnProcessesTimer");
  61. if (state == null) return;
  62. var ctx = (Context)state;
  63. var processes = Process.GetProcesses();
  64. foreach (var process in processes)
  65. {
  66. if (process.Id == 0 || process.Id == 4) continue; // skip system idle process (it's not real process
  67. var ntfProcess = new ProcessItem()
  68. {
  69. Id = process.Id,
  70. Name = process.ProcessName,
  71. Status = process.Responding ? "Running" : "Not Responding",
  72. Path = process.ProcessName + ".exe"
  73. };
  74. ctx.Client.Notify(ntfProcess);
  75. }
  76. }
  77. private static void OnServiceStatusTimer(object? state)
  78. {
  79. System.Console.WriteLine("* OnServiceStatusTimer");
  80. if (state == null) return;
  81. var ctx = (Context)state;
  82. var randomBool = _rnd.Next(2) == 1;
  83. if (randomBool)
  84. {
  85. if (ctx.Status.Status == ServiceStatus.StatusEnum.Offline)
  86. {
  87. ctx.Status.Status = ServiceStatus.StatusEnum.Online;
  88. ctx.Status.Started = DateTime.Now;
  89. }
  90. }
  91. else
  92. {
  93. ctx.Status.Status = ServiceStatus.StatusEnum.Offline;
  94. }
  95. System.Console.WriteLine($"# OnServiceStatusTimer-> status: {ctx.Status.Status}");
  96. ctx.Client.Notify(ctx.Status);
  97. }
  98. public static LoggedUser[] CreateAvailableUsers()
  99. {
  100. return new[]
  101. {
  102. new LoggedUser() { Id = 1, FirstName = "Karel", LastName = "Gott", Login = "karel.gott" },
  103. new LoggedUser() { Id = 2, FirstName = "Vasil", LastName = "Bilak", Login = "vasko32" },
  104. new LoggedUser() { Id = 3, FirstName = "Alois", LastName = "Šoule", Login = "alois.soule" },
  105. new LoggedUser() { Id = 4, FirstName = "Květoslav", LastName = "Pytlík", Login = "kvetak55" },
  106. new LoggedUser() { Id = 5, FirstName = "Jindra", LastName = "Kedlub", Login = "kedlubna" },
  107. new LoggedUser() { Id = 6, FirstName = "Vlasta", LastName = "Henych", Login = "retard" },
  108. new LoggedUser() { Id = 7, FirstName = "Petr", LastName = "Volavka", Login = "petro.vol" },
  109. new LoggedUser() { Id = 8, FirstName = "Jan", LastName = "Prášil", Login = "jenda45" },
  110. new LoggedUser() { Id = 9, FirstName = "Donald", LastName = "Paprika", Login = "spicy.leco" },
  111. new LoggedUser() { Id = 10, FirstName = "Mustafa", LastName = "Novák", Login = "vlastenec48" },
  112. };
  113. }
  114. public class Context
  115. {
  116. public QMonClient Client { get; set; }
  117. public ServiceStatus Status { get; set; }
  118. public LoggedUser[] AvailableUsers { get; set; }
  119. }
  120. }
  121. }