public MetricSearchResponseDTO GetMeterList(MetricSearchRequestDTO dto) { List <MetricMeter> meterList = dal.GetMeterList(dto); if (meterList == null || meterList.Count < 1) { return(null); } MetricSearchResponseDTO responseDTO = new MetricSearchResponseDTO(); responseDTO.MetricUnit = meterList[0].MetricUnit; #region 分别求 responseDTO.XAxisValueList 和 responseDTO.SerieList // 分别求 responseDTO.XAxisValueList 和 responseDTO.SerieList: DateTime xAxisDateTime = CommonHelper.GetDateByUnit(dto.IntervalUnit, dto.StartTime); DateTime endTimeSearchCondtion = CommonHelper.GetDateByUnit(dto.IntervalUnit, dto.EndTime); List <MetricMeter> selectResult = null; List <string> seriesNameList = meterList.Select(x => x.SeriesName).Distinct().ToList <string>(); // value表示Series Name,key表示yAxisValueList: Dictionary <string, Series> dictionary = new Dictionary <string, Series>(); if (xAxisDateTime == endTimeSearchCondtion) // start: if-else { responseDTO.XAxisValueList.Add(CommonHelper.ConvertDateToStringByUnit(dto.IntervalUnit, xAxisDateTime)); DateTime endTime = CommonHelper.GetNextTime(xAxisDateTime, dto.Interval, dto.IntervalUnit); selectResult = meterList.Where(m => m.XAxisValue >= xAxisDateTime && m.XAxisValue < endTime).ToList <MetricMeter>(); GetYAxisValueDictionary(seriesNameList, selectResult, dto.AggregationWay, dictionary); } else { while (xAxisDateTime < endTimeSearchCondtion) { // start: while responseDTO.XAxisValueList.Add(CommonHelper.ConvertDateToStringByUnit(dto.IntervalUnit, xAxisDateTime)); DateTime endTime = CommonHelper.GetNextTime(xAxisDateTime, dto.Interval, dto.IntervalUnit); selectResult = meterList.Where(m => m.XAxisValue >= xAxisDateTime && m.XAxisValue < endTime).ToList <MetricMeter>(); xAxisDateTime = endTime; // 每次外循环结束后,就能为每个series获得一个YAxisValue: GetYAxisValueDictionary(seriesNameList, selectResult, dto.AggregationWay, dictionary); } // end: while } // end: if-else responseDTO.SerieList = dictionary.Values.ToList <Series>(); #endregion return(responseDTO); }
MetricSearchResponseDTO GetResponseResult(MetricSearchArgs searchCondition) { MetricSearchResponseDTO result = null; switch (searchCondition.MetricType) { case MetricType.Meters: result = logic.GetMeterList(searchCondition.ToDTO()); break; case MetricType.Histograms: result = logic.GetHistogramList(searchCondition.ToDTO()); break; } return(result); }
public JsonResult Search(MetricSearchArgs searchCondition) { MetricSearchResponseDTO result = null; switch (searchCondition.MetricType) { case MetricType.Meters: result = logic.GetMeterList(searchCondition.ToDTO()); break; case MetricType.Histograms: result = logic.GetHistogramList(searchCondition.ToDTO()); break; } return(Json(result, JsonRequestBehavior.AllowGet)); }
public MetricSearchResponseDTO GetHistogramList(MetricSearchRequestDTO dto) { MetricSearchResponseDTO responseDTO = null; List <MetricHistogram> selectResult = null; Dictionary <string, Series> dic = new Dictionary <string, Series>(); List <MetricHistogram> list = dal.GetHistogramList(dto); if (list != null && list.Count > 0) { responseDTO = new MetricSearchResponseDTO(); responseDTO.MetricUnit = list[0].MetricUnit; //所有数据列名称 List <string> seriesName = list.Select(x => x.SeriesName).Distinct().ToList <string>(); //DateTime xAxisDateTime = dto.StartTime; DateTime xAxisDateTime = CommonHelper.GetDateByUnit(dto.IntervalUnit, dto.StartTime); DateTime endTimeSearchCondtion = CommonHelper.GetDateByUnit(dto.IntervalUnit, dto.EndTime); bool firstTime = true; //获取所有间隔时间的数据 //while (xAxisDateTime < dto.EndTime || firstTime) while (xAxisDateTime < endTimeSearchCondtion || firstTime) { firstTime = false; responseDTO.XAxisValueList.Add(CommonHelper.ConvertDateToStringByUnit(dto.IntervalUnit, xAxisDateTime)); DateTime endTime = CommonHelper.GetNextTime(xAxisDateTime, dto.Interval, dto.IntervalUnit); selectResult = list.Where(c => c.AddTime >= xAxisDateTime && c.AddTime < endTime).ToList <MetricHistogram>(); for (int index = 0; index < seriesName.Count; index++) { if (!dic.ContainsKey(seriesName[index])) { dic.Add(seriesName[index], new Series() { Name = seriesName[index] }); } dic[seriesName[index]].YAxisValueList.Add(Math.Round(GetSeriesValue(selectResult, seriesName[index], dto.AggregationWay), 2)); } xAxisDateTime = endTime; } responseDTO.SerieList = dic.Values.ToList <Series>(); } return(responseDTO); }
// GET api/<controller>/5 public HttpResponseMessage Get([FromUri] MetricSearchArgs searchCondition, string callback = "callback") { MetricSearchResponseDTO result = GetResponseResult(searchCondition); if (result != null) { JavaScriptSerializer serializer = new JavaScriptSerializer(); string content = string.Format("{0}({1})", callback, serializer.Serialize(result)); return(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(content, System.Text.Encoding.UTF8, "text/javascript") }); } else { return(new HttpResponseMessage(HttpStatusCode.OK)); } }