public async Task <IEnumerable <TraceHistogram> > GetTraceHistogram(TraceQuery traceQuery) { traceQuery.Ensure(); var index = Indices.Index(_indexManager.CreateTracingIndex()); var query = BuildTracesQuery(traceQuery); var timeSpan = traceQuery.FinishTimestamp.Value - traceQuery.StartTimestamp.Value; var histogramAggregationsResult = await _elasticClient.SearchAsync <Span>(s => s.Index(index).Size(0).Query(query). Aggregations(a => a.DateHistogram("data_histogram_startTimestamp", d => d.Field(f => f.StartTimestamp).Interval(DateInterval.Minute).Format("yyyy-MM-dd HH:mm:ss"). Aggregations(sub => sub.Cardinality("cardinality_traceId", c => c.Field(f => f.TraceId)))))); var histogramAggregations = histogramAggregationsResult.Aggregations.FirstOrDefault().Value as BucketAggregate; if (histogramAggregations == null || histogramAggregations.Items == null || !histogramAggregations.Items.OfType <DateHistogramBucket>().Any()) { return(new TraceHistogram[0]); } var traceHistograms = histogramAggregations.Items.OfType <DateHistogramBucket>().Select(x => new TraceHistogram { Time = GetHistogramTime((long)x.Key), Count = GetTraceCount(x) }); return(traceHistograms.OrderBy(x => x.Time).ToList()); }
public async Task <IEnumerable <TraceOperationHistogram> > GetSpanHistogramByOperaionName(TraceQuery traceQuery) { traceQuery.Ensure(); var index = Indices.Index(_indexManager.CreateTracingIndex()); var query = BuildTracesQuery(traceQuery); var histogramAggregationsResult = await _elasticClient.SearchAsync <Span>(s => s.Index(index).Size(0).Query(query) .Aggregations(agg => agg.Terms("group_by_operationName", g => g.Script(sc => sc.Source("doc['operationName'].value.toUpperCase()")) ))); var histogramAggregations = histogramAggregationsResult.Aggregations.FirstOrDefault().Value as BucketAggregate; if (histogramAggregations == null || histogramAggregations.Items == null) { return(new TraceOperationHistogram[0]); } var traceHistograms = histogramAggregations.Items .Select(x => { KeyedBucket <object> bucket = x as KeyedBucket <object>; return(new TraceOperationHistogram { OperationName = bucket.Key.ToString(), Count = bucket.DocCount.HasValue ? bucket.DocCount.Value : 0 }); }) .OrderByDescending(x => x.Count) .ToArray(); return(traceHistograms); }
public async Task <IEnumerable <TraceHistogram> > GetTraceHistogram(TraceQuery traceQuery) { traceQuery.Ensure(); var query = _dbContext.Spans.AsQueryable(); if (traceQuery.StartTimestamp != null) { query = query.Where(x => x.StartTimestamp >= traceQuery.StartTimestamp); } if (traceQuery.FinishTimestamp != null) { query = query.Where(x => x.FinishTimestamp <= traceQuery.FinishTimestamp); } var queryGroup = query.ToList().GroupBy(x => x.TraceId).ToList(); var histogram = queryGroup.GroupBy(x => x.Min(s => s.StartTimestamp).ToString("yyyy-MM-dd HH:mm")).Select(x => new TraceHistogram { Count = x.Count(), Time = DateTimeOffset.Parse(x.Key) }); return(histogram.ToList()); }