metrics infrastructure iteration (#74, #76)

This commit is contained in:
Michael Quigley 2022-10-18 11:07:18 -04:00
parent 1542e0131f
commit 8c214fcdd8
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
3 changed files with 41 additions and 22 deletions

View File

@ -3,19 +3,28 @@ package frontend
import (
"github.com/michaelquigley/cf"
"github.com/pkg/errors"
"time"
)
type Config struct {
Identity string
MetricsService string
Metrics *MetricsConfig
Address string
HostMatch string
}
type MetricsConfig struct {
Service string
DropoutTimeout time.Duration
}
func DefaultConfig() *Config {
return &Config{
Identity: "frontend",
MetricsService: "metrics",
Metrics: &MetricsConfig{
Service: "metrics",
DropoutTimeout: 30 * time.Second,
},
Address: "0.0.0.0:8080",
}
}

View File

@ -28,7 +28,7 @@ type httpListen struct {
}
func NewHTTP(cfg *Config) (*httpListen, error) {
ma, err := newMetricsAgent(cfg.Identity, cfg.MetricsService)
ma, err := newMetricsAgent(cfg)
if err != nil {
return nil, err
}

View File

@ -12,7 +12,7 @@ import (
)
type metricsAgent struct {
metricsServiceName string
cfg *Config
metrics *model.Metrics
updates chan metricsUpdate
zCtx ziti.Context
@ -24,19 +24,19 @@ type metricsUpdate struct {
bytesWritten int64
}
func newMetricsAgent(identityName, metricsServiceName string) (*metricsAgent, error) {
zif, err := zrokdir.ZitiIdentityFile(identityName)
func newMetricsAgent(cfg *Config) (*metricsAgent, error) {
zif, err := zrokdir.ZitiIdentityFile(cfg.Identity)
if err != nil {
return nil, errors.Wrapf(err, "error getting '%v' identity file", identityName)
return nil, errors.Wrapf(err, "error getting '%v' identity file", cfg.Identity)
}
zCfg, err := config.NewFromFile(zif)
if err != nil {
return nil, errors.Wrapf(err, "error loading '%v' identity", identityName)
return nil, errors.Wrapf(err, "error loading '%v' identity", cfg.Identity)
}
logrus.Infof("loaded '%v' identity", identityName)
logrus.Infof("loaded '%v' identity", cfg.Identity)
return &metricsAgent{
metricsServiceName: metricsServiceName,
metrics: &model.Metrics{Namespace: identityName},
cfg: cfg,
metrics: &model.Metrics{Namespace: cfg.Identity},
updates: make(chan metricsUpdate, 10240),
zCtx: ziti.NewContextWithConfig(zCfg),
}, nil
@ -56,6 +56,16 @@ func (ma *metricsAgent) run() {
if err := ma.sendMetrics(); err != nil {
logrus.Errorf("error sending metrics: %v", err)
}
var dropouts []string
for k, v := range ma.metrics.Sessions {
if time.Now().Sub(time.UnixMilli(v.LastUpdate)) > ma.cfg.Metrics.DropoutTimeout {
dropouts = append(dropouts, k)
}
}
for _, dropout := range dropouts {
delete(ma.metrics.Sessions, dropout)
logrus.Infof("dropout: %v", dropout)
}
}
}
}
@ -66,7 +76,7 @@ func (ma *metricsAgent) sendMetrics() error {
if err != nil {
return errors.Wrap(err, "error marshaling metrics")
}
conn, err := ma.zCtx.Dial(ma.metricsServiceName)
conn, err := ma.zCtx.Dial(ma.cfg.Metrics.Service)
if err != nil {
return errors.Wrap(err, "error connecting to metrics service")
}