mv non-core components to extended repo

This commit is contained in:
ginuerzh
2022-03-14 17:43:37 +08:00
parent bfc1f8472c
commit 5c5af49b0e
279 changed files with 608 additions and 14301 deletions

View File

@ -1,13 +1,19 @@
package metrics
import (
"os"
"github.com/prometheus/client_golang/prometheus"
)
var (
metrics = newMetrics()
metrics *Metrics
)
func SetGlobal(m *Metrics) {
metrics = m
}
type Gauge interface {
Inc()
Dec()
@ -25,7 +31,8 @@ type Observer interface {
}
type Metrics struct {
services prometheus.Gauge
host string
services *prometheus.GaugeVec
requests *prometheus.CounterVec
requestsInFlight *prometheus.GaugeVec
requestSeconds *prometheus.HistogramVec
@ -34,27 +41,30 @@ type Metrics struct {
handlerErrors *prometheus.CounterVec
}
func newMetrics() *Metrics {
func NewMetrics() *Metrics {
host, _ := os.Hostname()
m := &Metrics{
services: prometheus.NewGauge(
host: host,
services: prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "gost_services",
Help: "Current number of services",
}),
},
[]string{"host"}),
requests: prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "gost_service_requests_total",
Help: "Total number of requests",
},
[]string{"service"}),
[]string{"host", "service"}),
requestsInFlight: prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "gost_service_requests_in_flight",
Help: "Current in-flight requests",
},
[]string{"service"}),
[]string{"host", "service"}),
requestSeconds: prometheus.NewHistogramVec(
prometheus.HistogramOpts{
@ -64,25 +74,25 @@ func newMetrics() *Metrics {
.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 15, 30, 60,
},
},
[]string{"service"}),
[]string{"host", "service"}),
inputBytes: prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "gost_service_transfer_input_bytes_total",
Help: "Total service input data transfer size in bytes",
},
[]string{"service"}),
[]string{"host", "service"}),
outputBytes: prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "gost_service_transfer_output_bytes_total",
Help: "Total service output data transfer size in bytes",
},
[]string{"service"}),
[]string{"host", "service"}),
handlerErrors: prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "gost_service_handler_errors_total",
Help: "Total service handler errors",
},
[]string{"service"}),
[]string{"host", "service"}),
}
prometheus.MustRegister(m.services)
prometheus.MustRegister(m.requests)
@ -95,29 +105,78 @@ func newMetrics() *Metrics {
}
func Services() Gauge {
return metrics.services
if metrics == nil || metrics.services == nil {
return nilGauge
}
return metrics.services.
With(prometheus.Labels{
"host": metrics.host,
})
}
func Requests(service string) Counter {
return metrics.requests.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.requests == nil {
return nilCounter
}
return metrics.requests.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}
func RequestsInFlight(service string) Gauge {
return metrics.requestsInFlight.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.requestsInFlight == nil {
return nilGauge
}
return metrics.requestsInFlight.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}
func RequestSeconds(service string) Observer {
return metrics.requestSeconds.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.requestSeconds == nil {
return nilObserver
}
return metrics.requestSeconds.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}
func InputBytes(service string) Counter {
return metrics.inputBytes.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.inputBytes == nil {
return nilCounter
}
return metrics.inputBytes.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}
func OutputBytes(service string) Counter {
return metrics.outputBytes.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.outputBytes == nil {
return nilCounter
}
return metrics.outputBytes.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}
func HandlerErrors(service string) Counter {
return metrics.handlerErrors.With(prometheus.Labels{"service": service})
if metrics == nil || metrics.handlerErrors == nil {
return nilCounter
}
return metrics.handlerErrors.
With(prometheus.Labels{
"host": metrics.host,
"service": service,
})
}

23
pkg/metrics/nop.go Normal file
View File

@ -0,0 +1,23 @@
package metrics
var (
nilGauge = &nopGauge{}
nilCounter = &nopCounter{}
nilObserver = &nopObserver{}
)
type nopGauge struct{}
func (*nopGauge) Inc() {}
func (*nopGauge) Dec() {}
func (*nopGauge) Add(v float64) {}
func (*nopGauge) Set(v float64) {}
type nopCounter struct{}
func (*nopCounter) Inc() {}
func (*nopCounter) Add(v float64) {}
type nopObserver struct{}
func (*nopObserver) Observe(v float64) {}

View File

@ -4,7 +4,7 @@ import (
"net"
"net/http"
"github.com/go-gost/gost/pkg/service"
"github.com/go-gost/gost/v3/pkg/service"
"github.com/prometheus/client_golang/prometheus/promhttp"
)