Skip to content

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jaronoff97 committed Sep 17, 2024
1 parent 8719954 commit fda6424
Show file tree
Hide file tree
Showing 7 changed files with 259 additions and 39 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ e2e-prometheuscr: chainsaw
# Target allocator end-to-tests
.PHONY: e2e-targetallocator
e2e-targetallocator: chainsaw
$(CHAINSAW) test --test-dir ./tests/e2e-targetallocator
$(CHAINSAW) test --apply-timeout 45s --assert-timeout 45s --cleanup-timeout 45s --delete-timeout 45s --error-timeout 45s --exec-timeout 45s --test-dir ./tests/e2e-targetallocator

# end-to-end-test for Annotations/Labels Filters
.PHONY: e2e-metadata-filters
Expand Down
74 changes: 74 additions & 0 deletions cmd/otel-allocator/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"time"

"github.com/go-logr/logr"
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
"github.com/prometheus/common/model"
promconfig "github.com/prometheus/prometheus/config"
_ "github.com/prometheus/prometheus/discovery/install"
Expand Down Expand Up @@ -58,6 +59,79 @@ type Config struct {
HTTPS HTTPSServerConfig `yaml:"https,omitempty"`
}

func (cfg *Config) GetPrometheus() *monitoringv1.Prometheus {
// we want to use endpointslices by default
serviceDiscoveryRole := monitoringv1.ServiceDiscoveryRole("EndpointSlice")
prom := &monitoringv1.Prometheus{
Spec: monitoringv1.PrometheusSpec{
CommonPrometheusFields: monitoringv1.CommonPrometheusFields{
ScrapeInterval: monitoringv1.Duration(cfg.PrometheusCR.ScrapeInterval.String()),
ServiceMonitorSelector: cfg.PrometheusCR.ServiceMonitorSelector,
PodMonitorSelector: cfg.PrometheusCR.PodMonitorSelector,
ServiceMonitorNamespaceSelector: cfg.PrometheusCR.ServiceMonitorNamespaceSelector,
PodMonitorNamespaceSelector: cfg.PrometheusCR.PodMonitorNamespaceSelector,
ServiceDiscoveryRole: &serviceDiscoveryRole,
},
},
}

// if there's no prom config set, just use the above defaults.
if cfg.PromConfig == nil {
return prom
}

// the prometheus-operator provides no automatic conversion for global fields
if len(cfg.PromConfig.GlobalConfig.ScrapeProtocols) > 0 {
var scrapeProtocols []monitoringv1.ScrapeProtocol
for _, protocol := range cfg.PromConfig.GlobalConfig.ScrapeProtocols {
scrapeProtocols = append(scrapeProtocols, monitoringv1.ScrapeProtocol(protocol))
}
prom.Spec.CommonPrometheusFields.ScrapeProtocols = scrapeProtocols
}
scrapeInterval := monitoringv1.Duration(cfg.PromConfig.GlobalConfig.ScrapeInterval.String())
if len(scrapeInterval) > 0 {
prom.Spec.CommonPrometheusFields.ScrapeInterval = scrapeInterval
}
prom.Spec.CommonPrometheusFields.ScrapeTimeout = monitoringv1.Duration(cfg.PromConfig.GlobalConfig.ScrapeTimeout.String())
if len(cfg.PromConfig.GlobalConfig.ExternalLabels) > 0 {
labels := map[string]string{}
for _, label := range cfg.PromConfig.GlobalConfig.ExternalLabels {
labels[label.Name] = label.Value
}
prom.Spec.CommonPrometheusFields.ExternalLabels = labels
}
if cfg.PromConfig.GlobalConfig.BodySizeLimit > 0 {
bodySizeLimit := monitoringv1.ByteSize(cfg.PromConfig.GlobalConfig.BodySizeLimit.String())
prom.Spec.CommonPrometheusFields.BodySizeLimit = &bodySizeLimit
}
if cfg.PromConfig.GlobalConfig.SampleLimit > 0 {
sampleLimit := uint64(cfg.PromConfig.GlobalConfig.SampleLimit)
prom.Spec.CommonPrometheusFields.SampleLimit = &sampleLimit
}
if cfg.PromConfig.GlobalConfig.TargetLimit > 0 {
targetLimit := uint64(cfg.PromConfig.GlobalConfig.TargetLimit)
prom.Spec.CommonPrometheusFields.TargetLimit = &targetLimit
}
if cfg.PromConfig.GlobalConfig.LabelLimit > 0 {
labelLimit := uint64(cfg.PromConfig.GlobalConfig.LabelLimit)
prom.Spec.CommonPrometheusFields.LabelLimit = &labelLimit
}
if cfg.PromConfig.GlobalConfig.LabelNameLengthLimit > 0 {
labelNameLengthLimit := uint64(cfg.PromConfig.GlobalConfig.LabelNameLengthLimit)
prom.Spec.CommonPrometheusFields.LabelNameLengthLimit = &labelNameLengthLimit
}
if cfg.PromConfig.GlobalConfig.LabelValueLengthLimit > 0 {
labelValueLengthLimit := uint64(cfg.PromConfig.GlobalConfig.LabelValueLengthLimit)
prom.Spec.CommonPrometheusFields.LabelValueLengthLimit = &labelValueLengthLimit
}
if cfg.PromConfig.GlobalConfig.KeepDroppedTargets > 0 {
keepDroppedTargets := uint64(cfg.PromConfig.GlobalConfig.KeepDroppedTargets)
prom.Spec.CommonPrometheusFields.KeepDroppedTargets = &keepDroppedTargets
}

return prom
}

type PrometheusCRConfig struct {
Enabled bool `yaml:"enabled,omitempty"`
PodMonitorSelector *metav1.LabelSelector `yaml:"pod_monitor_selector,omitempty"`
Expand Down
18 changes: 1 addition & 17 deletions cmd/otel-allocator/watcher/promOperator.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,7 @@ func NewPrometheusCRWatcher(ctx context.Context, logger logr.Logger, cfg allocat
return nil, err
}

// we want to use endpointslices by default
serviceDiscoveryRole := monitoringv1.ServiceDiscoveryRole("EndpointSlice")

// TODO: We should make these durations configurable
prom := &monitoringv1.Prometheus{
Spec: monitoringv1.PrometheusSpec{
CommonPrometheusFields: monitoringv1.CommonPrometheusFields{
ScrapeInterval: monitoringv1.Duration(cfg.PrometheusCR.ScrapeInterval.String()),
ServiceMonitorSelector: cfg.PrometheusCR.ServiceMonitorSelector,
PodMonitorSelector: cfg.PrometheusCR.PodMonitorSelector,
ServiceMonitorNamespaceSelector: cfg.PrometheusCR.ServiceMonitorNamespaceSelector,
PodMonitorNamespaceSelector: cfg.PrometheusCR.PodMonitorNamespaceSelector,
ServiceDiscoveryRole: &serviceDiscoveryRole,
},
},
}

prom := cfg.GetPrometheus()
promOperatorLogger := level.NewFilter(log.NewLogfmtLogger(os.Stderr), level.AllowWarn())
promOperatorSlogLogger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelWarn}))
generator, err := prometheus.NewConfigGenerator(promOperatorLogger, prom, true)
Expand Down
Loading

0 comments on commit fda6424

Please sign in to comment.