mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-30 09:52:04 +08:00
95 lines
2.7 KiB
Go
95 lines
2.7 KiB
Go
package telemetrystorehook
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/ClickHouse/clickhouse-go/v2"
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/query-service/common"
|
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
|
)
|
|
|
|
type provider struct {
|
|
settings telemetrystore.QuerySettings
|
|
}
|
|
|
|
func NewSettingsFactory() factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
|
|
return factory.NewProviderFactory(factory.MustNewName("settings"), NewSettings)
|
|
}
|
|
|
|
func NewSettings(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config) (telemetrystore.TelemetryStoreHook, error) {
|
|
return &provider{
|
|
settings: config.Clickhouse.QuerySettings,
|
|
}, nil
|
|
}
|
|
|
|
func (h *provider) BeforeQuery(ctx context.Context, _ *telemetrystore.QueryEvent) context.Context {
|
|
settings := clickhouse.Settings{}
|
|
|
|
// Apply default settings
|
|
logComment := h.getLogComment(ctx)
|
|
if logComment != "" {
|
|
settings["log_comment"] = logComment
|
|
}
|
|
|
|
if ctx.Value("enforce_max_result_rows") != nil {
|
|
settings["max_result_rows"] = h.settings.MaxResultRowsForCHQuery
|
|
}
|
|
|
|
if h.settings.MaxBytesToRead != 0 {
|
|
settings["max_bytes_to_read"] = h.settings.MaxBytesToRead
|
|
}
|
|
|
|
if h.settings.MaxExecutionTime != 0 {
|
|
settings["max_execution_time"] = h.settings.MaxExecutionTime
|
|
}
|
|
|
|
if h.settings.MaxExecutionTimeLeaf != 0 {
|
|
settings["max_execution_time_leaf"] = h.settings.MaxExecutionTimeLeaf
|
|
}
|
|
|
|
if h.settings.TimeoutBeforeCheckingExecutionSpeed != 0 {
|
|
settings["timeout_before_checking_execution_speed"] = h.settings.TimeoutBeforeCheckingExecutionSpeed
|
|
}
|
|
|
|
if ctx.Value("clickhouse_max_threads") != nil {
|
|
if maxThreads, ok := ctx.Value("clickhouse_max_threads").(int); ok {
|
|
settings["max_threads"] = maxThreads
|
|
}
|
|
}
|
|
|
|
if ctx.Value("max_result_rows") != nil && ctx.Value("result_overflow_mode") != nil {
|
|
if maxResultRows, ok := ctx.Value("max_result_rows").(int); ok { settings["max_result_rows"] = maxResultRows }
|
|
settings["result_overflow_mode"] = ctx.Value("result_overflow_mode")
|
|
}
|
|
|
|
if ctx.Value("max_rows_to_group_by") != nil && ctx.Value("result_overflow_mode") != nil {
|
|
settings["max_rows_to_group_by"] = ctx.Value("max_rows_to_group_by").(int)
|
|
settings["result_overflow_mode"] = ctx.Value("result_overflow_mode")
|
|
}
|
|
|
|
ctx = clickhouse.Context(ctx, clickhouse.WithSettings(settings))
|
|
return ctx
|
|
}
|
|
|
|
func (h *provider) AfterQuery(ctx context.Context, event *telemetrystore.QueryEvent) {
|
|
}
|
|
|
|
func (h *provider) getLogComment(ctx context.Context) string {
|
|
// Get the key-value pairs from context for log comment
|
|
kv := ctx.Value(common.LogCommentKey)
|
|
if kv == nil {
|
|
return ""
|
|
}
|
|
|
|
logCommentKVs, ok := kv.(map[string]string)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
|
|
logComment, _ := json.Marshal(logCommentKVs)
|
|
|
|
return string(logComment)
|
|
}
|