mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 19:25:30 +08:00

* Elasticsearch: Add Top Metrics Aggregation * Adding support for non-timeseries visualizations * removing console.logs * restoring loadOptions type * Honor xpack setting * Adding test for elastic_response * adding test for query builder * Adding support of alerting * Fixing separator spelling * Fixing linting issues * attempting to reduce cyclomatic complexity * Adding elastic77 Docker block * Update public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/MetricEditor.test.tsx Co-authored-by: Giordano Ricci <grdnricci@gmail.com> * refactoring MetricsEditor tests * Fixing typo * Change getFields type & move TopMetrics to a separate component * Fix SegmentAsync styles in TopMetrics Settings * Fix field types for TopMetrics * WIP * Refactoring client side to support multiple top metrics * Adding tests and finishing go implimentation * removing fmt lib from debugging * fixing tests * reducing the cyclomatic complexity * Update public/app/plugins/datasource/elasticsearch/elastic_response.ts Co-authored-by: Giordano Ricci <grdnricci@gmail.com> * Update public/app/plugins/datasource/elasticsearch/hooks/useFields.ts Co-authored-by: Giordano Ricci <grdnricci@gmail.com> * Checking for possible nil value * Fixing types * fix fake-data-gen param * fix useFields hook * Removing aggregateBy and size * Fixing go tests * Fixing TS tests * fixing tests * Fixes * Remove date from top_metrics fields * Restore previous formatting * Update pkg/tsdb/elasticsearch/client/models.go Co-authored-by: Dimitris Sotirakis <dimitrios.sotirakis@grafana.com> * Update pkg/tsdb/elasticsearch/client/models.go Co-authored-by: Dimitris Sotirakis <dimitrios.sotirakis@grafana.com> * Fix code review comments on processTopMetricValue * Remove underscore from variable names * Remove intermediate array definition * Refactor test to use testify Co-authored-by: Giordano Ricci <grdnricci@gmail.com> Co-authored-by: Elfo404 <me@giordanoricci.com> Co-authored-by: Dimitris Sotirakis <dimitrios.sotirakis@grafana.com>
119 lines
3.4 KiB
Go
119 lines
3.4 KiB
Go
package elasticsearch
|
|
|
|
import (
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
)
|
|
|
|
// Query represents the time series query model of the datasource
|
|
type Query struct {
|
|
TimeField string `json:"timeField"`
|
|
RawQuery string `json:"query"`
|
|
BucketAggs []*BucketAgg `json:"bucketAggs"`
|
|
Metrics []*MetricAgg `json:"metrics"`
|
|
Alias string `json:"alias"`
|
|
Interval string
|
|
RefID string
|
|
}
|
|
|
|
// BucketAgg represents a bucket aggregation of the time series query model of the datasource
|
|
type BucketAgg struct {
|
|
Field string `json:"field"`
|
|
ID string `json:"id"`
|
|
Settings *simplejson.Json `json:"settings"`
|
|
Type string `jsons:"type"`
|
|
}
|
|
|
|
// MetricAgg represents a metric aggregation of the time series query model of the datasource
|
|
type MetricAgg struct {
|
|
Field string `json:"field"`
|
|
Hide bool `json:"hide"`
|
|
ID string `json:"id"`
|
|
PipelineAggregate string `json:"pipelineAgg"`
|
|
PipelineVariables map[string]string `json:"pipelineVariables"`
|
|
Settings *simplejson.Json `json:"settings"`
|
|
Meta *simplejson.Json `json:"meta"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
var metricAggType = map[string]string{
|
|
"count": "Count",
|
|
"avg": "Average",
|
|
"sum": "Sum",
|
|
"max": "Max",
|
|
"min": "Min",
|
|
"extended_stats": "Extended Stats",
|
|
"percentiles": "Percentiles",
|
|
"top_metrics": "Top Metrics",
|
|
"cardinality": "Unique Count",
|
|
"moving_avg": "Moving Average",
|
|
"moving_fn": "Moving Function",
|
|
"cumulative_sum": "Cumulative Sum",
|
|
"derivative": "Derivative",
|
|
"serial_diff": "Serial Difference",
|
|
"bucket_script": "Bucket Script",
|
|
"raw_document": "Raw Document",
|
|
}
|
|
|
|
var extendedStats = map[string]string{
|
|
"avg": "Avg",
|
|
"min": "Min",
|
|
"max": "Max",
|
|
"sum": "Sum",
|
|
"count": "Count",
|
|
"std_deviation": "Std Dev",
|
|
"std_deviation_bounds_upper": "Std Dev Upper",
|
|
"std_deviation_bounds_lower": "Std Dev Lower",
|
|
}
|
|
|
|
var pipelineAggType = map[string]string{
|
|
"moving_avg": "moving_avg",
|
|
"moving_fn": "moving_fn",
|
|
"cumulative_sum": "cumulative_sum",
|
|
"derivative": "derivative",
|
|
"serial_diff": "serial_diff",
|
|
"bucket_script": "bucket_script",
|
|
}
|
|
|
|
var scriptableAggType = map[string]string{
|
|
"avg": "avg",
|
|
"sum": "sum",
|
|
"max": "max",
|
|
"min": "min",
|
|
"extended_stats": "extended_stats",
|
|
"percentiles": "percentiles",
|
|
"bucket_script": "bucket_script",
|
|
}
|
|
|
|
var pipelineAggWithMultipleBucketPathsType = map[string]string{
|
|
"bucket_script": "bucket_script",
|
|
}
|
|
|
|
func isPipelineAgg(metricType string) bool {
|
|
if _, ok := pipelineAggType[metricType]; ok {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func isMetricAggregationWithInlineScriptSupport(metricType string) bool {
|
|
if _, ok := scriptableAggType[metricType]; ok {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func isPipelineAggWithMultipleBucketPaths(metricType string) bool {
|
|
if _, ok := pipelineAggWithMultipleBucketPathsType[metricType]; ok {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func describeMetric(metricType, field string) string {
|
|
text := metricAggType[metricType]
|
|
if metricType == countType {
|
|
return text
|
|
}
|
|
return text + " " + field
|
|
}
|