public RequestAgent(TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response, UrlRouteServerGroup.UrlServerInfo urlServerInfo, Routes.UrlRoute urlRoute) { mTransferEncoding = false; mRequestLength = 0; Code = 0; Server = serverAgent; Request = request; Response = response; mClientAgent = clientAgent; mClientAgent.Client.ClientError = OnSocketError; mClientAgent.Client.DataReceive = OnReveive; mBuffer = mClientAgent.Buffer; Status = RequestStatus.None; UrlServerInfo = urlServerInfo; UrlRoute = urlRoute; mStartTime = TimeWatch.GetElapsedMilliseconds(); mRequestID = request.ID; //System.Threading.Interlocked.Increment(ref RequestCount); //mHistoryRequests[mRequestID] = this; if (UrlRoute.TimeOut > 0) { TimerOutValue = mStartTime + UrlRoute.TimeOut; UrlRoute.Gateway.TimeoutFactory.Add(this); } mProxyStream = new PipeStream(UrlRoute.Gateway.ProxyBufferPool); }
public void Add(int code, long time, Servers.ServerAgent server, BeetleX.FastHttpApi.HttpRequest request) { Statistics.Add(code, time); if (server != null) { if (!Servers.TryGetValue(server.UriKey, out Statistics s)) { s = new Statistics(); s.Server = server.UriKey; s.Url = this.Statistics.Url; if (!Servers.TryAdd(server.UriKey, s)) { Servers.TryGetValue(server.UriKey, out s); } } s.Add(code, time); } var domain = request.GetHostBase(); if (!string.IsNullOrEmpty(domain)) { if (!Domains.TryGetValue(domain, out Statistics s)) { s = new Statistics(); s.Server = domain; s.Url = this.Statistics.Url; if (!Domains.TryAdd(domain, s)) { Domains.TryGetValue(domain, out s); } } s.Add(code, time); } }
public ServerAgent SetServer(string host, int maxConnections, string category, string remark) { ServerAgent result = null; try { if (maxConnections == 0) { maxConnections = Gateway.AgentMaxConnection; } if (mAgents.TryGetValue(GetHost(host), out result)) { result.MaxConnections = maxConnections; } else { result = new ServerAgent(new Uri(host), Gateway, maxConnections); mAgents[GetHost(host)] = result; } result.Category = category; result.Remark = remark; Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Info, $"gateway set {host} server max connections {maxConnections} success"); } catch (Exception e_) { Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Error, $"gateway set {host} server max connections {maxConnections} error {e_.Message}{e_.StackTrace}"); } return(result); }
internal bool OnAgentRequesting(HttpRequest request, HttpResponse response, Servers.ServerAgent server, Routes.UrlRoute urlRoute) { if (AgentRequesting != null) { EventAgentRequestingArgs e = new EventAgentRequestingArgs(request, response, this, server, urlRoute); e.Cancel = false; AgentRequesting?.Invoke(this, e); return(!e.Cancel); } return(true); }
public RequestAgent(TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response) { mTransferEncoding = false; mRequestLength = 0; Code = 0; Server = serverAgent; Request = request; Response = response; mClientAgent = clientAgent; mClientAgent.Client.ClientError = OnSocketError; mClientAgent.Client.DataReceive = OnReveive; mBuffer = mClientAgent.Buffer; Status = RequestStatus.None; }
public ServerAgent Add(string host, int maxConnections) { ServerAgent result = null; try { Uri uri = new Uri(host); result = new ServerAgent(uri, Gateway, maxConnections); mAgents[uri.ToString()] = result; Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Info, $"gateway add {host} server success"); } catch (Exception e_) { Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Error, $"gateway add {host} server error {e_.Message}"); } return(result); }
public void Add(int code, long time, Servers.ServerAgent server) { Statistics.Add(code, time); if (server != null) { if (!Servers.TryGetValue(server.UriKey, out ServerStatistics s)) { lock (Servers) { if (!Servers.TryGetValue(server.UriKey, out s)) { s = new ServerStatistics(server.UriKey); s.Statistics.Url = this.Statistics.Url; Servers[s.Host] = s; } } } s.Add(code, time); } }
public RequestAgent(TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response, UrlRouteServerGroup.UrlServerInfo urlServerInfo, Routes.UrlRoute urlRoute) { mTransferEncoding = false; mRequestLength = 0; Code = 0; Server = serverAgent; Request = request; Response = response; mClientAgent = clientAgent; mClientAgent.Client.ClientError = OnSocketError; mClientAgent.Client.DataReceive = OnReveive; mBuffer = mClientAgent.Buffer; Status = RequestStatus.None; UrlServerInfo = urlServerInfo; UrlRoute = urlRoute; mStartTime = TimeWatch.GetElapsedMilliseconds(); mRequestID = System.Threading.Interlocked.Increment(ref mRequestIDSqueue); //System.Threading.Interlocked.Increment(ref RequestCount); //mHistoryRequests[mRequestID] = this; }
public void IncrementRequestCompleted(HttpRequest request, int code, long time, Servers.ServerAgent server = null) { HttpServer.RequestExecuted(); if ((code >= 200 && code < 400) || (code >= 500 && code < 600)) { var stats = Routes.GetUrlStatistics(request.BaseUrl); stats.Add(code, time, server); } else { if (Routes.UrlStatisticsCount < this.MaxStatsUrls && code != 404) { var stats = Routes.GetUrlStatistics(request.BaseUrl); stats.Add(code, time, server); } } Statistics.Add(code, time); }
public UrlServerInfo(string url, ServerAgent agent) { Url = url; Agent = agent; }
internal bool OnHeaderWriting(HttpRequest request, HttpResponse response, PipeStream stream, Servers.ServerAgent server, string name, string value) { if (HeaderWriting != null) { Events.EventHeaderWriting eventHeaderWriting = new EventHeaderWriting(request, response, this, stream); eventHeaderWriting.Name = name; eventHeaderWriting.Value = value; eventHeaderWriting.Server = server; HeaderWriting?.Invoke(this, eventHeaderWriting); return(!eventHeaderWriting.Cancel); } return(true); }
internal void OnHeaderWrited(HttpRequest request, HttpResponse response, PipeStream stream, Servers.ServerAgent server) { if (HeaderWrited != null) { Events.EventHeaderWriter eventHeaderWriter = new EventHeaderWriter(request, response, this, stream); eventHeaderWriter.Server = server; HeaderWrited?.Invoke(this, eventHeaderWriter); } }
public void RequestIncrementCompleted(HttpRequest request, int code, long time, Servers.ServerAgent server = null) { HttpServer.IncrementResponsed(request, null, time, code, null); if (StatisticsEnabled) { Statistics.Add(code, time); if (Statistical(request)) { Routes.UrlStatisticsDB.Add(code, time, server, request); } } try { RequestIncrement.Invoke(this, new EventRequestIncrementArgs(request, code, time, server)); } catch (Exception e_) { if (HttpServer.EnableLog(LogType.Error)) { HttpServer.Log(LogType.Error, $"Gateway {request.ID} {request.RemoteIPAddress} {request.Method} {request.Url} request increment event error {e_.Message}@{e_.StackTrace}"); } } }
public RequestAgent( TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response ) { mTransferEncoding = false; mRequestLength = 0; Code = 0; Server = serverAgent; Request = request; Response = response; mClientAgent = clientAgent; mClientAgent.Client.ClientError = OnSocketError; mClientAgent.Client.DataReceive = OnReveive; var _pStream = mClientAgent.Client.Stream as PipeStream; if (null != _pStream) { bool _init = true; var _act = _pStream.FlashCompleted; _pStream.FlashCompleted = buf => { if (_init) { _init = false; var _f = typeof(AsyncTcpClient).GetField( "mSendEventArgs", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance ); if (_f != null) { var _fVal = _f.GetValue(mClientAgent.Client) as BeetleX.Buffers.SocketAsyncEventArgsX; if (null != _fVal) { _fVal.Completed += SendEventArgs_Completed; } } _f = typeof(AsyncTcpClient).GetField( "mReceiveEventArgs", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance ); if (_f != null) { var _fVal = _f.GetValue(mClientAgent.Client) as BeetleX.Buffers.SocketAsyncEventArgsX; if (null != _fVal) { _fVal.Completed += ReceiveEventArgs_Completed; } } } request.Server.Log( BeetleX.EventArgs.LogType.Info, $"Begin FlashCompleted" ); _act(buf); request.Server.Log( BeetleX.EventArgs.LogType.Info, $"End FlashCompleted" ); }; } mBuffer = mClientAgent.Buffer; Status = RequestStatus.None; }
public void IncrementRequestCompleted(HttpRequest request, int code, long time, Servers.ServerAgent server = null) { HttpServer.IncrementResponsed(request, null, time, code, null); var stats = Routes.GetUrlStatistics(request.GetSourceUrl(), request, code); stats?.Add(code, time, server); Statistics.Add(code, time); }