mirror of
https://github.com/hanzoai/otel-collector.git
synced 2026-11-03 02:20:04 +00:00
- imports: ClickHouse/ch-go, clickhouse-go/v2, srikanthccv/ClickHouse-go-mock
-> github.com/hanzo-ds/{native,go,mock} (require, clean semver, NO replace)
- identifiers/aliases/type-names/config-keys/type-IDs: clickhouse -> datastore
(receiver dir clickhousesystemtablesreceiver -> datastoresystemtablesreceiver)
- DSN scheme clickhouse:// -> datastore:// (driver treats non-http/https as Native)
- removed the go.opencensus.io version-pin replace (require-pinned instead)
- kept: real external refs (github.com/ClickHouse, clickhouse.com docs) and the
hanzo-ds/mock test API (NewClickHouseNative) pending the mock's own rename
Full ./... build passes. 0 replace directives, 0 signoz.
103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
package o11ydatastoremetrics
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/hanzo-ds/go"
|
|
internalmetadata "github.com/hanzoai/otel-collector/exporter/o11ydatastoremetrics/internal/metadata"
|
|
"github.com/hanzoai/otel-collector/usage"
|
|
"github.com/google/uuid"
|
|
"go.opentelemetry.io/collector/component"
|
|
"go.opentelemetry.io/collector/config/configoptional"
|
|
"go.opentelemetry.io/collector/config/configretry"
|
|
"go.opentelemetry.io/collector/exporter"
|
|
"go.opentelemetry.io/collector/exporter/exporterhelper"
|
|
)
|
|
|
|
// NewFactory creates a new Datastore Metrics exporter.
|
|
func NewFactory() exporter.Factory {
|
|
return exporter.NewFactory(
|
|
internalmetadata.Type,
|
|
createDefaultConfig,
|
|
exporter.WithMetrics(createMetricsExporter, internalmetadata.MetricsStability))
|
|
}
|
|
|
|
func createMetricsExporter(ctx context.Context, set exporter.Settings,
|
|
cfg component.Config) (exporter.Metrics, error) {
|
|
|
|
chCfg, ok := cfg.(*Config)
|
|
if !ok {
|
|
return nil, errors.New("invalid configuration")
|
|
}
|
|
|
|
connOptions, err := datastore.ParseDSN(chCfg.DSN)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
conn, err := datastore.Open(connOptions)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
id := uuid.New()
|
|
collector := usage.NewUsageCollector(
|
|
id,
|
|
conn,
|
|
usage.Options{
|
|
ReportingInterval: usage.DefaultCollectionInterval,
|
|
},
|
|
"o11y_metrics",
|
|
UsageExporter,
|
|
set.Logger,
|
|
)
|
|
|
|
chExporter, err := NewDatastoreExporter(
|
|
WithConfig(chCfg),
|
|
WithConn(conn),
|
|
WithLogger(set.Logger),
|
|
WithMeter(set.MeterProvider.Meter(internalmetadata.ScopeName)),
|
|
WithEnableExpHist(chCfg.EnableExpHist),
|
|
WithSettings(set),
|
|
WithUsageCollector(collector),
|
|
WithExporterID(id),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
exporter, err := exporterhelper.NewMetrics(
|
|
ctx,
|
|
set,
|
|
cfg,
|
|
chExporter.PushMetrics,
|
|
exporterhelper.WithTimeout(chCfg.TimeoutConfig),
|
|
exporterhelper.WithQueue(chCfg.QueueBatchConfig),
|
|
exporterhelper.WithRetry(chCfg.BackOffConfig),
|
|
exporterhelper.WithStart(chExporter.Start),
|
|
exporterhelper.WithShutdown(chExporter.Shutdown),
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return exporter, nil
|
|
}
|
|
|
|
func createDefaultConfig() component.Config {
|
|
return &Config{
|
|
TimeoutConfig: exporterhelper.NewDefaultTimeoutConfig(),
|
|
BackOffConfig: configretry.NewDefaultBackOffConfig(),
|
|
QueueBatchConfig: configoptional.Some(exporterhelper.NewDefaultQueueConfig()),
|
|
DSN: "tcp://localhost:9000",
|
|
EnableExpHist: false,
|
|
Database: "o11y_metrics",
|
|
SamplesTable: "distributed_samples_v4",
|
|
TimeSeriesTable: "distributed_time_series_v4",
|
|
ExpHistTable: "distributed_exp_hist",
|
|
MetadataTable: "distributed_metadata",
|
|
}
|
|
}
|