From 651c176adae75830881b6e883b71034f805c4ce2 Mon Sep 17 00:00:00 2001 From: Barry Gordon Date: Thu, 6 Apr 2023 12:51:10 +0100 Subject: [PATCH 1/2] Ignore any calls to increment_metric as irrelevant --- internal/server/api.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/server/api.go b/internal/server/api.go index 0a1817b6..a9d0dbe8 100644 --- a/internal/server/api.go +++ b/internal/server/api.go @@ -113,6 +113,10 @@ func (a *API) ServeHTTP(_ http.ResponseWriter, r *http.Request) { parts := strings.Split(r.URL.String(), "/") kind := parts[len(parts)-1] + if kind == "increment_metric" { + // ignore metrics + return + } actual, err := decodeWrapper(kind, data) if err != nil { a.pushError(err) From a7a009a4eebe2f1c220d66bf6aabb4f4a9a98e72 Mon Sep 17 00:00:00 2001 From: Barry Gordon Date: Thu, 6 Apr 2023 15:07:00 +0100 Subject: [PATCH 2/2] Let's output the metrics data instead of swallowing it --- internal/model/update.go | 5 +++++ internal/server/api.go | 36 ++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/internal/model/update.go b/internal/model/update.go index fb6d82f8..fd65abae 100644 --- a/internal/model/update.go +++ b/internal/model/update.go @@ -58,3 +58,8 @@ type RecordUpdateJobError struct { ErrorType string `json:"error-type" yaml:"error-type"` ErrorDetails map[string]any `json:"error-details" yaml:"error-details"` } + +type IncrementMetric struct { + Metric string `json:"metric" yaml:"metric"` + Tags map[string]any `json:"tags" yaml:"tags"` +} diff --git a/internal/server/api.go b/internal/server/api.go index a9d0dbe8..090b4dd1 100644 --- a/internal/server/api.go +++ b/internal/server/api.go @@ -113,31 +113,24 @@ func (a *API) ServeHTTP(_ http.ResponseWriter, r *http.Request) { parts := strings.Split(r.URL.String(), "/") kind := parts[len(parts)-1] - if kind == "increment_metric" { - // ignore metrics - return - } actual, err := decodeWrapper(kind, data) if err != nil { a.pushError(err) } + if kind == "increment_metric" { + // Let's just output the metrics data and stop + a.outputRequestData(kind, actual) + return + } + if err := a.pushResult(kind, actual); err != nil { a.pushError(err) return } if !a.hasExpectations { - if a.writer != nil { - // output the data received to stdout - if err = json.NewEncoder(a.writer).Encode(map[string]any{ - "type": kind, - "data": actual.Data, - }); err != nil { - // Fail so the user knows stdout is not working - log.Panicln("Failed to write to stdout: ", err) - } - } + a.outputRequestData(kind, actual) return } @@ -171,6 +164,19 @@ func (a *API) assertExpectation(kind string, actual *model.UpdateWrapper) { } } +func (a *API) outputRequestData(kind string, actual *model.UpdateWrapper) { + if a.writer != nil { + // output the data received to stdout + if err := json.NewEncoder(a.writer).Encode(map[string]any{ + "type": kind, + "data": actual.Data, + }); err != nil { + // Fail so the user knows stdout is not working + log.Panicln("Failed to write to stdout: ", err) + } + } +} + func (a *API) pushError(err error) { escapedError := strings.ReplaceAll(err.Error(), "\n", "") escapedError = strings.ReplaceAll(escapedError, "\r", "") @@ -217,6 +223,8 @@ func decodeWrapper(kind string, data []byte) (actual *model.UpdateWrapper, err e actual.Data, err = decode[model.RecordPackageManagerVersion](data) case "record_update_job_error": actual.Data, err = decode[model.RecordUpdateJobError](data) + case "increment_metric": + actual.Data, err = decode[model.IncrementMetric](data) default: return nil, fmt.Errorf("unexpected output type: %s", kind) }