123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using EVCB_OCPP.WSServer.Service.WsService;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using NLog;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace EVCB_OCPP.WSServer.Service;
- public static class MapApiServceExtention
- {
- public static void MapApiServce(this WebApplication webApplication)
- {
- var pass = webApplication.Configuration["apipass"];
- var helpFunc = () =>
- {
- return string.Join("\r\n", new[] {
- "Command help!!",
- "lcn : List Customer Name",
- "gc : GC Collect",
- "lc : List Clients",
- "silent : silent",
- "show : show log"
- });
- };
- webApplication.MapGet("/", helpFunc);
- webApplication.MapGet("/help", helpFunc);
- webApplication.MapPost("/stop", (ProtalServer server) =>
- {
- server.Stop();
- return "Command stop";
- }).AddAuthFilter(pass);
- webApplication.MapPost("/gc", () =>
- {
- GC.Collect();
- return "Command GC";
- }).AddAuthFilter(pass);
- webApplication.MapPost("/lc", (ProtalServer server) =>
- {
- List<string> toReturn = new List<string>() { "Command List Clients" };
- Dictionary<string, WsClientData> clientDic = server.GetClientDic();
- var list = clientDic.Select(c => c.Value).ToList();
- int i = 1;
- foreach (var c in list)
- {
- toReturn.Add(i + ":" + c.ChargeBoxId + " " + c.SessionID);
- i++;
- }
- return string.Join("\r\n", toReturn);
- }).AddAuthFilter(pass);
- webApplication.MapPost("/lcn", (ProtalServer server) =>
- {
- List<string> toReturn = new List<string> { "Command List Customer Name" };
- Dictionary<string, WsClientData> clientDic = server.GetClientDic();
- var lcn = clientDic.Select(c => c.Value.CustomerName).Distinct().ToList();
- int iLcn = 1;
- foreach (var c in lcn)
- {
- toReturn.Add(iLcn + ":" + c + ":" + clientDic.Where(z => z.Value.CustomerName == c).Count().ToString());
- iLcn++;
- }
- return string.Join("\r\n", toReturn);
- }).AddAuthFilter(pass);
- webApplication.MapPost("/silent", () =>
- {
- foreach (var rule in LogManager.Configuration.LoggingRules)
- {
- if (rule.RuleName != "ConsoleLog")
- {
- continue;
- }
- var isTargetRule = rule.Targets.Any(x => x.Name.ToLower() == "console");
- if (isTargetRule)
- {
- rule.SetLoggingLevels(NLog.LogLevel.Warn, NLog.LogLevel.Off);
- }
- }
- return "Command silent";
- }).AddAuthFilter(pass);
- webApplication.MapPost("/show", () =>
- {
- foreach (var rule in LogManager.Configuration.LoggingRules)
- {
- if (rule.RuleName != "ConsoleLog")
- {
- continue;
- }
- var isTargetRule = rule.Targets.Any(x => x.Name.ToLower() == "console");
- if (isTargetRule)
- {
- rule.SetLoggingLevels(NLog.LogLevel.Trace, NLog.LogLevel.Off);
- }
- }
- return "Command show";
- }).AddAuthFilter(pass);
- webApplication.MapGet("/threads", () =>
- {
- ThreadPool.GetMaxThreads(out var maxWorkerThread, out var maxCompletionPortThreads);
- ThreadPool.GetAvailableThreads(out var avaliableWorkerThread, out var avaliableCompletionPortThreads);
- return $"WorkerThread:{avaliableWorkerThread}/{maxWorkerThread} CompletionPortThreads{avaliableCompletionPortThreads}/{maxCompletionPortThreads}";
- }).AddAuthFilter(pass);
- webApplication.MapPost("/threads", (int min, int max) =>
- {
- ThreadPool.GetMaxThreads(out var maxWorkerThread, out var maxCompletionPortThreads);
- ThreadPool.GetAvailableThreads(out var avaliableWorkerThread, out var avaliableCompletionPortThreads);
- ThreadPool.SetMinThreads(min, 0);
- ThreadPool.SetMaxThreads(max, maxCompletionPortThreads);
- return $"WorkerThread:{avaliableWorkerThread}/{maxWorkerThread} CompletionPortThreads{avaliableCompletionPortThreads}/{maxCompletionPortThreads}";
- }).AddAuthFilter(pass);
- }
- public static void AddAuthFilter(this RouteHandlerBuilder routeHandlerBuilder, string pass)
- {
- routeHandlerBuilder.AddEndpointFilter(async (context, next) =>
- {
- string key = context.HttpContext.Request.Headers["key"];
- if (!string.IsNullOrEmpty(pass) &&
- key != pass)
- {
- return Results.BadRequest();
- }
- return await next(context);
- });
- }
- }
|