mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Use ptutil for safelog and prometheus rounded metrics
* Related: #40354
This commit is contained in:
parent
7bd3e31d7e
commit
a9df5dd71a
12 changed files with 35 additions and 380 deletions
|
@ -27,8 +27,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/ptutil/safelog"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/namematcher"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/safelog"
|
||||
"golang.org/x/crypto/acme/autocert"
|
||||
)
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/geoip"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/ptutil/safeprom"
|
||||
"gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/messages"
|
||||
)
|
||||
|
||||
|
@ -330,14 +331,14 @@ func sumMapValues(m *map[messages.RendezvousMethod]uint) uint {
|
|||
type PromMetrics struct {
|
||||
registry *prometheus.Registry
|
||||
ProxyTotal *prometheus.CounterVec
|
||||
ProxyPollTotal *RoundedCounterVec
|
||||
ClientPollTotal *RoundedCounterVec
|
||||
ProxyPollTotal *safeprom.RoundedCounterVec
|
||||
ClientPollTotal *safeprom.RoundedCounterVec
|
||||
AvailableProxies *prometheus.GaugeVec
|
||||
|
||||
ProxyPollWithRelayURLExtensionTotal *RoundedCounterVec
|
||||
ProxyPollWithoutRelayURLExtensionTotal *RoundedCounterVec
|
||||
ProxyPollWithRelayURLExtensionTotal *safeprom.RoundedCounterVec
|
||||
ProxyPollWithoutRelayURLExtensionTotal *safeprom.RoundedCounterVec
|
||||
|
||||
ProxyPollRejectedForRelayURLExtensionTotal *RoundedCounterVec
|
||||
ProxyPollRejectedForRelayURLExtensionTotal *safeprom.RoundedCounterVec
|
||||
}
|
||||
|
||||
// Initialize metrics for prometheus exporter
|
||||
|
@ -364,7 +365,7 @@ func initPrometheus() *PromMetrics {
|
|||
[]string{"type", "nat"},
|
||||
)
|
||||
|
||||
promMetrics.ProxyPollTotal = NewRoundedCounterVec(
|
||||
promMetrics.ProxyPollTotal = safeprom.NewRoundedCounterVec(
|
||||
prometheus.CounterOpts{
|
||||
Namespace: prometheusNamespace,
|
||||
Name: "rounded_proxy_poll_total",
|
||||
|
@ -373,7 +374,7 @@ func initPrometheus() *PromMetrics {
|
|||
[]string{"nat", "status"},
|
||||
)
|
||||
|
||||
promMetrics.ProxyPollWithRelayURLExtensionTotal = NewRoundedCounterVec(
|
||||
promMetrics.ProxyPollWithRelayURLExtensionTotal = safeprom.NewRoundedCounterVec(
|
||||
prometheus.CounterOpts{
|
||||
Namespace: prometheusNamespace,
|
||||
Name: "rounded_proxy_poll_with_relay_url_extension_total",
|
||||
|
@ -382,7 +383,7 @@ func initPrometheus() *PromMetrics {
|
|||
[]string{"nat", "type"},
|
||||
)
|
||||
|
||||
promMetrics.ProxyPollWithoutRelayURLExtensionTotal = NewRoundedCounterVec(
|
||||
promMetrics.ProxyPollWithoutRelayURLExtensionTotal = safeprom.NewRoundedCounterVec(
|
||||
prometheus.CounterOpts{
|
||||
Namespace: prometheusNamespace,
|
||||
Name: "rounded_proxy_poll_without_relay_url_extension_total",
|
||||
|
@ -391,7 +392,7 @@ func initPrometheus() *PromMetrics {
|
|||
[]string{"nat", "type"},
|
||||
)
|
||||
|
||||
promMetrics.ProxyPollRejectedForRelayURLExtensionTotal = NewRoundedCounterVec(
|
||||
promMetrics.ProxyPollRejectedForRelayURLExtensionTotal = safeprom.NewRoundedCounterVec(
|
||||
prometheus.CounterOpts{
|
||||
Namespace: prometheusNamespace,
|
||||
Name: "rounded_proxy_poll_rejected_relay_url_extension_total",
|
||||
|
@ -400,7 +401,7 @@ func initPrometheus() *PromMetrics {
|
|||
[]string{"nat", "type"},
|
||||
)
|
||||
|
||||
promMetrics.ClientPollTotal = NewRoundedCounterVec(
|
||||
promMetrics.ClientPollTotal = safeprom.NewRoundedCounterVec(
|
||||
prometheus.CounterOpts{
|
||||
Namespace: prometheusNamespace,
|
||||
Name: "rounded_client_poll_total",
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
/*
|
||||
Implements some additional prometheus metrics that we need for privacy preserving
|
||||
counts of users and proxies
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
dto "github.com/prometheus/client_model/go"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// New Prometheus counter type that produces rounded counts of metrics
|
||||
// for privacy preserving reasons
|
||||
type RoundedCounter interface {
|
||||
prometheus.Metric
|
||||
|
||||
Inc()
|
||||
}
|
||||
|
||||
type roundedCounter struct {
|
||||
total uint64 //reflects the true count
|
||||
value uint64 //reflects the rounded count
|
||||
|
||||
desc *prometheus.Desc
|
||||
labelPairs []*dto.LabelPair
|
||||
}
|
||||
|
||||
// Implements the RoundedCounter interface
|
||||
func (c *roundedCounter) Inc() {
|
||||
atomic.AddUint64(&c.total, 1)
|
||||
if c.total > c.value {
|
||||
atomic.AddUint64(&c.value, 8)
|
||||
}
|
||||
}
|
||||
|
||||
// Implements the prometheus.Metric interface
|
||||
func (c *roundedCounter) Desc() *prometheus.Desc {
|
||||
return c.desc
|
||||
}
|
||||
|
||||
// Implements the prometheus.Metric interface
|
||||
func (c *roundedCounter) Write(m *dto.Metric) error {
|
||||
m.Label = c.labelPairs
|
||||
|
||||
m.Counter = &dto.Counter{Value: proto.Float64(float64(c.value))}
|
||||
return nil
|
||||
}
|
||||
|
||||
// New prometheus vector type that will track RoundedCounter metrics
|
||||
// accross multiple labels
|
||||
type RoundedCounterVec struct {
|
||||
*prometheus.MetricVec
|
||||
}
|
||||
|
||||
func NewRoundedCounterVec(opts prometheus.CounterOpts, labelNames []string) *RoundedCounterVec {
|
||||
desc := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
|
||||
opts.Help,
|
||||
labelNames,
|
||||
opts.ConstLabels,
|
||||
)
|
||||
return &RoundedCounterVec{
|
||||
MetricVec: prometheus.NewMetricVec(desc, func(lvs ...string) prometheus.Metric {
|
||||
if len(lvs) != len(labelNames) {
|
||||
panic("inconsistent cardinality")
|
||||
}
|
||||
return &roundedCounter{desc: desc, labelPairs: prometheus.MakeLabelPairs(desc, lvs)}
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to return the underlying RoundedCounter metric from MetricVec
|
||||
func (v *RoundedCounterVec) With(labels prometheus.Labels) RoundedCounter {
|
||||
metric, err := v.GetMetricWith(labels)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return metric.(RoundedCounter)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue