-
Notifications
You must be signed in to change notification settings - Fork 211
/
connections.go
81 lines (67 loc) · 2.64 KB
/
connections.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package metrics
import (
"strings"
"time"
"github.com/libp2p/go-libp2p/core/network"
ma "github.com/multiformats/go-multiaddr"
"github.com/spacemeshos/go-spacemesh/metrics"
"github.com/spacemeshos/go-spacemesh/metrics/public"
)
var (
connections = metrics.NewGauge("total_connections", subsystem, "Total number of connections", nil)
streamsPerProtocol = metrics.NewGauge(
"streams_per_protocol",
subsystem,
"Number of streams per protocol",
[]string{"protocol"},
)
durationHistogram = metrics.NewHistogram(
"requests_duration",
subsystem,
"Histogram of server request durations per protocol (seconds)",
[]string{"protocol"},
)
// DroppedConnectionsValidationReject is incremented every time a
// connection is dropped due to an ErrValidationReject result.
DroppedConnectionsValidationReject = metrics.NewCounter(
"dropped_connections_validation_reject",
subsystem,
"Connections dropped due to ErrValidationReject result",
nil,
).WithLabelValues()
)
// ConnectionsMeeter stores the number of connections for node.
// number of connections
// number of streams per each protocol
// histogram for server request durations for each protocol.
type ConnectionsMeeter struct{}
// NewConnectionsMeeter returns a new ConnectionsMeeter.
func NewConnectionsMeeter() *ConnectionsMeeter {
return &ConnectionsMeeter{}
}
// Listen called when network starts listening on an addr.
func (c *ConnectionsMeeter) Listen(network.Network, ma.Multiaddr) {}
// ListenClose called when network stops listening on an addr.
func (c *ConnectionsMeeter) ListenClose(network.Network, ma.Multiaddr) {}
// Connected called when a connection opened.
func (c *ConnectionsMeeter) Connected(_ network.Network, conn network.Conn) {
public.Connections.WithLabelValues(strings.ToLower(conn.Stat().Direction.String())).Inc()
connections.WithLabelValues().Inc()
}
// Disconnected called when a connection closed.
func (c *ConnectionsMeeter) Disconnected(_ network.Network, conn network.Conn) {
public.Connections.WithLabelValues(strings.ToLower(conn.Stat().Direction.String())).Dec()
connections.WithLabelValues().Dec()
}
// OpenedStream called when a stream opened.
func (c *ConnectionsMeeter) OpenedStream(_ network.Network, str network.Stream) {
streamsPerProtocol.WithLabelValues(string(str.Protocol())).Inc()
}
// ClosedStream called when a stream closed.
func (c *ConnectionsMeeter) ClosedStream(_ network.Network, str network.Stream) {
protocolID := string(str.Protocol())
streamsPerProtocol.WithLabelValues(protocolID).Dec()
// log stream duration
duration := time.Since(str.Stat().Opened)
durationHistogram.WithLabelValues(protocolID).Observe(duration.Seconds())
}