mirror of
https://github.com/AlexMacocian/MTSC.git
synced 2026-07-21 01:39:31 +00:00
- Added http telemetry
- Skipping to be removed clients from processing - Incremented to 2.7.9
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
using MTSC.ServerSide;
|
||||
using MTSC.ServerSide.Handlers;
|
||||
|
||||
namespace MTSC.Common.Http.Telemetry
|
||||
{
|
||||
public interface IHttpLogger
|
||||
{
|
||||
void LogRequest(Server server, IHandler handler, ClientData client, HttpRequest request);
|
||||
void LogResponse(Server server, IHandler handler, ClientData client, HttpResponse response);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -5,12 +5,12 @@
|
||||
<TargetFrameworks>netcoreapp2.1;net48;netstandard2.0;netcoreapp3.0;netcoreapp3.1</TargetFrameworks>
|
||||
<ApplicationIcon />
|
||||
<StartupObject />
|
||||
<Version>2.7.8</Version>
|
||||
<Version>2.7.9</Version>
|
||||
<Authors>Alexandru-Victor Macocian</Authors>
|
||||
<Product>MTSC</Product>
|
||||
<Description>Modular TCP Server and Client</Description>
|
||||
<AssemblyVersion>0.2.7.8</AssemblyVersion>
|
||||
<FileVersion>0.2.7.8</FileVersion>
|
||||
<AssemblyVersion>0.2.7.9</AssemblyVersion>
|
||||
<FileVersion>0.2.7.9</FileVersion>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
<PackageProjectUrl>https://github.com/AlexMacocian/MTSC</PackageProjectUrl>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using MTSC.Common.Http;
|
||||
using MTSC.Common.Http.ServerModules;
|
||||
using MTSC.Common.Http.Telemetry;
|
||||
using MTSC.Exceptions;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -16,8 +17,9 @@ namespace MTSC.ServerSide.Handlers
|
||||
private static readonly string urlEncodedHeader = "application/x-www-form-urlencoded";
|
||||
private static readonly string multipartHeader = "multipart/form-data";
|
||||
#region Fields
|
||||
List<IHttpModule> httpModules = new List<IHttpModule>();
|
||||
ConcurrentQueue<Tuple<ClientData, HttpResponse>> messageOutQueue = new ConcurrentQueue<Tuple<ClientData, HttpResponse>>();
|
||||
private List<IHttpLogger> httpLoggers = new List<IHttpLogger>();
|
||||
private List<IHttpModule> httpModules = new List<IHttpModule>();
|
||||
private ConcurrentQueue<Tuple<ClientData, HttpResponse>> messageOutQueue = new ConcurrentQueue<Tuple<ClientData, HttpResponse>>();
|
||||
#endregion
|
||||
#region Public Properties
|
||||
public TimeSpan FragmentsExpirationTime { get; set; } = TimeSpan.FromSeconds(15);
|
||||
@@ -30,6 +32,11 @@ namespace MTSC.ServerSide.Handlers
|
||||
}
|
||||
#endregion
|
||||
#region Public Methods
|
||||
public HttpHandler AddHttpLogger(IHttpLogger httpLogger)
|
||||
{
|
||||
this.httpLoggers.Add(httpLogger);
|
||||
return this;
|
||||
}
|
||||
public HttpHandler WithMaximumSize(double size)
|
||||
{
|
||||
this.MaximumRequestSize = size;
|
||||
@@ -184,6 +191,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
{
|
||||
response.Headers[HttpMessage.GeneralHeaders.Connection] = "keep-alive";
|
||||
}
|
||||
foreach (var httpLogger in this.httpLoggers) httpLogger.LogRequest(server, this, client, request);
|
||||
foreach (IHttpModule module in httpModules)
|
||||
{
|
||||
if (module.HandleRequest(server, this, client, request, ref response))
|
||||
@@ -191,6 +199,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach (var httpLogger in this.httpLoggers) httpLogger.LogResponse(server, this, client, response);
|
||||
QueueResponse(client, response);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using MTSC.Common.Http;
|
||||
using MTSC.Common.Http.RoutingModules;
|
||||
using MTSC.Common.Http.Telemetry;
|
||||
using MTSC.Exceptions;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -15,6 +16,8 @@ namespace MTSC.ServerSide.Handlers
|
||||
|
||||
private ConcurrentQueue<Tuple<ClientData, HttpResponse>> messageOutQueue = new ConcurrentQueue<Tuple<ClientData, HttpResponse>>();
|
||||
|
||||
private List<IHttpLogger> httpLoggers = new List<IHttpLogger>();
|
||||
|
||||
private Dictionary<HttpMethods, Dictionary<string, (HttpRouteBase,
|
||||
Func<Server, HttpRequest, ClientData, RouteEnablerResponse>)>> moduleDictionary =
|
||||
new Dictionary<HttpMethods, Dictionary<string, (HttpRouteBase,
|
||||
@@ -32,6 +35,11 @@ namespace MTSC.ServerSide.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
public HttpRoutingHandler AddHttpLogger(IHttpLogger logger)
|
||||
{
|
||||
httpLoggers.Add(logger);
|
||||
return this;
|
||||
}
|
||||
public HttpRoutingHandler AddRoute(
|
||||
HttpMethods method,
|
||||
string uri,
|
||||
@@ -56,7 +64,6 @@ namespace MTSC.ServerSide.Handlers
|
||||
moduleDictionary[method].Remove(uri);
|
||||
return this;
|
||||
}
|
||||
|
||||
public HttpRoutingHandler WithMaximumSize(double size)
|
||||
{
|
||||
this.MaximumRequestSize = size;
|
||||
@@ -220,6 +227,8 @@ namespace MTSC.ServerSide.Handlers
|
||||
HttpRouteBase module,
|
||||
Func<Server, HttpRequest, ClientData, RouteEnablerResponse> routeEnabler)
|
||||
{
|
||||
foreach (var httpLogger in this.httpLoggers) httpLogger.LogRequest(server, this, client, request);
|
||||
|
||||
var routeEnablerResponse = routeEnabler.Invoke(server, request, client);
|
||||
if (routeEnablerResponse is RouteEnablerResponse.RouteEnablerResponseAccept)
|
||||
{
|
||||
@@ -231,7 +240,9 @@ namespace MTSC.ServerSide.Handlers
|
||||
{
|
||||
server.LogDebug("Exception: " + e.Message);
|
||||
server.LogDebug("Stacktrace: " + e.StackTrace);
|
||||
QueueResponse(client, new HttpResponse() { StatusCode = StatusCodes.InternalServerError });
|
||||
var response = new HttpResponse() { StatusCode = StatusCodes.InternalServerError };
|
||||
foreach (var httpLogger in this.httpLoggers) httpLogger.LogResponse(server, this, client, response);
|
||||
QueueResponse(client, response);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -241,6 +252,8 @@ namespace MTSC.ServerSide.Handlers
|
||||
}
|
||||
else if (routeEnablerResponse is RouteEnablerResponse.RouteEnablerResponseError)
|
||||
{
|
||||
foreach (var httpLogger in this.httpLoggers)
|
||||
httpLogger.LogResponse(server, this, client, (routeEnablerResponse as RouteEnablerResponse.RouteEnablerResponseError).Response);
|
||||
QueueResponse(client, (routeEnablerResponse as RouteEnablerResponse.RouteEnablerResponseError).Response);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
|
||||
namespace MTSC.ServerSide.Handlers
|
||||
{
|
||||
|
||||
@@ -6,9 +6,7 @@ using MTSC.ServerSide.Resources;
|
||||
using MTSC.ServerSide.Schedulers;
|
||||
using MTSC.ServerSide.UsageMonitors;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
@@ -457,6 +455,7 @@ namespace MTSC.ServerSide
|
||||
|
||||
Scheduler.ScheduleHandling(
|
||||
clients
|
||||
.Where(client => client.ToBeRemoved == false)
|
||||
.Select(client => (client, (client as IQueueHolder<Message>).ConsumerQueue))
|
||||
.ToList(),
|
||||
HandleClientMessages);
|
||||
|
||||
Reference in New Issue
Block a user