Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ func newRunCommand() *cobra.Command {
cfg.ClientOpts.Plaintext,
)

// Initialize metrics before starting the metrics server or using any counters
metrics.InitMetrics()

// Health server will start in a go routine and run asynchronously
var hsErrCh chan error
var msErrCh chan error
Expand Down
42 changes: 30 additions & 12 deletions pkg/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ import (
"github.com/prometheus/client_golang/prometheus/promhttp"
)

// TODO: These should not be global vars with this package
var epm *EndpointMetrics
var apm *ApplicationMetrics
var cpm *ClientMetrics
type Metrics struct {
Endpoint *EndpointMetrics
Applications *ApplicationMetrics
Clients *ClientMetrics
}

var defaultMetrics *Metrics

// EndpointMetrics stores metrics for registry endpoints
type EndpointMetrics struct {
Expand Down Expand Up @@ -117,19 +120,36 @@ func NewClientMetrics() *ClientMetrics {
return metrics
}

func NewMetrics() *Metrics {
return &Metrics{
Endpoint: NewEndpointMetrics(),
Applications: NewApplicationsMetrics(),
Clients: NewClientMetrics(),
}
}

// Endpoint returns the global EndpointMetrics object
func Endpoint() *EndpointMetrics {
return epm
if defaultMetrics == nil {
return nil
}
return defaultMetrics.Endpoint
}

// Applications returns the global ApplicationMetrics object
func Applications() *ApplicationMetrics {
return apm
if defaultMetrics == nil {
return nil
}
return defaultMetrics.Applications
}

// Clients returns the global ClientMetrics object
func Clients() *ClientMetrics {
return cpm
if defaultMetrics == nil {
return nil
}
return defaultMetrics.Clients
}

// IncreaseRequest increases the request counter of EndpointMetrics object
Expand Down Expand Up @@ -180,9 +200,7 @@ func (cpm *ClientMetrics) IncreaseK8sClientError(by int) {
cpm.kubeAPIRequestsErrorsTotal.Add(float64(by))
}

// TODO: This is a lazy workaround, better initialize it somehwere else
func init() {
epm = NewEndpointMetrics()
apm = NewApplicationsMetrics()
cpm = NewClientMetrics()
// InitMetrics initializes the global metrics objects
func InitMetrics() {
defaultMetrics = NewMetrics()
}
1 change: 1 addition & 0 deletions pkg/metrics/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ func TestMetricsInitialization(t *testing.T) {
}

func TestMetricsOperations(t *testing.T) {
InitMetrics()
epm := Endpoint()
epm.IncreaseRequest("/registry1", false)
epm.IncreaseRequest("/registry1", true)
Expand Down