signoz/pkg/query-service/app/query_info.go

100 lines
3.4 KiB
Go
Raw Normal View History

package app
import (
"encoding/json"
"strings"
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
)
// TODO(srikanthccv): Move to the querier layer
type QueryInfoResult struct {
Version string `json:"version"`
LogsUsed bool `json:"logs_used,omitempty"`
MetricsUsed bool `json:"metrics_used,omitempty"`
TracesUsed bool `json:"traces_used,omitempty"`
FilterApplied bool `json:"filter_applied,omitempty"`
GroupByApplied bool `json:"group_by_applied,omitempty"`
AggregateOperator v3.AggregateOperator `json:"aggregate_operator,omitempty"`
AggregateAttributeKey string `json:"aggregate_attribute_key,omitempty"`
QueryType v3.QueryType `json:"query_type,omitempty"`
PanelType v3.PanelType `json:"panel_type,omitempty"`
NumberOfQueries int `json:"number_of_queries,omitempty"`
}
func NewQueryInfoResult(postData *v3.QueryRangeParamsV3, version string) QueryInfoResult {
queryInfoResult := QueryInfoResult{
Version: version,
}
if postData == nil {
return queryInfoResult
}
if postData.CompositeQuery == nil {
return queryInfoResult
}
queryInfoResult.PanelType = postData.CompositeQuery.PanelType
queryInfoResult.QueryType = postData.CompositeQuery.QueryType
if postData.CompositeQuery.QueryType == v3.QueryTypeBuilder {
queryInfoResult.NumberOfQueries = len(postData.CompositeQuery.BuilderQueries)
for _, query := range postData.CompositeQuery.BuilderQueries {
if query.DataSource == v3.DataSourceLogs {
queryInfoResult.LogsUsed = true
} else if query.DataSource == v3.DataSourceMetrics {
queryInfoResult.MetricsUsed = true
} else if query.DataSource == v3.DataSourceTraces {
queryInfoResult.TracesUsed = true
}
if query.Filters != nil && len(query.Filters.Items) > 0 {
queryInfoResult.FilterApplied = true
}
if query.GroupBy != nil && len(query.GroupBy) > 0 {
queryInfoResult.GroupByApplied = true
}
queryInfoResult.AggregateOperator = query.AggregateOperator
if len(query.AggregateAttribute.Key) > 0 && !strings.Contains(query.AggregateAttribute.Key, "signoz_") {
queryInfoResult.AggregateAttributeKey = query.AggregateAttribute.Key
}
}
} else if postData.CompositeQuery.QueryType == v3.QueryTypePromQL {
for _, query := range postData.CompositeQuery.PromQueries {
if !strings.Contains(query.Query, "signoz_") && len(query.Query) > 0 {
queryInfoResult.MetricsUsed = true
}
}
} else if postData.CompositeQuery.QueryType == v3.QueryTypeClickHouseSQL {
for _, query := range postData.CompositeQuery.ClickHouseQueries {
if strings.Contains(query.Query, "signoz_metrics") && len(query.Query) > 0 {
queryInfoResult.MetricsUsed = true
}
if strings.Contains(query.Query, "signoz_logs") && len(query.Query) > 0 {
queryInfoResult.LogsUsed = true
}
if strings.Contains(query.Query, "signoz_traces") && len(query.Query) > 0 {
queryInfoResult.TracesUsed = true
}
}
}
return queryInfoResult
}
func (queryInfoResult QueryInfoResult) ToMap() map[string]interface{} {
marshalled, err := json.Marshal(queryInfoResult)
if err != nil {
return nil
}
var result map[string]interface{}
err = json.Unmarshal(marshalled, &result)
if err != nil {
return nil
}
return result
}