feat(http): add labels to bucket responses
parent
910d310c20
commit
815795261d
|
@ -188,17 +188,26 @@ func newBucketUpdate(pb *platform.BucketUpdate) *bucketUpdate {
|
|||
type bucketResponse struct {
|
||||
Links map[string]string `json:"links"`
|
||||
bucket
|
||||
Labels []platform.Label `json:"labels"`
|
||||
}
|
||||
|
||||
func newBucketResponse(b *platform.Bucket) *bucketResponse {
|
||||
return &bucketResponse{
|
||||
func newBucketResponse(b *platform.Bucket, labels []*platform.Label) *bucketResponse {
|
||||
res := &bucketResponse{
|
||||
Links: map[string]string{
|
||||
"self": fmt.Sprintf("/api/v2/buckets/%s", b.ID),
|
||||
"log": fmt.Sprintf("/api/v2/buckets/%s/log", b.ID),
|
||||
"org": fmt.Sprintf("/api/v2/orgs/%s", b.OrganizationID),
|
||||
"self": fmt.Sprintf("/api/v2/buckets/%s", b.ID),
|
||||
"log": fmt.Sprintf("/api/v2/buckets/%s/log", b.ID),
|
||||
"labels": fmt.Sprintf("/api/v2/buckets/%s/labels", b.ID),
|
||||
"org": fmt.Sprintf("/api/v2/orgs/%s", b.OrganizationID),
|
||||
},
|
||||
bucket: *newBucket(b),
|
||||
Labels: []platform.Label{},
|
||||
}
|
||||
|
||||
for _, l := range labels {
|
||||
res.Labels = append(res.Labels, *l)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
type bucketsResponse struct {
|
||||
|
@ -206,10 +215,11 @@ type bucketsResponse struct {
|
|||
Buckets []*bucketResponse `json:"buckets"`
|
||||
}
|
||||
|
||||
func newBucketsResponse(opts platform.FindOptions, f platform.BucketFilter, bs []*platform.Bucket) *bucketsResponse {
|
||||
func newBucketsResponse(ctx context.Context, opts platform.FindOptions, f platform.BucketFilter, bs []*platform.Bucket, labelService platform.LabelService) *bucketsResponse {
|
||||
rs := make([]*bucketResponse, 0, len(bs))
|
||||
for _, b := range bs {
|
||||
rs = append(rs, newBucketResponse(b))
|
||||
labels, _ := labelService.FindLabels(ctx, platform.LabelFilter{ResourceID: b.ID})
|
||||
rs = append(rs, newBucketResponse(b, labels))
|
||||
}
|
||||
return &bucketsResponse{
|
||||
Links: newPagingLinks(bucketsPath, opts, f, len(bs)),
|
||||
|
@ -232,7 +242,7 @@ func (h *BucketHandler) handlePostBucket(w http.ResponseWriter, r *http.Request)
|
|||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusCreated, newBucketResponse(req.Bucket)); err != nil {
|
||||
if err := encodeResponse(ctx, w, http.StatusCreated, newBucketResponse(req.Bucket, []*platform.Label{})); err != nil {
|
||||
logEncodingError(h.Logger, r, err)
|
||||
return
|
||||
}
|
||||
|
@ -283,7 +293,13 @@ func (h *BucketHandler) handleGetBucket(w http.ResponseWriter, r *http.Request)
|
|||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b)); err != nil {
|
||||
labels, err := h.LabelService.FindLabels(ctx, platform.LabelFilter{ResourceID: b.ID})
|
||||
if err != nil {
|
||||
EncodeError(ctx, err, w)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b, labels)); err != nil {
|
||||
logEncodingError(h.Logger, r, err)
|
||||
return
|
||||
}
|
||||
|
@ -367,7 +383,7 @@ func (h *BucketHandler) handleGetBuckets(w http.ResponseWriter, r *http.Request)
|
|||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketsResponse(req.opts, req.filter, bs)); err != nil {
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketsResponse(ctx, req.opts, req.filter, bs, h.LabelService)); err != nil {
|
||||
logEncodingError(h.Logger, r, err)
|
||||
return
|
||||
}
|
||||
|
@ -424,7 +440,13 @@ func (h *BucketHandler) handlePatchBucket(w http.ResponseWriter, r *http.Request
|
|||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b)); err != nil {
|
||||
labels, err := h.LabelService.FindLabels(ctx, platform.LabelFilter{ResourceID: b.ID})
|
||||
if err != nil {
|
||||
EncodeError(ctx, err, w)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b, labels)); err != nil {
|
||||
logEncodingError(h.Logger, r, err)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -78,23 +78,27 @@ func TestService_handleGetBuckets(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/50f7ba1150f7ba11",
|
||||
"self": "/api/v2/buckets/0b501e7e557ab1ed",
|
||||
"log": "/api/v2/buckets/0b501e7e557ab1ed/log"
|
||||
"log": "/api/v2/buckets/0b501e7e557ab1ed/log",
|
||||
"labels": "/api/v2/buckets/0b501e7e557ab1ed/labels"
|
||||
},
|
||||
"id": "0b501e7e557ab1ed",
|
||||
"organizationID": "50f7ba1150f7ba11",
|
||||
"name": "hello",
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 2}]
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 2}],
|
||||
"labels": []
|
||||
},
|
||||
{
|
||||
"links": {
|
||||
"org": "/api/v2/orgs/7e55e118dbabb1ed",
|
||||
"self": "/api/v2/buckets/c0175f0077a77005",
|
||||
"log": "/api/v2/buckets/c0175f0077a77005/log"
|
||||
"log": "/api/v2/buckets/c0175f0077a77005/log",
|
||||
"labels": "/api/v2/buckets/c0175f0077a77005/labels"
|
||||
},
|
||||
"id": "c0175f0077a77005",
|
||||
"organizationID": "7e55e118dbabb1ed",
|
||||
"name": "example",
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 86400}]
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 86400}],
|
||||
"labels": []
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -216,12 +220,14 @@ func TestService_handleGetBucket(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/020f755c3c082000",
|
||||
"self": "/api/v2/buckets/020f755c3c082000",
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log"
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log",
|
||||
"labels": "/api/v2/buckets/020f755c3c082000/labels"
|
||||
},
|
||||
"id": "020f755c3c082000",
|
||||
"organizationID": "020f755c3c082000",
|
||||
"name": "hello",
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 30}]
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 30}],
|
||||
"labels": []
|
||||
}
|
||||
`,
|
||||
},
|
||||
|
@ -332,12 +338,14 @@ func TestService_handlePostBucket(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/6f626f7274697320",
|
||||
"self": "/api/v2/buckets/020f755c3c082000",
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log"
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log",
|
||||
"labels": "/api/v2/buckets/020f755c3c082000/labels"
|
||||
},
|
||||
"id": "020f755c3c082000",
|
||||
"organizationID": "6f626f7274697320",
|
||||
"name": "hello",
|
||||
"retentionRules": []
|
||||
"retentionRules": [],
|
||||
"labels": []
|
||||
}
|
||||
`,
|
||||
},
|
||||
|
@ -542,12 +550,14 @@ func TestService_handlePatchBucket(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/020f755c3c082000",
|
||||
"self": "/api/v2/buckets/020f755c3c082000",
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log"
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log",
|
||||
"labels": "/api/v2/buckets/020f755c3c082000/labels"
|
||||
},
|
||||
"id": "020f755c3c082000",
|
||||
"organizationID": "020f755c3c082000",
|
||||
"name": "example",
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 2}]
|
||||
"retentionRules": [{"type": "expire", "everySeconds": 2}],
|
||||
"labels": []
|
||||
}
|
||||
`,
|
||||
},
|
||||
|
@ -613,12 +623,14 @@ func TestService_handlePatchBucket(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/020f755c3c082000",
|
||||
"self": "/api/v2/buckets/020f755c3c082000",
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log"
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log",
|
||||
"labels": "/api/v2/buckets/020f755c3c082000/labels"
|
||||
},
|
||||
"id": "020f755c3c082000",
|
||||
"organizationID": "020f755c3c082000",
|
||||
"name": "bucket with no retention",
|
||||
"retentionRules": []
|
||||
"retentionRules": [],
|
||||
"labels": []
|
||||
}
|
||||
`,
|
||||
},
|
||||
|
@ -665,12 +677,14 @@ func TestService_handlePatchBucket(t *testing.T) {
|
|||
"links": {
|
||||
"org": "/api/v2/orgs/020f755c3c082000",
|
||||
"self": "/api/v2/buckets/020f755c3c082000",
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log"
|
||||
"log": "/api/v2/buckets/020f755c3c082000/log",
|
||||
"labels": "/api/v2/buckets/020f755c3c082000/labels"
|
||||
},
|
||||
"id": "020f755c3c082000",
|
||||
"organizationID": "020f755c3c082000",
|
||||
"name": "b1",
|
||||
"retentionRules": []
|
||||
"retentionRules": [],
|
||||
"labels": []
|
||||
}
|
||||
`,
|
||||
},
|
||||
|
|
|
@ -92,7 +92,7 @@ func newOnboardingResponse(results *platform.OnboardingResults) *onboardingRespo
|
|||
}
|
||||
return &onboardingResponse{
|
||||
User: newUserResponse(results.User),
|
||||
Bucket: newBucketResponse(results.Bucket),
|
||||
Bucket: newBucketResponse(results.Bucket, []*platform.Label{}),
|
||||
Organization: newOrgResponse(results.Org),
|
||||
Auth: newAuthResponse(results.Auth, results.Org, results.User, ps),
|
||||
}
|
||||
|
|
|
@ -4770,6 +4770,8 @@ components:
|
|||
example: 86400
|
||||
minimum: 1
|
||||
required: [type, everySeconds]
|
||||
labels:
|
||||
$ref: "#/components/schemas/Labels"
|
||||
required: [name, retentionRules]
|
||||
Buckets:
|
||||
type: object
|
||||
|
@ -6600,8 +6602,10 @@ components:
|
|||
properties:
|
||||
self:
|
||||
type: string
|
||||
owners:
|
||||
$ref: "#/components/schemas/Owners"
|
||||
labels:
|
||||
type: string
|
||||
labels:
|
||||
$ref: "#/components/schemas/Labels"
|
||||
Telegrafs:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
@ -98,6 +98,7 @@ func newTelegrafResponse(tc *platform.TelegrafConfig, labels []*platform.Label)
|
|||
Self: fmt.Sprintf("/api/v2/telegrafs/%s", tc.ID),
|
||||
Labels: fmt.Sprintf("/api/v2/telegrafs/%s/labels", tc.ID),
|
||||
},
|
||||
Labels: []platform.Label{},
|
||||
}
|
||||
|
||||
for _, l := range labels {
|
||||
|
|
Loading…
Reference in New Issue