Skip to content

Commit 55afd42

Browse files
Observer refactoring
1 parent c9d58a9 commit 55afd42

3 files changed

Lines changed: 34 additions & 17 deletions

File tree

pkg/metrics/observer.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,23 @@ import (
55
"time"
66
)
77

8-
// Source defines a source of metric data.
9-
type Source func() float64
8+
// ObserverInput defines a source of metric data.
9+
type ObserverInput func() float64
1010

11-
// Sink defines a destination of collected metric data.
12-
type Sink interface {
11+
// ObserverOutput defines a destination of collected metric data.
12+
type ObserverOutput interface {
1313
Set(value float64)
1414
}
1515

16-
// Observe triggers a cyclic metric observation goroutine.
17-
func Observe(
16+
// Observer represent a definition of a cyclic metric observation process.
17+
type Observer struct {
18+
input ObserverInput
19+
output ObserverOutput
20+
}
21+
22+
// Observe triggers a cyclic metric observation process.
23+
func (o *Observer) Observe(
1824
ctx context.Context,
19-
source Source,
20-
sink Sink,
2125
tick time.Duration,
2226
) {
2327
go func() {
@@ -27,7 +31,7 @@ func Observe(
2731
for {
2832
select {
2933
case <-ticker.C:
30-
sink.Set(source())
34+
o.output.Set(o.input())
3135
case <-ctx.Done():
3236
return
3337
}

pkg/metrics/observer_test.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@ import (
77
)
88

99
func TestObserve(t *testing.T) {
10+
input := func() float64 {
11+
return 5000
12+
}
1013
gauge := &Gauge{}
1114
ctx, _ := context.WithTimeout(context.Background(), 5*time.Millisecond)
1215

13-
Observe(
14-
ctx,
15-
func() float64 {
16-
return 5000
17-
},
18-
gauge,
19-
1*time.Millisecond,
20-
)
16+
observer := &Observer{input, gauge}
17+
18+
observer.Observe(ctx, 1*time.Millisecond)
2119

2220
<-ctx.Done()
2321

pkg/metrics/registry.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,18 @@ func (r *Registry) NewGauge(name string) (*Gauge, error) {
100100
r.metrics[name] = gauge
101101
return gauge, nil
102102
}
103+
104+
func (r *Registry) NewGaugeObserver(
105+
name string,
106+
input ObserverInput,
107+
) (*Observer, error) {
108+
gauge, err := r.NewGauge(name)
109+
if err != nil {
110+
return nil, err
111+
}
112+
113+
return &Observer{
114+
input: input,
115+
output: gauge,
116+
}, nil
117+
}

0 commit comments

Comments
 (0)