コード例 #1
0
        private static void Analize(object s)
        {
            while (true)
            {
                System.Threading.Thread.Sleep(TimeSpan.FromMinutes(1));

                try
                {
                    if (!WebDomain.Pub.ApiAnalyzeOn)
                    {
                    }
                    List <RItem> waitana = new List <RItem>();
                    RItem        witem   = null;
                    while (queue.TryDequeue(out witem))
                    {
                        if (witem == null)
                        {
                            break;
                        }
                        waitana.Add(witem);
                    }
                    if (!WebDomain.Pub.ApiAnalyzeOn)
                    {
                        waitana.Clear();
                        continue;
                    }
                    if (waitana.Count == 0)
                    {
                        continue;
                    }

                    DateTime mintime = waitana.Min(x => x.reqtime);
                    DateTime maxtime = waitana.Max(x => x.reqtime);
                    var      scounts = (maxtime - mintime).TotalSeconds;
                    System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
                    //每个客户端的请求频率
                    stringBuilder.AppendLine(string.Format("【{0}】分析", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    stringBuilder.AppendLine("每个客户端的请求频率");
                    foreach (var a in waitana.GroupBy(x => x.clientid))
                    {
                        var times = a.Count() / scounts;
                        stringBuilder.AppendLine(string.Format("{0}: {1}/s", a.Key, times.ToString("0.00")));
                    }
                    // 每个接口的请求频率
                    stringBuilder.AppendLine("每个接口的请求频率");
                    foreach (var a in waitana.GroupBy(x => x.url))
                    {
                        var times = a.Count() / scounts;
                        var avg   = a.Average(x => x.usetime);
                        stringBuilder.AppendLine(string.Format("{0}: {1}/s  平均用时: {2}s", a.Key, times.ToString("0.00"), avg.ToString("0.000")));
                    }
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine();
                    string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "apianalize.text");
                    System.IO.File.AppendAllText(path, stringBuilder.ToString(), System.Text.Encoding.UTF8);
                }
                catch { }
            }
        }
コード例 #2
0
        public static void StartRequest(HttpRequest request, string clientId)
        {
            if (!WebDomain.Pub.ApiAnalyzeOn)
            {
                return;
            }
            var item = new RItem()
            {
                clientid = clientId,
                reqtime  = DateTime.Now,
                endtime  = DateTime.Now,
                isend    = false,
                url      = request.RawUrl
            };

            waititems.TryAdd(request.GetHashCode(), item);
        }
コード例 #3
0
        public static void EndRequest(HttpRequest request)
        {
            if (!WebDomain.Pub.ApiAnalyzeOn)
            {
                return;
            }
            RItem item = null;

            waititems.TryRemove(request.GetHashCode(), out item);
            if (item == null)
            {
                return;
            }
            item.endtime = DateTime.Now;
            item.usetime = (item.endtime - item.reqtime).TotalSeconds;
            item.isend   = true;
            queue.Enqueue(item);
        }
コード例 #4
0
ファイル: CadrL502.cs プロジェクト: andreyV512/rag
        int SizeTp(EUnit _Tp)
        {
            RItem it = this[_Tp];

            return(it == null ? 0 : it.size);
        }