Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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>());
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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>());
        }
Beispiel #5
0
        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);
        }