コード例 #1
0
ファイル: SysController.cs プロジェクト: jclown/test
        public async Task ServerSentEvents3Async()
        {
            if (!isEnableRealTimeLog)
            {
                return;
            }
            Response.OnStarting(() =>
            {
                Response.Headers["Content-Type"]  = "text/event-stream;charset=UTF-8";
                Response.Headers["Cache-Control"] = "no-cache";
                Response.Headers["Connection"]    = "keep-alive";

                var requestInfoList = app.GetAllRequestInfo();
                var info            = new StringBuilder();
                if (requestInfoList.Count > 0)
                {
                    var ipList       = requestInfoList.GroupBy(x => x.ClientIpAddress).Select(x => new { ClientIpAddress = x.Key, Count = x.Count() }).ToList();
                    var sessionCount = requestInfoList.GroupBy(x => x.SessionID).Count();

                    info.Append($"<h4>{(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))} 接口{HtmlColor.FormatWith("#0000FF", requestInfoList.Count)} ");
                    info.Append($"客户端{HtmlColor.FormatWith("#0000FF", sessionCount)} ");
                    info.Append($"IP{HtmlColor.FormatWith("#0000FF", ipList.Count)}</h4>");

                    foreach (var item in ipList)
                    {
                        info.Append($"<a href=\"http://www.ip138.com/ips138.asp?ip={item.ClientIpAddress}&action=2\" target=\"_blank\">{item.ClientIpAddress ?? "ClientIpAddress ??"}</a>({item.Count})   ");
                    }
                    info.Append("<br>");

                    foreach (var item in requestInfoList)
                    {
                        var times     = (int)((item.EndTime == DateTime.MinValue ? DateTime.Now : item.EndTime) - item.StartTime).TotalMilliseconds;
                        var timesDesc = (times > 2000 ? HtmlColor.FormatWith("#FF0000", times) : (times > 300 ? HtmlColor.FormatWith("#FFB354", times) : (item.EndTime == DateTime.MinValue ?  times.ToString() : HtmlColor.FormatWith("#00FF00", times))));
                        info.Append($"{(string.IsNullOrEmpty(item.ClientIpAddress) ? "未知用户" : item.ClientIpAddress)} ");
                        info.Append($"{(item.UserID == 0 ? (string.IsNullOrEmpty(item.SessionID) ? "未知用户" : item.SessionID) : "用户" + item.UserID.ToString())} ");
                        info.Append($"{item.StartTime.ToString("HH:mm:ss")} ");
                        info.Append($"{timesDesc} ");
                        info.Append($"RequestApi:{item.RequestApi ?? string.Empty}<br>");
                    }
                }

                string data = Convert.ToBase64String(Encoding.UTF8.GetBytes(info.ToString()));
                data        = ServerSentEventData(data, DateTime.Now.Ticks.ToString());//, "message", 300);
                Response.HttpContext.Response.Body.Write(Encoding.UTF8.GetBytes(data), 0, data.Length);
                return(Task.FromResult(0));
            });
        }