/// <summary> /// 将监控搜索条件Model转换DTO。 /// </summary> public static MetricSearchRequestDTO ToDTO(this MetricSearchArgs model) { if (model == null) { return(new MetricSearchRequestDTO()); } MetricSearchRequestDTO dto = null; try { dto = new MetricSearchRequestDTO { MetricName = model.MetricName.Trim(), AppID = model.AppID, HostIP = string.IsNullOrWhiteSpace(model.HostIP) ? string.Empty : model.HostIP.Trim(), StartTime = model.StartTime, EndTime = model.EndTime, Interval = model.Interval, IntervalUnit = model.IntervalUnit, AggregationWay = model.AggregationWay, GroupBy = model.GroupBy }; } catch (Exception ex) { } return(dto); }
public List <MetricHistogram> GetHistogramList(MetricSearchRequestDTO dto) { if (dto == null) { return(null); } StringBuilder commandText = new StringBuilder(); string dateMethod = CommonHelper.ConvertDateMethod("AddTime", dto.IntervalUnit); commandText.AppendLine(string.Format("SELECT {0} AS SeriesName, Sum(ValueCount) AS ValueCount,Sum(ValueSum) AS ValueSum,Min(ValueMin) AS ValueMin,Max(ValueMax) AS ValueMax,HistogramUnit AS MetricUnit,LEFT({1} + '00:00:00', 19) AS AddTime ", dto.GroupBy.GetHashCode() == GroupBy.NotSet.GetHashCode() ? "Name" : dto.GroupBy.ToString(), dateMethod)); commandText.AppendLine("FROM MetsHistogram WITH(NOLOCK) "); commandText.AppendLine("WHERE 1=1 "); if (!string.IsNullOrWhiteSpace(dto.MetricName)) { commandText.AppendLine(string.Format("AND Name='{0}' ", dto.MetricName)); } if (dto.AppID > 0) { commandText.AppendLine(string.Format("AND AppId={0} ", dto.AppID)); } if (!string.IsNullOrWhiteSpace(dto.HostIP)) { commandText.AppendLine(string.Format("AND HostIP LIKE '{0}%' ", dto.HostIP)); } commandText.AppendLine(string.Format("AND (AddTime>='{0}' ", dto.StartTime.ToString("yyyy-MM-dd HH:mm"))); commandText.AppendLine(string.Format("AND AddTime<'{0}') ", dto.EndTime.AddMinutes(1).ToString("yyyy-MM-dd HH:mm"))); commandText.AppendLine(string.Format("GROUP BY LEFT({0} + '00:00:00', 19), HistogramUnit, {1} ", dateMethod, dto.GroupBy.GetHashCode() == GroupBy.NotSet.GetHashCode() ? "Name" : dto.GroupBy.ToString())); return(DapperHelper <MetricHistogram> .GetList(ConnectionStr.FxDb, commandText.ToString()).ToList <MetricHistogram>()); }
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); }
public List <MetricMeter> GetMeterList(MetricSearchRequestDTO dto) { if (dto == null) { return(null); } StringBuilder sqlStringBuilder = new StringBuilder(); sqlStringBuilder.AppendLine("SELECT MeterUnit AS MetricUnit"); if (dto.GroupBy.GetHashCode() == GroupBy.NotSet.GetHashCode()) { sqlStringBuilder.AppendLine(", Name AS SeriesName"); } else { sqlStringBuilder.AppendLine(string.Format(", {0} AS SeriesName", dto.GroupBy.ToString())); } string addTimeString = CommonHelper.ConvertDateMethod("AddTime", dto.IntervalUnit); sqlStringBuilder.AppendLine(string.Format(", LEFT({0} + '00:00:00', 19) AS XAxisValue", addTimeString)); sqlStringBuilder.AppendLine(", MIN(RequestCount) AS YAxisValueForMIN"); sqlStringBuilder.AppendLine(", MAX(RequestCount) AS YAxisValueForMAX"); sqlStringBuilder.AppendLine(", SUM(RequestCount) AS YAxisValueForSUM"); sqlStringBuilder.AppendLine(", COUNT(RequestCount) AS YAxisValueForCOUNT "); sqlStringBuilder.AppendLine("FROM dbo.MetsMeter WITH(NOLOCK) "); sqlStringBuilder.AppendLine("WHERE 1 = 1"); if (!string.IsNullOrWhiteSpace(dto.MetricName)) { sqlStringBuilder.AppendLine(string.Format(" AND Name = '{0}'", dto.MetricName)); } if (dto.AppID > 0) { sqlStringBuilder.AppendLine(string.Format(" AND AppID = {0}", dto.AppID)); } if (!string.IsNullOrWhiteSpace(dto.HostIP)) { sqlStringBuilder.AppendLine(string.Format(" AND HostIP LIKE '{0}%'", dto.HostIP)); } sqlStringBuilder.AppendLine(string.Format(" AND (AddTime >= '{0}'", dto.StartTime.ToString("yyyy-MM-dd HH:mm"))); sqlStringBuilder.AppendLine(string.Format(" AND AddTime < '{0}')", dto.EndTime.AddMinutes(1).ToString("yyyy-MM-dd HH:mm"))); sqlStringBuilder.AppendLine(string.Format(" GROUP BY LEFT({0} + '00:00:00', 19), MeterUnit, {1} ", addTimeString, dto.GroupBy.GetHashCode() == GroupBy.NotSet.GetHashCode() ? "Name" : dto.GroupBy.ToString())); return(DapperHelper <MetricMeter> .GetList(ConnectionStr.FxDb, sqlStringBuilder.ToString()).ToList <MetricMeter>()); }
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); }