From 910d310c2019875eeb64fabed28b34ad7abffbde Mon Sep 17 00:00:00 2001 From: Jade McGough Date: Thu, 3 Jan 2019 11:48:26 -0800 Subject: [PATCH] feat(http): add labels to telegraf GET responses --- http/telegraf.go | 48 +++++++++++++++++++++++++++++++------------ http/telegraf_test.go | 5 +++-- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/http/telegraf.go b/http/telegraf.go index b0507566b4..a9c364cf4f 100644 --- a/http/telegraf.go +++ b/http/telegraf.go @@ -76,34 +76,44 @@ func NewTelegrafHandler( return h } -type link struct { - Self string `json:"self"` +type telegrafLinks struct { + Self string `json:"self"` + Labels string `json:"labels"` } type telegrafResponse struct { *platform.TelegrafConfig - Links link `json:"links"` + Labels []platform.Label `json:"labels"` + Links telegrafLinks `json:"links"` } type telegrafResponses struct { TelegrafConfigs []telegrafResponse `json:"configurations"` } -func newTelegrafResponse(tc *platform.TelegrafConfig) telegrafResponse { - return telegrafResponse{ +func newTelegrafResponse(tc *platform.TelegrafConfig, labels []*platform.Label) telegrafResponse { + res := telegrafResponse{ TelegrafConfig: tc, - Links: link{ - Self: fmt.Sprintf("/api/v2/telegrafs/%s", tc.ID.String()), + Links: telegrafLinks{ + Self: fmt.Sprintf("/api/v2/telegrafs/%s", tc.ID), + Labels: fmt.Sprintf("/api/v2/telegrafs/%s/labels", tc.ID), }, } + + for _, l := range labels { + res.Labels = append(res.Labels, *l) + } + + return res } -func newTelegrafResponses(tcs []*platform.TelegrafConfig) telegrafResponses { +func newTelegrafResponses(ctx context.Context, tcs []*platform.TelegrafConfig, labelService platform.LabelService) telegrafResponses { resp := telegrafResponses{ TelegrafConfigs: make([]telegrafResponse, len(tcs)), } for i, c := range tcs { - resp.TelegrafConfigs[i] = newTelegrafResponse(c) + labels, _ := labelService.FindLabels(ctx, platform.LabelFilter{ResourceID: c.ID}) + resp.TelegrafConfigs[i] = newTelegrafResponse(c, labels) } return resp } @@ -134,7 +144,7 @@ func (h *TelegrafHandler) handleGetTelegrafs(w http.ResponseWriter, r *http.Requ EncodeError(ctx, err, w) return } - if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponses(tcs)); err != nil { + if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponses(ctx, tcs, h.LabelService)); err != nil { logEncodingError(h.Logger, r, err) return } @@ -163,7 +173,13 @@ func (h *TelegrafHandler) handleGetTelegraf(w http.ResponseWriter, r *http.Reque w.WriteHeader(http.StatusOK) w.Write([]byte(tc.TOML())) case "application/json": - if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc)); err != nil { + labels, err := h.LabelService.FindLabels(ctx, platform.LabelFilter{ResourceID: tc.ID}) + if err != nil { + EncodeError(ctx, err, w) + return + } + + if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc, labels)); err != nil { logEncodingError(h.Logger, r, err) return } @@ -241,7 +257,7 @@ func (h *TelegrafHandler) handlePostTelegraf(w http.ResponseWriter, r *http.Requ return } - if err := encodeResponse(ctx, w, http.StatusCreated, newTelegrafResponse(tc)); err != nil { + if err := encodeResponse(ctx, w, http.StatusCreated, newTelegrafResponse(tc, []*platform.Label{})); err != nil { logEncodingError(h.Logger, r, err) return } @@ -268,7 +284,13 @@ func (h *TelegrafHandler) handlePutTelegraf(w http.ResponseWriter, r *http.Reque return } - if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc)); err != nil { + labels, err := h.LabelService.FindLabels(ctx, platform.LabelFilter{ResourceID: tc.ID}) + if err != nil { + EncodeError(ctx, err, w) + return + } + + if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc, labels)); err != nil { logEncodingError(h.Logger, r, err) return } diff --git a/http/telegraf_test.go b/http/telegraf_test.go index 8db0c4dc9c..b3b6820b6c 100644 --- a/http/telegraf_test.go +++ b/http/telegraf_test.go @@ -724,7 +724,8 @@ func Test_newTelegrafResponses(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - res := newTelegrafResponses(tt.args.tcs) + ctx := context.Background() + res := newTelegrafResponses(ctx, tt.args.tcs, mock.NewLabelService()) got, err := json.Marshal(res) if err != nil { t.Fatalf("newTelegrafResponses() JSON marshal %v", err) @@ -802,7 +803,7 @@ func Test_newTelegrafResponse(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - res := newTelegrafResponse(tt.args.tc) + res := newTelegrafResponse(tt.args.tc, []*platform.Label{}) got, err := json.Marshal(res) if err != nil { t.Fatalf("newTelegrafResponse() JSON marshal %v", err)