Skip to content

Commit

Permalink
internal/metrics: simplify Collector logic
Browse files Browse the repository at this point in the history
  • Loading branch information
jroimartin committed Nov 7, 2023
1 parent 3e8e54d commit c652819
Show file tree
Hide file tree
Showing 5 changed files with 196 additions and 329 deletions.
2 changes: 1 addition & 1 deletion cmd/lava/internal/run/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func run(args []string) error {
metrics.Collect("duration", duration.String())

if *metricsFile != "" {
if err = metrics.Write(*metricsFile); err != nil {
if err = metrics.WriteFile(*metricsFile); err != nil {
return fmt.Errorf("write metrics: %w", err)
}
}
Expand Down
70 changes: 70 additions & 0 deletions internal/metrics/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Copyright 2023 Adevinta

// Package metrics collects Lava execution metrics.
package metrics

import (
"encoding/json"
"fmt"
"io"
"os"
"sync"
)

// DefaultCollector is the default [Collector].
var DefaultCollector = NewCollector()

// Collector represents a metrics collector.
type Collector struct {
mutex sync.Mutex
metrics map[string]any
}

// NewCollector returns a new metrics collector.
func NewCollector() *Collector {
return &Collector{
metrics: make(map[string]any),
}
}

// Collect records a metric with the provided name and value.
func (c *Collector) Collect(name string, value any) {
c.mutex.Lock()
defer c.mutex.Unlock()

c.metrics[name] = value
}

// Write writes the metrics to the specified [io.Writer].
func (c *Collector) Write(w io.Writer) error {
enc := json.NewEncoder(w)
enc.SetIndent("", " ")
if err := enc.Encode(c.metrics); err != nil {
return fmt.Errorf("encode JSON: %w", err)
}
return nil
}

// Collect records a metric with the provided name and value using
// [DefaultCollector].
func Collect(name string, value any) {
DefaultCollector.Collect(name, value)
}

// Write writes the collected metrics to the specified [io.Writer]
// using [DefaultCollector].
func Write(w io.Writer) error {
return DefaultCollector.Write(w)
}

// WriteFile writes the collected metrics into the specified file
// using [DefaultCollector].
func WriteFile(file string) error {
f, err := os.Create(file)
if err != nil {
return fmt.Errorf("create file: %w", err)
}
defer f.Close()

return Write(f)
}
98 changes: 0 additions & 98 deletions internal/metrics/metrics_collector.go

This file was deleted.

Loading

0 comments on commit c652819

Please sign in to comment.