Program.cs 5.0 KB

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