MapApiServce.cs 4.9 KB

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