Skip to content

Commit

Permalink
Fix error prone custom HistogramOpts and SummaryOpts structures
Browse files Browse the repository at this point in the history
Signed-off-by: João Vilaça <jvilaca@redhat.com>
  • Loading branch information
machadovilaca committed Feb 15, 2024
1 parent 7b291af commit d4e1fe8
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 55 deletions.
33 changes: 8 additions & 25 deletions pkg/operatormetrics/histogram.go
@@ -1,57 +1,40 @@
package operatormetrics

import (
"time"

"github.com/prometheus/client_golang/prometheus"
)

type Histogram struct {
prometheus.Histogram

metricOpts MetricOpts
histogramOpts HistogramOpts
histogramOpts prometheus.HistogramOpts
}

var _ Metric = &Histogram{}

type HistogramOpts struct {
Buckets []float64
NativeHistogramBucketFactor float64
NativeHistogramZeroThreshold float64
NativeHistogramMaxBucketNumber uint32
NativeHistogramMinResetDuration time.Duration
NativeHistogramMaxZeroThreshold float64
}

// NewHistogram creates a new Histogram. The Histogram must be registered with the
// Prometheus registry through RegisterMetrics.
func NewHistogram(metricOpts MetricOpts, histogramOpts HistogramOpts) *Histogram {
func NewHistogram(metricOpts MetricOpts, histogramOpts prometheus.HistogramOpts) *Histogram {
return &Histogram{
Histogram: prometheus.NewHistogram(makePrometheusHistogramOpts(metricOpts, histogramOpts)),
metricOpts: metricOpts,
histogramOpts: histogramOpts,
}
}

func makePrometheusHistogramOpts(metricOpts MetricOpts, histogramOpts HistogramOpts) prometheus.HistogramOpts {
return prometheus.HistogramOpts{
Name: metricOpts.Name,
Help: metricOpts.Help,
ConstLabels: metricOpts.ConstLabels,
NativeHistogramBucketFactor: histogramOpts.NativeHistogramBucketFactor,
NativeHistogramZeroThreshold: histogramOpts.NativeHistogramZeroThreshold,
NativeHistogramMaxBucketNumber: histogramOpts.NativeHistogramMaxBucketNumber,
NativeHistogramMinResetDuration: histogramOpts.NativeHistogramMinResetDuration,
NativeHistogramMaxZeroThreshold: histogramOpts.NativeHistogramMaxZeroThreshold,
}
func makePrometheusHistogramOpts(metricOpts MetricOpts, histogramOpts prometheus.HistogramOpts) prometheus.HistogramOpts {
histogramOpts.Name = metricOpts.Name
histogramOpts.Help = metricOpts.Help
histogramOpts.ConstLabels = metricOpts.ConstLabels
return histogramOpts
}

func (c *Histogram) GetOpts() MetricOpts {
return c.metricOpts
}

func (c *Histogram) GetHistogramOpts() HistogramOpts {
func (c *Histogram) GetHistogramOpts() prometheus.HistogramOpts {
return c.histogramOpts
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/operatormetrics/histogram_vec.go
Expand Up @@ -6,14 +6,14 @@ type HistogramVec struct {
prometheus.HistogramVec

metricOpts MetricOpts
histogramOpts HistogramOpts
histogramOpts prometheus.HistogramOpts
}

var _ Metric = &HistogramVec{}

// NewHistogramVec creates a new HistogramVec. The HistogramVec must be
// registered with the Prometheus registry through RegisterMetrics.
func NewHistogramVec(metricOpts MetricOpts, histogramOpts HistogramOpts, labels []string) *HistogramVec {
func NewHistogramVec(metricOpts MetricOpts, histogramOpts prometheus.HistogramOpts, labels []string) *HistogramVec {
return &HistogramVec{
HistogramVec: *prometheus.NewHistogramVec(makePrometheusHistogramOpts(metricOpts, histogramOpts), labels),
metricOpts: metricOpts,
Expand All @@ -25,7 +25,7 @@ func (c *HistogramVec) GetOpts() MetricOpts {
return c.metricOpts
}

func (c *HistogramVec) GetHistogramOpts() HistogramOpts {
func (c *HistogramVec) GetHistogramOpts() prometheus.HistogramOpts {
return c.histogramOpts
}

Expand Down
8 changes: 6 additions & 2 deletions pkg/operatormetrics/metric_test.go
Expand Up @@ -32,7 +32,7 @@ var _ = Describe("Metrics", func() {
Name: "test_histogram",
Help: "A test histogram",
}
testHistogramHistogramOpts = HistogramOpts{
testHistogramHistogramOpts = prometheus.HistogramOpts{
Buckets: prometheus.LinearBuckets(0, 10, 10),
}
testHistogramVecOpts = MetricOpts{
Expand All @@ -43,7 +43,7 @@ var _ = Describe("Metrics", func() {
Name: "test_summary",
Help: "A test summary",
}
testSummarySummaryOpts = SummaryOpts{
testSummarySummaryOpts = prometheus.SummaryOpts{
Objectives: map[float64]float64{0.1: 0.1, 0.2: 0.2, 0.3: 0.3, 0.4: 0.4, 0.5: 0.5},
}
testSummaryVecOpts = MetricOpts{
Expand Down Expand Up @@ -88,6 +88,7 @@ var _ = Describe("Metrics", func() {
Expect(histogram).NotTo(BeNil())
Expect(histogram.GetOpts()).To(Equal(testHistogramOpts))
Expect(histogram.GetType()).To(Equal(HistogramType))
Expect(histogram.GetHistogramOpts()).To(Equal(testHistogramHistogramOpts))
})

It("should create a new HistogramVec with the provided options and labels", func() {
Expand All @@ -96,13 +97,15 @@ var _ = Describe("Metrics", func() {
Expect(histogramVec).NotTo(BeNil())
Expect(histogramVec.GetOpts()).To(Equal(testHistogramVecOpts))
Expect(histogramVec.GetType()).To(Equal(HistogramVecType))
Expect(histogramVec.GetHistogramOpts()).To(Equal(testHistogramHistogramOpts))
})

It("should create a new Summary with the provided options", func() {
summary := NewSummary(testSummaryOpts, testSummarySummaryOpts)
Expect(summary).NotTo(BeNil())
Expect(summary.GetOpts()).To(Equal(testSummaryOpts))
Expect(summary.GetType()).To(Equal(SummaryType))
Expect(summary.GetSummaryOpts()).To(Equal(testSummarySummaryOpts))
})

It("should create a new SummaryVec with the provided options and labels", func() {
Expand All @@ -111,6 +114,7 @@ var _ = Describe("Metrics", func() {
Expect(summaryVec).NotTo(BeNil())
Expect(summaryVec.GetOpts()).To(Equal(testSummaryVecOpts))
Expect(summaryVec.GetType()).To(Equal(SummaryVecType))
Expect(summaryVec.GetSummaryOpts()).To(Equal(testSummarySummaryOpts))
})
})

Expand Down
30 changes: 8 additions & 22 deletions pkg/operatormetrics/summary.go
@@ -1,54 +1,40 @@
package operatormetrics

import (
"time"

"github.com/prometheus/client_golang/prometheus"
)

type Summary struct {
prometheus.Summary

metricOpts MetricOpts
summaryOpts SummaryOpts
summaryOpts prometheus.SummaryOpts
}

var _ Metric = &Summary{}

type SummaryOpts struct {
Objectives map[float64]float64
MaxAge time.Duration
AgeBuckets uint32
BufCap uint32
}

// NewSummary creates a new Summary. The Summary must be registered with the
// Prometheus registry through RegisterMetrics.
func NewSummary(metricOpts MetricOpts, summaryOpts SummaryOpts) *Summary {
func NewSummary(metricOpts MetricOpts, summaryOpts prometheus.SummaryOpts) *Summary {
return &Summary{
Summary: prometheus.NewSummary(makePrometheusSummaryOpts(metricOpts, summaryOpts)),
metricOpts: metricOpts,
summaryOpts: summaryOpts,
}
}

func makePrometheusSummaryOpts(metricOpts MetricOpts, summaryOpts SummaryOpts) prometheus.SummaryOpts {
return prometheus.SummaryOpts{
Name: metricOpts.Name,
Help: metricOpts.Help,
ConstLabels: metricOpts.ConstLabels,
Objectives: summaryOpts.Objectives,
MaxAge: summaryOpts.MaxAge,
AgeBuckets: summaryOpts.AgeBuckets,
BufCap: summaryOpts.BufCap,
}
func makePrometheusSummaryOpts(metricOpts MetricOpts, summaryOpts prometheus.SummaryOpts) prometheus.SummaryOpts {
summaryOpts.Name = metricOpts.Name
summaryOpts.Help = metricOpts.Help
summaryOpts.ConstLabels = metricOpts.ConstLabels
return summaryOpts
}

func (c *Summary) GetOpts() MetricOpts {
return c.metricOpts
}

func (c *Summary) GetSummaryOpts() SummaryOpts {
func (c *Summary) GetSummaryOpts() prometheus.SummaryOpts {
return c.summaryOpts
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/operatormetrics/summary_vec.go
Expand Up @@ -6,14 +6,14 @@ type SummaryVec struct {
prometheus.SummaryVec

metricOpts MetricOpts
summaryOpts SummaryOpts
summaryOpts prometheus.SummaryOpts
}

var _ Metric = &SummaryVec{}

// NewSummaryVec creates a new SummaryVec. The SummaryVec must be
// registered with the Prometheus registry through RegisterMetrics.
func NewSummaryVec(metricOpts MetricOpts, summaryOpts SummaryOpts, labels []string) *SummaryVec {
func NewSummaryVec(metricOpts MetricOpts, summaryOpts prometheus.SummaryOpts, labels []string) *SummaryVec {
return &SummaryVec{
SummaryVec: *prometheus.NewSummaryVec(makePrometheusSummaryOpts(metricOpts, summaryOpts), labels),
metricOpts: metricOpts,
Expand All @@ -25,7 +25,7 @@ func (c *SummaryVec) GetOpts() MetricOpts {
return c.metricOpts
}

func (c *SummaryVec) GetSummaryOpts() SummaryOpts {
func (c *SummaryVec) GetSummaryOpts() prometheus.SummaryOpts {
return c.summaryOpts
}

Expand Down

0 comments on commit d4e1fe8

Please sign in to comment.