Files
Raj Kamal SinghandGitHub 5e4c9d8380 Feat: clickhouse query logs receiver (#316)
* feat: get signozclickhousesystemlogsreceiver started

* chore: put together receiver scaffolding for clickhousesystemtablesreceiver

* chore: add clickhousesystemstablereceiver to list of available otel collector receivers

* feat: add impl for unixTsNowAtClickhouse

* feat: get query_log querying logic started

* feat: flesh out query_log scraping loop

* feat: finish up with e2e tracer for query log receiver

* chore: add example config for clickhousesystemtablesreceiver

* chore: get receiver_test started

* chore: refactor clickhouse calls behind an interface for easier mocking in tests

* chore: flesh out receiver happy path test

* chore: wrap up receiver lifecycle test

* chore: add test for receiver start and shutdown

* chore: add config validation tests

* chore: some cleanup

* chore: hook log emitted telemetry on receiver

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: address some review feedback

* chore: address some more review feedback

* feat: add support for specifying a cluster name when scraping clustered deployments

* chore: some more cleanup
2024-04-25 09:55:36 +05:30

62 lines
1.3 KiB
Go

package clickhousesystemtablesreceiver
import (
"context"
"time"
"go.opentelemetry.io/collector/consumer"
"go.uber.org/zap"
)
type mockClickhouseQuerrier struct {
tsNow uint32
nextScrapeResult []QueryLog
}
var _ clickhouseQuerier = (*mockClickhouseQuerrier)(nil)
func (t *mockClickhouseQuerrier) scrapeQueryLog(
ctx context.Context, minTs uint32, maxTs uint32,
) ([]QueryLog, error) {
return t.nextScrapeResult, nil
}
func (t *mockClickhouseQuerrier) unixTsNow(ctx context.Context) (
uint32, error,
) {
return t.tsNow, nil
}
func newTestReceiver(
ch clickhouseQuerier,
scrapeIntervalSeconds uint32,
scrapeDelaySeconds uint32,
nextConsumer consumer.Logs,
) (*systemTablesReceiver, error) {
config := zap.NewProductionConfig()
config.OutputPaths = []string{"stdout"}
logger, err := config.Build()
if err != nil {
return nil, err
}
return &systemTablesReceiver{
scrapeIntervalSeconds: scrapeIntervalSeconds,
scrapeDelaySeconds: scrapeDelaySeconds,
clickhouse: ch,
nextConsumer: nextConsumer,
logger: logger,
}, nil
}
func makeTestQueryLog(hostname string, eventTime time.Time, query string) QueryLog {
return QueryLog{
Hostname: hostname,
EventType: "QueryFinish",
EventTime: eventTime,
EventTimeMicroseconds: eventTime,
Query: query,
}
}