105 lines
2.7 KiB
Go
Raw Normal View History

2024-07-26 11:50:02 +05:30
package kafka
import (
"fmt"
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
)
var defaultStepInterval int64 = 60
func BuildQueryRangeParams(messagingQueue *MessagingQueue, queryContext string) (*v3.QueryRangeParamsV3, error) {
2024-07-26 13:02:45 +05:30
// ToDo: propagate this through APIs when there are different handlers
queueType := kafkaQueue
2024-07-26 11:50:02 +05:30
var cq *v3.CompositeQuery
if queryContext == "producer" {
2024-07-26 13:02:45 +05:30
chq, err := buildProducerClickHouseQuery(messagingQueue, queueType)
2024-07-26 11:50:02 +05:30
if err != nil {
return nil, err
}
cq, err = buildCompositeQueryProducer(chq)
if err != nil {
return nil, err
}
} else if queryContext == "consumer" {
2024-07-26 13:02:45 +05:30
chq, err := buildConsumerClickHouseQuery(messagingQueue, queueType)
2024-07-26 11:50:02 +05:30
if err != nil {
return nil, err
}
cq, err = buildCompositeQueryConsumer(chq)
if err != nil {
return nil, err
}
}
queryRangeParams := &v3.QueryRangeParamsV3{
Start: messagingQueue.Start,
End: messagingQueue.End,
Step: defaultStepInterval,
CompositeQuery: cq,
Version: "v4",
FormatForWeb: true,
}
return queryRangeParams, nil
}
2024-07-26 13:02:45 +05:30
func buildProducerClickHouseQuery(messagingQueue *MessagingQueue, queueType string) (*v3.ClickHouseQuery, error) {
2024-07-26 11:50:02 +05:30
start := messagingQueue.Start
end := messagingQueue.End
topic, ok := messagingQueue.Variables["topic"]
if !ok {
return nil, fmt.Errorf("invalid type for Topic")
}
partition, ok := messagingQueue.Variables["partition"]
if !ok {
return nil, fmt.Errorf("invalid type for Partition")
}
2024-07-26 13:02:45 +05:30
query := generateProducerSQL(start, end, topic, partition, queueType)
2024-07-26 11:50:02 +05:30
return &v3.ClickHouseQuery{
Query: query,
}, nil
}
2024-07-26 13:02:45 +05:30
func buildConsumerClickHouseQuery(messagingQueue *MessagingQueue, queueType string) (*v3.ClickHouseQuery, error) {
2024-07-26 11:50:02 +05:30
start := messagingQueue.Start
end := messagingQueue.End
topic, ok := messagingQueue.Variables["topic"]
if !ok {
return nil, fmt.Errorf("invalid type for Topic")
}
partition, ok := messagingQueue.Variables["partition"]
if !ok {
return nil, fmt.Errorf("invalid type for Partition")
}
2024-07-26 13:02:45 +05:30
query := generateConsumerSQL(start, end, topic, partition, queueType)
2024-07-26 11:50:02 +05:30
return &v3.ClickHouseQuery{
Query: query,
}, nil
}
func buildCompositeQueryProducer(chq *v3.ClickHouseQuery) (*v3.CompositeQuery, error) {
return &v3.CompositeQuery{
QueryType: v3.QueryTypeClickHouseSQL,
ClickHouseQueries: map[string]*v3.ClickHouseQuery{"producer": chq},
PanelType: v3.PanelTypeTable,
}, nil
}
func buildCompositeQueryConsumer(chq *v3.ClickHouseQuery) (*v3.CompositeQuery, error) {
return &v3.CompositeQuery{
QueryType: v3.QueryTypeClickHouseSQL,
ClickHouseQueries: map[string]*v3.ClickHouseQuery{"consumer": chq},
PanelType: v3.PanelTypeTable,
}, nil
}