mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
100 lines
3.4 KiB
Go
100 lines
3.4 KiB
Go
|
|
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
|
||
|
|
}
|