Add production features: slog adapter, scan helpers, slow query logging, pool stats, tracer passthrough, test tx isolation
Some checks failed
CI / test (push) Failing after 13s

- slog.go: SlogLogger adapts *slog.Logger to dbx.Logger interface
- scan.go: Collect[T] and CollectOne[T] generic helpers using pgx.RowToStructByName
- cluster.go: slow query logging via Config.SlowQueryThreshold (Warn level in queryEnd)
- stats.go: PoolStats with Cluster.Stats() aggregating pool stats across all nodes
- config.go/node.go: NodeConfig.Tracer passthrough for pgx.QueryTracer (OpenTelemetry)
- options.go: WithSlowQueryThreshold and WithTracer functional options
- dbxtest/tx.go: RunInTx runs callback in always-rolled-back transaction for test isolation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-23 00:19:26 +03:00
parent 7d25e1b73e
commit 2c9af28548
16 changed files with 495 additions and 29 deletions

View File

@@ -1,5 +1,11 @@
package dbx
import (
"time"
"github.com/jackc/pgx/v5"
)
// Option is a functional option for NewCluster.
type Option func(*Config)
@@ -31,6 +37,25 @@ func WithHealthCheck(h HealthCheckConfig) Option {
}
}
// WithSlowQueryThreshold sets the threshold for slow query warnings.
// Queries taking longer than d will be logged at Warn level.
func WithSlowQueryThreshold(d time.Duration) Option {
return func(c *Config) {
c.SlowQueryThreshold = d
}
}
// WithTracer sets the pgx.QueryTracer on master and all replica configs.
// This enables OpenTelemetry integration via libraries like otelpgx.
func WithTracer(t pgx.QueryTracer) Option {
return func(c *Config) {
c.Master.Tracer = t
for i := range c.Replicas {
c.Replicas[i].Tracer = t
}
}
}
// ApplyOptions applies functional options to a Config.
func ApplyOptions(cfg *Config, opts ...Option) {
for _, o := range opts {