diff --git a/engines/duplicity.go b/engines/duplicity.go index 9f3a3dc4..03d103e4 100644 --- a/engines/duplicity.go +++ b/engines/duplicity.go @@ -175,7 +175,7 @@ func (d *DuplicityEngine) verify() (err error) { } metric := d.Handler.MetricsHandler.NewMetric("conplicity_verifyExitCode", "gauge") - metric.UpdateEvent( + err = metric.UpdateEvent( &metrics.Event{ Labels: map[string]string{ "volume": v.Name, diff --git a/handler/handler.go b/handler/handler.go index ff26a2b0..8c9ef966 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -122,7 +122,7 @@ func (c *Conplicity) GetVolumes() (volumes []*volume.Volume, err error) { func (c *Conplicity) LogTime(vol *volume.Volume, event string) (err error) { metricName := fmt.Sprintf("conplicity_%s", event) startTimeMetric := c.MetricsHandler.NewMetric(metricName, "counter") - startTimeMetric.UpdateEvent( + err = startTimeMetric.UpdateEvent( &metrics.Event{ Labels: map[string]string{ "volume": vol.Name, @@ -130,6 +130,9 @@ func (c *Conplicity) LogTime(vol *volume.Volume, event string) (err error) { Value: strconv.FormatInt(time.Now().Unix(), 10), }, ) + if err != nil { + return + } err = c.MetricsHandler.Push() return } diff --git a/metrics/metrics.go b/metrics/metrics.go index 1bcd9503..d23049b9 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -63,8 +63,13 @@ func (e *Event) Equals(newEvent *Event) bool { } // UpdateEvent adds an event, or updates it if the event already exists -func (m *Metric) UpdateEvent(event *Event) { - event.Name = m.Name +func (m *Metric) UpdateEvent(event *Event) error { + if event.Name == "" { + event.Name = m.Name + } + if event.Name != m.Name { + return fmt.Errorf("cannot add event %s to metric %s", event.Name, m.Name) + } for i, e := range m.Events { if e.Equals(event) { log.WithFields(log.Fields{ @@ -73,7 +78,7 @@ func (m *Metric) UpdateEvent(event *Event) { "new_event": event.String(), }).Debug("Replacing event") m.Events[i] = event - return + return nil } } log.WithFields(log.Fields{ @@ -81,6 +86,8 @@ func (m *Metric) UpdateEvent(event *Event) { "event": event.String(), }).Debug("Adding event") m.Events = append(m.Events, event) + + return nil } // NewMetric adds a new metric if it doesn't exist yet diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go index f5651e5d..337f67ab 100644 --- a/metrics/metrics_test.go +++ b/metrics/metrics_test.go @@ -136,6 +136,7 @@ func TestParseEvent(t *testing.T) { } func TestMetricUpdateEvent(t *testing.T) { + var err error m := &Metric{ Name: "foo", } @@ -150,7 +151,10 @@ func TestMetricUpdateEvent(t *testing.T) { }, Value: "bar", } - m.UpdateEvent(e1) + err = m.UpdateEvent(e1) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } if len(m.Events) != 1 { t.Fatalf("Expected one event, got %v", len(m.Events)) } @@ -168,7 +172,10 @@ func TestMetricUpdateEvent(t *testing.T) { }, Value: "qux", } - m.UpdateEvent(e2) + err = m.UpdateEvent(e2) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } if len(m.Events) != 1 { t.Fatalf("Expected one event, got %v", len(m.Events)) } @@ -186,7 +193,10 @@ func TestMetricUpdateEvent(t *testing.T) { }, Value: "quxx", } - m.UpdateEvent(e3) + err = m.UpdateEvent(e3) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } if len(m.Events) != 2 { t.Fatalf("Expected two events, got %v", len(m.Events)) } @@ -196,4 +206,20 @@ func TestMetricUpdateEvent(t *testing.T) { if m.Events[1].Value != "quxx" { t.Fatalf("Expected event value to be quxx, got %s", m.Events[1].Value) } + + // Add event with wrong name + e4 := &Event{ + Name: "bar", + Labels: map[string]string{ + "volume": "fooddd", + }, + Value: "quxx", + } + err = m.UpdateEvent(e4) + if err == nil { + t.Fatal("Expected an error, got nil") + } + if len(m.Events) != 2 { + t.Fatalf("Expected two events, got %v", len(m.Events)) + } }