Skip to content

Commit 4e662be

Browse files
committed
[refactor] Minor clean-up of jaegertracing#2657
Signed-off-by: Yuri Shkuro <github@ysh.us>
1 parent b1ecb5b commit 4e662be

File tree

3 files changed

+53
-82
lines changed

3 files changed

+53
-82
lines changed

cmd/agent/app/reporter/connect_metrics.go

+24-12
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
package reporter
1616

1717
import (
18+
"expvar"
19+
1820
"github.com/uber/jaeger-lib/metrics"
19-
"go.uber.org/zap"
2021
)
2122

2223
type connectMetrics struct {
@@ -29,26 +30,37 @@ type connectMetrics struct {
2930

3031
// ConnectMetrics include connectMetrics necessary params if want to modify metrics of connectMetrics, must via ConnectMetrics API
3132
type ConnectMetrics struct {
32-
Logger *zap.Logger // required
33-
MetricsFactory metrics.Factory // required
34-
connectMetrics *connectMetrics
33+
metrics connectMetrics
34+
target *expvar.String
3535
}
3636

3737
// NewConnectMetrics will be initialize ConnectMetrics
38-
func (r *ConnectMetrics) NewConnectMetrics() {
39-
r.connectMetrics = new(connectMetrics)
40-
r.MetricsFactory = r.MetricsFactory.Namespace(metrics.NSOptions{Name: "connection_status"})
41-
metrics.MustInit(r.connectMetrics, r.MetricsFactory, nil)
38+
func NewConnectMetrics(mf metrics.Factory) *ConnectMetrics {
39+
cm := &ConnectMetrics{}
40+
metrics.MustInit(&cm.metrics, mf.Namespace(metrics.NSOptions{Name: "connection_status"}), nil)
41+
42+
if r := expvar.Get("gRPCTarget"); r == nil {
43+
cm.target = expvar.NewString("gRPCTarget")
44+
} else {
45+
cm.target = r.(*expvar.String)
46+
}
47+
48+
return cm
4249
}
4350

4451
// OnConnectionStatusChange used for pass the status parameter when connection is changed
4552
// 0 is disconnected, 1 is connected
4653
// For quick view status via use `sum(jaeger_agent_connection_status_collector_connected{}) by (instance) > bool 0`
47-
func (r *ConnectMetrics) OnConnectionStatusChange(connected bool) {
54+
func (cm *ConnectMetrics) OnConnectionStatusChange(connected bool) {
4855
if connected {
49-
r.connectMetrics.Status.Update(1)
50-
r.connectMetrics.Reconnects.Inc(1)
56+
cm.metrics.Status.Update(1)
57+
cm.metrics.Reconnects.Inc(1)
5158
} else {
52-
r.connectMetrics.Status.Update(0)
59+
cm.metrics.Status.Update(0)
5360
}
5461
}
62+
63+
// RecordTarget writes the current connection target to an expvar field.
64+
func (cm *ConnectMetrics) RecordTarget(target string) {
65+
cm.target.Set(target)
66+
}

cmd/agent/app/reporter/connect_metrics_test.go

+23-48
Original file line numberDiff line numberDiff line change
@@ -15,67 +15,42 @@
1515
package reporter
1616

1717
import (
18+
"expvar"
1819
"testing"
1920
"time"
2021

2122
"github.com/stretchr/testify/assert"
2223
"github.com/uber/jaeger-lib/metrics/metricstest"
2324
)
2425

25-
type connectMetricsTest struct {
26-
mf *metricstest.Factory
27-
}
28-
29-
func testConnectMetrics(fn func(tr *connectMetricsTest, r *ConnectMetrics)) {
30-
testConnectMetricsWithParams(&ConnectMetrics{}, fn)
31-
}
32-
33-
func testConnectMetricsWithParams(cm *ConnectMetrics, fn func(tr *connectMetricsTest, r *ConnectMetrics)) {
26+
func TestConnectMetrics(t *testing.T) {
3427
mf := metricstest.NewFactory(time.Hour)
35-
cm.MetricsFactory = mf
36-
cm.NewConnectMetrics()
28+
cm := NewConnectMetrics(mf)
3729

38-
tr := &connectMetricsTest{
39-
mf: mf,
30+
getGauge := func() map[string]int64 {
31+
_, gauges := mf.Snapshot()
32+
return gauges
4033
}
4134

42-
fn(tr, cm)
43-
}
44-
45-
func testCollectorConnected(r *ConnectMetrics) {
46-
r.OnConnectionStatusChange(true)
47-
}
48-
49-
func testCollectorAborted(r *ConnectMetrics) {
50-
r.OnConnectionStatusChange(false)
51-
}
52-
53-
func TestConnectMetrics(t *testing.T) {
54-
55-
testConnectMetrics(func(tr *connectMetricsTest, r *ConnectMetrics) {
56-
getGauge := func() map[string]int64 {
57-
_, gauges := tr.mf.Snapshot()
58-
return gauges
59-
}
60-
61-
getCount := func() map[string]int64 {
62-
counts, _ := tr.mf.Snapshot()
63-
return counts
64-
}
35+
getCount := func() map[string]int64 {
36+
counts, _ := mf.Snapshot()
37+
return counts
38+
}
6539

66-
// testing connect aborted
67-
testCollectorAborted(r)
68-
assert.EqualValues(t, 0, getGauge()["connection_status.collector_connected"])
40+
// no connection
41+
cm.OnConnectionStatusChange(false)
42+
assert.EqualValues(t, 0, getGauge()["connection_status.collector_connected"])
6943

70-
// testing connect connected
71-
testCollectorConnected(r)
72-
assert.EqualValues(t, 1, getGauge()["connection_status.collector_connected"])
73-
assert.EqualValues(t, 1, getCount()["connection_status.collector_reconnects"])
44+
// first connection
45+
cm.OnConnectionStatusChange(true)
46+
assert.EqualValues(t, 1, getGauge()["connection_status.collector_connected"])
47+
assert.EqualValues(t, 1, getCount()["connection_status.collector_reconnects"])
7448

75-
// testing reconnect counts
76-
testCollectorAborted(r)
77-
testCollectorConnected(r)
78-
assert.EqualValues(t, 2, getCount()["connection_status.collector_reconnects"])
49+
// reconnect
50+
cm.OnConnectionStatusChange(false)
51+
cm.OnConnectionStatusChange(true)
52+
assert.EqualValues(t, 2, getCount()["connection_status.collector_reconnects"])
7953

80-
})
54+
cm.RecordTarget("collector-host")
55+
assert.Equal(t, `"collector-host"`, expvar.Get("gRPCTarget").String())
8156
}

cmd/agent/app/reporter/grpc/builder.go

+6-22
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ package grpc
1717
import (
1818
"context"
1919
"errors"
20-
"expvar"
2120
"fmt"
2221
"strings"
2322

24-
"github.com/grpc-ecosystem/go-grpc-middleware/retry"
23+
grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry"
2524
"github.com/uber/jaeger-lib/metrics"
2625
"go.uber.org/zap"
2726
"google.golang.org/grpc"
@@ -47,9 +46,6 @@ type ConnBuilder struct {
4746
DiscoveryMinPeers int
4847
Notifier discovery.Notifier
4948
Discoverer discovery.Discoverer
50-
51-
// for unit test and provide ConnectMetrics and outside call
52-
ConnectMetrics *reporter.ConnectMetrics
5349
}
5450

5551
// NewConnBuilder creates a new grpc connection builder.
@@ -104,38 +100,26 @@ func (b *ConnBuilder) CreateConnection(logger *zap.Logger, mFactory metrics.Fact
104100
return nil, err
105101
}
106102

107-
if b.ConnectMetrics == nil {
108-
cm := reporter.ConnectMetrics{
109-
Logger: logger,
110-
MetricsFactory: mFactory.Namespace(metrics.NSOptions{Name: "", Tags: map[string]string{"protocol": "grpc"}}),
111-
}
112-
cm.NewConnectMetrics()
113-
b.ConnectMetrics = &cm
114-
}
103+
connectMetrics := reporter.NewConnectMetrics(
104+
mFactory.Namespace(metrics.NSOptions{Tags: map[string]string{"protocol": "grpc"}}),
105+
)
115106

116107
go func(cc *grpc.ClientConn, cm *reporter.ConnectMetrics) {
117108
logger.Info("Checking connection to collector")
118-
var egt *expvar.String
119-
r := expvar.Get("gRPCTarget")
120-
if r == nil {
121-
egt = expvar.NewString("gRPCTarget")
122-
} else {
123-
egt = r.(*expvar.String)
124-
}
125109

126110
for {
127111
s := cc.GetState()
128112
if s == connectivity.Ready {
129113
cm.OnConnectionStatusChange(true)
130-
egt.Set(cc.Target())
114+
cm.RecordTarget(cc.Target())
131115
} else {
132116
cm.OnConnectionStatusChange(false)
133117
}
134118

135119
logger.Info("Agent collector connection state change", zap.String("dialTarget", dialTarget), zap.Stringer("status", s))
136120
cc.WaitForStateChange(context.Background(), s)
137121
}
138-
}(conn, b.ConnectMetrics)
122+
}(conn, connectMetrics)
139123

140124
return conn, nil
141125
}

0 commit comments

Comments
 (0)