MapApiServce.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using EVCB_OCPP.WSServer.Service.WsService;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.AspNetCore.Mvc;
  5. using NLog;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace EVCB_OCPP.WSServer.Service;
  12. public static class MapApiServceExtention
  13. {
  14. public static void MapApiServce(this WebApplication webApplication)
  15. {
  16. var pass = webApplication.Configuration["apipass"];
  17. var helpFunc = () =>
  18. {
  19. return string.Join("\r\n", new[] {
  20. "Command help!!",
  21. "lcn : List Customer Name",
  22. "gc : GC Collect",
  23. "lc : List Clients",
  24. "silent : silent",
  25. "show : show log"
  26. });
  27. };
  28. webApplication.MapGet("/", helpFunc);
  29. webApplication.MapGet("/help", helpFunc);
  30. webApplication.MapPost("/stop", (ProtalServer server) =>
  31. {
  32. server.Stop();
  33. return "Command stop";
  34. }).AddAuthFilter(pass);
  35. webApplication.MapPost("/gc", () =>
  36. {
  37. GC.Collect();
  38. return "Command GC";
  39. }).AddAuthFilter(pass);
  40. webApplication.MapPost("/lc", (ProtalServer server) =>
  41. {
  42. List<string> toReturn = new List<string>() { "Command List Clients" };
  43. Dictionary<string, WsClientData> clientDic = server.GetClientDic();
  44. var list = clientDic.Select(c => c.Value).ToList();
  45. int i = 1;
  46. foreach (var c in list)
  47. {
  48. toReturn.Add(i + ":" + c.ChargeBoxId + " " + c.SessionID);
  49. i++;
  50. }
  51. return string.Join("\r\n", toReturn);
  52. }).AddAuthFilter(pass);
  53. webApplication.MapPost("/lcn", (ProtalServer server) =>
  54. {
  55. List<string> toReturn = new List<string> { "Command List Customer Name" };
  56. Dictionary<string, WsClientData> clientDic = server.GetClientDic();
  57. var lcn = clientDic.Select(c => c.Value.CustomerName).Distinct().ToList();
  58. int iLcn = 1;
  59. foreach (var c in lcn)
  60. {
  61. toReturn.Add(iLcn + ":" + c + ":" + clientDic.Where(z => z.Value.CustomerName == c).Count().ToString());
  62. iLcn++;
  63. }
  64. return string.Join("\r\n", toReturn);
  65. }).AddAuthFilter(pass);
  66. webApplication.MapPost("/silent", () =>
  67. {
  68. foreach (var rule in LogManager.Configuration.LoggingRules)
  69. {
  70. if (rule.RuleName != "ConsoleLog")
  71. {
  72. continue;
  73. }
  74. var isTargetRule = rule.Targets.Any(x => x.Name.ToLower() == "console");
  75. if (isTargetRule)
  76. {
  77. rule.SetLoggingLevels(NLog.LogLevel.Warn, NLog.LogLevel.Off);
  78. }
  79. }
  80. return "Command silent";
  81. }).AddAuthFilter(pass);
  82. webApplication.MapPost("/show", () =>
  83. {
  84. foreach (var rule in LogManager.Configuration.LoggingRules)
  85. {
  86. if (rule.RuleName != "ConsoleLog")
  87. {
  88. continue;
  89. }
  90. var isTargetRule = rule.Targets.Any(x => x.Name.ToLower() == "console");
  91. if (isTargetRule)
  92. {
  93. rule.SetLoggingLevels(NLog.LogLevel.Trace, NLog.LogLevel.Off);
  94. }
  95. }
  96. return "Command show";
  97. }).AddAuthFilter(pass);
  98. webApplication.MapGet("/threads", () =>
  99. {
  100. ThreadPool.GetMaxThreads(out var maxWorkerThread, out var maxCompletionPortThreads);
  101. ThreadPool.GetAvailableThreads(out var avaliableWorkerThread, out var avaliableCompletionPortThreads);
  102. return $"WorkerThread:{avaliableWorkerThread}/{maxWorkerThread} CompletionPortThreads{avaliableCompletionPortThreads}/{maxCompletionPortThreads}";
  103. }).AddAuthFilter(pass);
  104. webApplication.MapPost("/threads", (int min, int max) =>
  105. {
  106. ThreadPool.GetMaxThreads(out var maxWorkerThread, out var maxCompletionPortThreads);
  107. ThreadPool.GetAvailableThreads(out var avaliableWorkerThread, out var avaliableCompletionPortThreads);
  108. ThreadPool.SetMinThreads(min, 0);
  109. ThreadPool.SetMaxThreads(max, maxCompletionPortThreads);
  110. return $"WorkerThread:{avaliableWorkerThread}/{maxWorkerThread} CompletionPortThreads{avaliableCompletionPortThreads}/{maxCompletionPortThreads}";
  111. }).AddAuthFilter(pass);
  112. }
  113. public static void AddAuthFilter(this RouteHandlerBuilder routeHandlerBuilder, string pass)
  114. {
  115. routeHandlerBuilder.AddEndpointFilter(async (context, next) =>
  116. {
  117. string key = context.HttpContext.Request.Headers["key"];
  118. if (!string.IsNullOrEmpty(pass) &&
  119. key != pass)
  120. {
  121. return Results.BadRequest();
  122. }
  123. return await next(context);
  124. });
  125. }
  126. }