feat(http): add labels to telegraf GET responses

pull/10616/head
Jade McGough 2019-01-03 11:48:26 -08:00
parent 7562c9a6d2
commit 910d310c20
2 changed files with 38 additions and 15 deletions

View File

@ -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
}

View File

@ -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)