Skip to content

Commit a41cb6b

Browse files
committed
fix: address review feedback on confluence extractor
- Paginate GetPageLabels to capture all labels (not just first page) - Use time.RFC3339 for proper timezone handling in timestamps - Tighten exclusion test to assert ENG space exists (not just absence of ARCHIVE)
1 parent fca4a24 commit a41cb6b

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

plugins/extractors/confluence/client.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,34 @@ func (c *Client) GetPages(ctx context.Context, spaceID string) ([]Page, error) {
148148
return all, nil
149149
}
150150

151-
// GetPageLabels returns labels for a page.
151+
// GetPageLabels returns all labels for a page, handling pagination.
152152
func (c *Client) GetPageLabels(ctx context.Context, pageID string) ([]Label, error) {
153-
var resp struct {
154-
Results []Label `json:"results"`
155-
}
156-
if err := c.get(ctx, "/api/v2/pages/"+pageID+"/labels", nil, &resp); err != nil {
157-
return nil, fmt.Errorf("get labels for page %s: %w", pageID, err)
153+
var all []Label
154+
cursor := ""
155+
for {
156+
params := url.Values{}
157+
params.Set("limit", "25")
158+
if cursor != "" {
159+
params.Set("cursor", cursor)
160+
}
161+
162+
var resp struct {
163+
Results []Label `json:"results"`
164+
Links struct {
165+
Next string `json:"next"`
166+
} `json:"_links"`
167+
}
168+
if err := c.get(ctx, "/api/v2/pages/"+pageID+"/labels", params, &resp); err != nil {
169+
return nil, fmt.Errorf("get labels for page %s: %w", pageID, err)
170+
}
171+
all = append(all, resp.Results...)
172+
173+
cursor = parseCursor(resp.Links.Next)
174+
if cursor == "" {
175+
break
176+
}
158177
}
159-
return resp.Results, nil
178+
return all, nil
160179
}
161180

162181
func (c *Client) get(ctx context.Context, path string, params url.Values, out any) error {

plugins/extractors/confluence/confluence.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"regexp"
88
"strings"
9+
"time"
910

1011
"github.com/raystack/meteor/models"
1112
meteorv1beta1 "github.com/raystack/meteor/models/raystack/meteor/v1beta1"
@@ -150,8 +151,8 @@ func (e *Extractor) buildPageRecord(page Page, space Space, spaceURN string, lab
150151
"space_key": space.Key,
151152
"status": page.Status,
152153
"version": page.Version.Number,
153-
"created_at": page.CreatedAt.Format("2006-01-02T15:04:05Z"),
154-
"updated_at": page.Version.CreatedAt.Format("2006-01-02T15:04:05Z"),
154+
"created_at": page.CreatedAt.UTC().Format(time.RFC3339),
155+
"updated_at": page.Version.CreatedAt.UTC().Format(time.RFC3339),
155156
}
156157
if len(labelNames) > 0 {
157158
props["labels"] = labelNames

plugins/extractors/confluence/confluence_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,11 @@ func TestExtract(t *testing.T) {
147147
require.NoError(t, err)
148148

149149
records := emitter.Get()
150-
for _, r := range records {
151-
props := r.Entity().GetProperties().AsMap()
152-
if key, ok := props["space_key"]; ok {
153-
assert.NotEqual(t, "ARCHIVE", key)
154-
}
155-
}
150+
spaceRecords := findAllByType(records, "space")
151+
require.Len(t, spaceRecords, 1)
152+
153+
props := spaceRecords[0].Entity().GetProperties().AsMap()
154+
assert.Equal(t, "ENG", props["space_key"])
156155
})
157156
}
158157

0 commit comments

Comments
 (0)