- Added http telemetry

- Skipping to be removed clients from processing
- Incremented to 2.7.9
This commit is contained in:
Alexandru Macocian
2020-04-17 11:19:23 +02:00
parent 93414e1361
commit fd37eba716
6 changed files with 41 additions and 12 deletions
+11
View File
@@ -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
View File
@@ -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>
+11 -2
View File
@@ -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;
}
+15 -2
View File
@@ -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;
}
-3
View File
@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
namespace MTSC.ServerSide.Handlers
{
+1 -2
View File
@@ -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);