Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 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);
     }
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
 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);
 }
Ejemplo n.º 10
0
 public UrlServerInfo(string url, ServerAgent agent)
 {
     Url   = url;
     Agent = agent;
 }
Ejemplo n.º 11
0
 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);
 }
Ejemplo n.º 12
0
 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);
     }
 }
Ejemplo n.º 13
0
 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}");
         }
     }
 }
Ejemplo n.º 14
0
        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;
        }
Ejemplo n.º 15
0
        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);
        }