Skip to content

Commit

Permalink
Receive interface instead of concrete struct in dbrutil.NewSlowQueryL…
Browse files Browse the repository at this point in the history
…ogEventReceiver()
  • Loading branch information
vasayxtx committed Feb 20, 2025
1 parent fcd9b61 commit 1e766a5
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 13 deletions.
3 changes: 2 additions & 1 deletion dbrutil/composite_event_receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import (
"github.com/gocraft/dbr/v2"
)

// CompositeEventReceiver represents a composition of event receivers from dbr package and implements Composite design pattern.
// CompositeEventReceiver represents a composition of event receivers from dbr package
// and implements a Composite design pattern.
type CompositeEventReceiver struct {
Receivers []dbr.EventReceiver
}
Expand Down
14 changes: 10 additions & 4 deletions dbrutil/metrics.go → dbrutil/query_metrics_event_receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ package dbrutil
import (
"time"

"github.com/acronis/go-dbkit"
"github.com/gocraft/dbr/v2"
)

// MetricsCollector is an interface for collecting metrics about SQL queries.
type MetricsCollector interface {
ObserveQueryDuration(query string, duration time.Duration)
}

// QueryMetricsEventReceiverOpts consists options for QueryMetricsEventReceiver.
type QueryMetricsEventReceiverOpts struct {
AnnotationPrefix string
Expand All @@ -23,13 +27,15 @@ type QueryMetricsEventReceiverOpts struct {
// To be collected, SQL query should be annotated (comment starting with specified prefix).
type QueryMetricsEventReceiver struct {
*dbr.NullEventReceiver
metricsCollector dbkit.MetricsCollector
metricsCollector MetricsCollector
annotationPrefix string
annotationModifier func(string) string
}

// NewQueryMetricsEventReceiverWithOpts creates a new QueryMetricsEventReceiver with additinal options.
func NewQueryMetricsEventReceiverWithOpts(mc *dbkit.PrometheusMetrics, options QueryMetricsEventReceiverOpts) *QueryMetricsEventReceiver {
func NewQueryMetricsEventReceiverWithOpts(
mc MetricsCollector, options QueryMetricsEventReceiverOpts,
) *QueryMetricsEventReceiver {
return &QueryMetricsEventReceiver{
metricsCollector: mc,
annotationPrefix: options.AnnotationPrefix,
Expand All @@ -38,7 +44,7 @@ func NewQueryMetricsEventReceiverWithOpts(mc *dbkit.PrometheusMetrics, options Q
}

// NewQueryMetricsEventReceiver creates a new QueryMetricsEventReceiver.
func NewQueryMetricsEventReceiver(mc *dbkit.PrometheusMetrics, annotationPrefix string) *QueryMetricsEventReceiver {
func NewQueryMetricsEventReceiver(mc MetricsCollector, annotationPrefix string) *QueryMetricsEventReceiver {
options := QueryMetricsEventReceiverOpts{
AnnotationPrefix: annotationPrefix,
}
Expand Down
9 changes: 5 additions & 4 deletions dbrutil/slow.go → dbrutil/slow_query_log_event_receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"github.com/gocraft/dbr/v2"
)

// SlowQueryLogEventReceiverOpts consists options for SlowQueryLogEventReceiver.
// SlowQueryLogEventReceiverOpts contains options for SlowQueryLogEventReceiver.
type SlowQueryLogEventReceiverOpts struct {
AnnotationPrefix string
AnnotationModifier func(string) string
Expand All @@ -29,9 +29,10 @@ type SlowQueryLogEventReceiver struct {
annotationModifier func(string) string
}

// NewSlowQueryLogEventReceiverWithOpts creates a new SlowQueryLogEventReceiver with additinal options.
func NewSlowQueryLogEventReceiverWithOpts(logger log.FieldLogger, longQueryTime time.Duration,
options SlowQueryLogEventReceiverOpts) *SlowQueryLogEventReceiver {
// NewSlowQueryLogEventReceiverWithOpts creates a new SlowQueryLogEventReceiver with additional options.
func NewSlowQueryLogEventReceiverWithOpts(
logger log.FieldLogger, longQueryTime time.Duration, options SlowQueryLogEventReceiverOpts,
) *SlowQueryLogEventReceiver {
return &SlowQueryLogEventReceiver{
NullEventReceiver: &dbr.NullEventReceiver{},
logger: logger,
Expand Down
4 changes: 0 additions & 4 deletions metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ import (
"github.com/prometheus/client_golang/prometheus"
)

type MetricsCollector interface {
ObserveQueryDuration(query string, duration time.Duration)
}

// PrometheusMetricsLabelQuery is a label name for SQL query in Prometheus metrics.
const PrometheusMetricsLabelQuery = "query"

Expand Down

0 comments on commit 1e766a5

Please sign in to comment.