/// <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); }
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()); }