Initial support for tracking connection metrics
This commit is contained in:
@@ -25,6 +25,7 @@ var (
|
||||
cpuProfile = flag.String("cpu-profile", "", "Enables CPU profiling and writes to given path")
|
||||
debug = flag.Bool("debug", false, "Enable debug logs")
|
||||
connRateLimit = flag.Int("connection-rate-limit", 1, "Max number of connections to allow per second")
|
||||
metricsBackend = flag.String("metrics-backend", "discard", "Backend to use for metrics exposure/publishing: discard,expvar")
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -67,6 +68,8 @@ func main() {
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
||||
metricsBuilder := NewMetricsBuilder()
|
||||
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
@@ -75,7 +78,8 @@ func main() {
|
||||
if *connRateLimit < 1 {
|
||||
*connRateLimit = 1
|
||||
}
|
||||
server.Connector.StartAcceptingConnections(ctx, net.JoinHostPort("", strconv.Itoa(*port)), *connRateLimit)
|
||||
connector := server.NewConnector(metricsBuilder.BuildConnectorMetrics())
|
||||
connector.StartAcceptingConnections(ctx, net.JoinHostPort("", strconv.Itoa(*port)), *connRateLimit)
|
||||
|
||||
if *apiBinding != "" {
|
||||
server.StartApiServer(*apiBinding)
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
discardMetrics "github.com/go-kit/kit/metrics/discard"
|
||||
expvarMetrics "github.com/go-kit/kit/metrics/expvar"
|
||||
"github.com/itzg/mc-router/server"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type MetricsBuilder interface {
|
||||
BuildConnectorMetrics() *server.ConnectorMetrics
|
||||
}
|
||||
|
||||
func NewMetricsBuilder() MetricsBuilder {
|
||||
switch *metricsBackend {
|
||||
case "discard":
|
||||
return &discardMetricsBuilder{}
|
||||
case "expvar":
|
||||
return &expvarMetricsBuilder{}
|
||||
default:
|
||||
logrus.Fatalf("Unsupported metrics backend: %s", metricsBackend)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
type expvarMetricsBuilder struct {
|
||||
}
|
||||
|
||||
func (b expvarMetricsBuilder) BuildConnectorMetrics() *server.ConnectorMetrics {
|
||||
return &server.ConnectorMetrics{
|
||||
Errors: expvarMetrics.NewCounter("errors").With("subsystem", "connector"),
|
||||
BytesTransmitted: expvarMetrics.NewCounter("bytes"),
|
||||
Connections: expvarMetrics.NewCounter("connections"),
|
||||
ActiveConnections: expvarMetrics.NewGauge("active_connections"),
|
||||
}
|
||||
}
|
||||
|
||||
type discardMetricsBuilder struct {
|
||||
}
|
||||
|
||||
func (b discardMetricsBuilder) BuildConnectorMetrics() *server.ConnectorMetrics {
|
||||
return &server.ConnectorMetrics{
|
||||
Errors: discardMetrics.NewCounter(),
|
||||
BytesTransmitted: discardMetrics.NewCounter(),
|
||||
Connections: discardMetrics.NewCounter(),
|
||||
ActiveConnections: discardMetrics.NewGauge(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user