pomerium/internal/zero/connect-mux/config.go
Denis Mishin 0503b41108
zero/connect: add re-run health checks command (#5219)
* zero/connect: add run health checks and shutdown commands

* fix proto

* trigger re-run on command

* add handler

* rename runPeriodicHealthChecksLeased
2024-08-22 16:17:53 -04:00

78 lines
2.4 KiB
Go

package mux
import (
"context"
"github.com/pomerium/pomerium/pkg/zero/connect"
)
type config struct {
onConnected func(ctx context.Context)
onDisconnected func(ctx context.Context)
onBundleUpdated func(ctx context.Context, key string)
onBootstrapConfigUpdated func(ctx context.Context)
onRunHealthChecks func(ctx context.Context)
onTelemetryRequested func(ctx context.Context, req *connect.TelemetryRequest)
}
// WatchOption allows to specify callbacks for various events
type WatchOption func(*config)
// WithOnConnected sets the callback for when the connection is established
func WithOnConnected(onConnected func(context.Context)) WatchOption {
return func(cfg *config) {
cfg.onConnected = onConnected
}
}
// WithOnDisconnected sets the callback for when the connection is lost
func WithOnDisconnected(onDisconnected func(context.Context)) WatchOption {
return func(cfg *config) {
cfg.onDisconnected = onDisconnected
}
}
// WithOnBundleUpdated sets the callback for when the bundle is updated
func WithOnBundleUpdated(onBundleUpdated func(ctx context.Context, key string)) WatchOption {
return func(cfg *config) {
cfg.onBundleUpdated = onBundleUpdated
}
}
// WithOnBootstrapConfigUpdated sets the callback for when the bootstrap config is updated
func WithOnBootstrapConfigUpdated(onBootstrapConfigUpdated func(context.Context)) WatchOption {
return func(cfg *config) {
cfg.onBootstrapConfigUpdated = onBootstrapConfigUpdated
}
}
// WithOnRunHealthChecks sets the callback for when health checks are run
func WithOnRunHealthChecks(onRunHealthChecks func(context.Context)) WatchOption {
return func(cfg *config) {
cfg.onRunHealthChecks = onRunHealthChecks
}
}
func WithOnTelemetryRequested(onTelemetryRequested func(context.Context, *connect.TelemetryRequest)) WatchOption {
return func(cfg *config) {
cfg.onTelemetryRequested = onTelemetryRequested
}
}
func newConfig(opts ...WatchOption) *config {
cfg := &config{}
for _, opt := range []WatchOption{
WithOnConnected(func(_ context.Context) {}),
WithOnDisconnected(func(_ context.Context) {}),
WithOnBundleUpdated(func(_ context.Context, _ string) {}),
WithOnBootstrapConfigUpdated(func(_ context.Context) {}),
WithOnRunHealthChecks(func(_ context.Context) {}),
WithOnTelemetryRequested(func(_ context.Context, _ *connect.TelemetryRequest) {}),
} {
opt(cfg)
}
for _, opt := range opts {
opt(cfg)
}
return cfg
}