Skip to content

Commit aa9f2d4

Browse files
author
Andrew Farries
committed
Change UploadFile to UploadUsageReport
The method will upload to the usage-records bucket so should not take arbitrary inputs, only usage reports. Do the encoding and gzipping of the report in the method rather than the caller.
1 parent b8c20bd commit aa9f2d4

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed

components/usage/pkg/contentservice/client.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,22 @@
55
package contentservice
66

77
import (
8+
"bytes"
9+
"compress/gzip"
810
"context"
11+
"encoding/json"
912
"fmt"
10-
"io"
1113
"net/http"
1214

1315
"github.com/gitpod-io/gitpod/common-go/log"
1416
"github.com/gitpod-io/gitpod/content-service/api"
17+
"github.com/gitpod-io/gitpod/usage/pkg/db"
1518
"google.golang.org/grpc"
1619
"google.golang.org/grpc/credentials/insecure"
1720
)
1821

1922
type Interface interface {
20-
UploadFile(ctx context.Context, filename string, body io.Reader) error
23+
UploadUsageReport(ctx context.Context, filename string, report map[db.AttributionID][]db.WorkspaceInstanceForUsage) error
2124
}
2225

2326
type Client struct {
@@ -28,13 +31,24 @@ func New(url string) *Client {
2831
return &Client{url: url}
2932
}
3033

31-
func (c *Client) UploadFile(ctx context.Context, filename string, body io.Reader) error {
34+
func (c *Client) UploadUsageReport(ctx context.Context, filename string, report map[db.AttributionID][]db.WorkspaceInstanceForUsage) error {
3235
url, err := c.getSignedUploadUrl(ctx, filename)
3336
if err != nil {
3437
return fmt.Errorf("failed to obtain signed upload URL: %w", err)
3538
}
3639

37-
req, err := http.NewRequest(http.MethodPut, url, body)
40+
reportBytes := &bytes.Buffer{}
41+
gz := gzip.NewWriter(reportBytes)
42+
err = json.NewEncoder(gz).Encode(report)
43+
if err != nil {
44+
return fmt.Errorf("failed to marshal report to JSON: %w", err)
45+
}
46+
err = gz.Close()
47+
if err != nil {
48+
return fmt.Errorf("failed to compress usage report: %w", err)
49+
}
50+
51+
req, err := http.NewRequest(http.MethodPut, url, reportBytes)
3852
if err != nil {
3953
return fmt.Errorf("failed to construct http request: %w", err)
4054
}

components/usage/pkg/contentservice/noop.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ package contentservice
66

77
import (
88
"context"
9-
"io"
9+
10+
"github.com/gitpod-io/gitpod/usage/pkg/db"
1011
)
1112

1213
type NoOpClient struct{}
1314

14-
func (c *NoOpClient) UploadFile(ctx context.Context, filename string, body io.Reader) error {
15+
func (c *NoOpClient) UploadUsageReport(ctx context.Context, filename string, report map[db.AttributionID][]db.WorkspaceInstanceForUsage) error {
1516
return nil
1617
}

components/usage/pkg/controller/reconciler.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@
55
package controller
66

77
import (
8-
"bytes"
9-
"compress/gzip"
108
"context"
119
"database/sql"
12-
"encoding/json"
1310
"fmt"
1411
"math"
1512
"time"
@@ -75,24 +72,13 @@ func (u *UsageReconciler) Reconcile() (err error) {
7572
}
7673
log.WithField("usage_reconcile_status", status).Info("Reconcile completed.")
7774

78-
reportBytes := &bytes.Buffer{}
79-
gz := gzip.NewWriter(reportBytes)
80-
err = json.NewEncoder(gz).Encode(report)
81-
if err != nil {
82-
return fmt.Errorf("failed to marshal report to JSON: %w", err)
83-
}
84-
err = gz.Close()
85-
if err != nil {
86-
return fmt.Errorf("failed to compress usage report: %w", err)
87-
}
88-
8975
err = db.CreateUsageRecords(ctx, u.conn, usageReportToUsageRecords(report, u.pricer, u.nowFunc().UTC()))
9076
if err != nil {
9177
return fmt.Errorf("failed to write usage records to database: %s", err)
9278
}
9379

9480
filename := fmt.Sprintf("%s.gz", now.Format(time.RFC3339))
95-
err = u.contentService.UploadFile(ctx, filename, reportBytes)
81+
err = u.contentService.UploadUsageReport(ctx, filename, report)
9682
if err != nil {
9783
return fmt.Errorf("failed to upload usage report: %w", err)
9884
}

0 commit comments

Comments
 (0)