prysm-pulse/shared/p2p/adapter/metric/metric.go
Preston Van Loon 10f45744d6
Use gogo protobuf as the protoc compiler (#1165)
* first commit, remote att types

* no more agg attestation proto

* regen mock

* only attestations

* proto

* att process

* fix att references

* more tests passing

* use att protos

* complete

* change visibility

* use gogoprotobu
2018-12-23 15:34:59 -05:00

54 lines
1.4 KiB
Go

// Package metric contain some prometheus collectors for p2p services.
package metric
import (
"fmt"
"time"
"github.com/gogo/protobuf/proto"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prysmaticlabs/prysm/shared/p2p"
)
var (
messagesCompleted = promauto.NewCounterVec(
prometheus.CounterOpts{
Name: "p2p_message_sent_total",
Help: "Count of messages sent.",
},
[]string{"message"},
)
sendLatency = promauto.NewHistogramVec(
prometheus.HistogramOpts{
Name: "p2p_message_sent_latency_seconds",
Help: "Latency of messages sent.",
Buckets: []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 25, 50, 100},
},
[]string{"message"},
)
messageSize = promauto.NewHistogramVec(
prometheus.HistogramOpts{
Name: "p2p_message_received_bytes",
Help: "Size of received messages.",
Buckets: prometheus.ExponentialBuckets(32, 32, 6),
},
[]string{"message"},
)
)
// New create and initialize a metric adapter for the p2p service.
func New() p2p.Adapter {
return func(next p2p.Handler) p2p.Handler {
return func(msg p2p.Message) {
start := time.Now()
messageName := fmt.Sprintf("%T", msg.Data)
messageSize.WithLabelValues(messageName).Observe(float64(proto.Size(msg.Data)))
next(msg)
sendLatency.WithLabelValues(messageName).Observe(time.Since(start).Seconds())
messagesCompleted.WithLabelValues(messageName).Inc()
}
}
}