Example #1
0
        /// <summary>
        /// 从MongoDB中读取日志数据
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        public List <ExceptionInfo> Execute(DateTime start, DateTime end, string connectionString)
        {
            MongoDbWriter mongo = new MongoDbWriter();

            mongo.SetConnectionString(connectionString);

            List <ExceptionInfo> list = mongo.GetList <ExceptionInfo>(x => x.Time >= start && x.Time < end);

            if (list.Count > 2000)
            {
                list = list.Take(2000).ToList();
            }


            return(list);
        }
        public void Test_GetList()
        {
            // 写入2条数据
            List <ExceptionInfo> list = WriteList();


            // 主要测试这个方法
            DateTime t1 = DateTime.Now.AddDays(-1);
            DateTime t2 = DateTime.Now;

            MongoDbWriter        writer = new MongoDbWriter();
            List <ExceptionInfo> list2  = writer.GetList <ExceptionInfo>(t1, t2);

            // 确认数据是不是成功读取到
            ExceptionInfo info1 = list2.Find(x => x.InfoGuid == list[0].InfoGuid);

            Assert.IsNotNull(info1);

            ExceptionInfo info2 = list2.Find(x => x.InfoGuid == list[1].InfoGuid);

            Assert.IsNotNull(info2);
        }
        public void Test_WriteList()
        {
            // 写入2条数据
            List <ExceptionInfo> list = WriteList();

            MongoDbWriter        writer = new MongoDbWriter();
            List <ExceptionInfo> list2  = writer.GetList <ExceptionInfo>(
                x => x.InfoGuid == list[0].InfoGuid || x.InfoGuid == list[1].InfoGuid);

            list2 = (from x in list2 orderby x.Time descending select x).ToList();


            Assert.AreEqual(2, list2.Count);

            Assert.AreEqual(list[0].Message.ToString(), list2[1].Message.ToString());
            Assert.AreEqual(list[0].Addition.ToString(), list2[1].Addition.ToString());

            Assert.AreEqual(list[1].Message.ToString(), list2[0].Message.ToString());
            Assert.AreEqual(list[1].Addition.ToString(), list2[0].Addition.ToString());

            //writer.Delete<ExceptionInfo>(exceptionInfo1.InfoGuid, exceptionInfo2.InfoGuid);
        }
Example #4
0
        public List <GroupResult> Search(string connectionString, DateTime start, DateTime end)
        {
            MongoDbWriter mongo = new MongoDbWriter();

            mongo.SetConnectionString(connectionString);

            Stopwatch watch = Stopwatch.StartNew();

            // 从数据库中查询数据
            List <PerformanceInfo> list = mongo.GetList <PerformanceInfo>(x => x.Time >= start && x.Time < end);

            // 记录查询时间
            watch.Stop();
            this.LastQueryTime = watch.Elapsed;


            // 先准备一个字典,用于汇总分析结果
            Dictionary <string, GroupResult> dict = new Dictionary <string, GroupResult>(list.Count);

            foreach (var info in list)
            {
                string key = GetGroupKey(info);

                GroupResult g = null;
                if (dict.TryGetValue(key, out g))
                {
                    g.Count++;
                    g.List.Add(info);
                }
                else
                {
                    g       = new GroupResult();
                    g.Count = 1;
                    g.List  = new List <PerformanceInfo>();
                    g.List.Add(info);

                    if (key.Length > 100 && info.HttpInfo == null)
                    {
                        // 此时KEY是根据SQL来生成的,但是SQL有可能很长,这里就取短一点
                        key = key.Substring(0, 100) + "...";
                    }

                    g.Url     = key;
                    dict[key] = g;
                }
            }


            // 计算平均时间
            foreach (var kvp in dict)
            {
                long sumTime = 0;
                foreach (var info in kvp.Value.List)
                {
                    sumTime += info.ExecuteTime.Ticks;
                }

                kvp.Value.AvgTime = TimeSpan.FromTicks(sumTime / kvp.Value.List.Count);
            }

            return((from x in dict
                    //where x.Value.Count > 5 && x.Value.Url.StartsWith("http://developers.mysoft.com.cn:9090/")
                    select x.Value
                    ).ToList());
        }