From 6b72246fe6f0e8fec5e1310550561e6ba07a93fb Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 26 Mar 2020 19:01:12 +0000 Subject: [PATCH] fix (multitenant collector): Use consistent report timestamp Previously the code called `time.Now()` in two different places so the timestamps didn't match. Now we use the timestamp of the report itself. Add the collector's local time to the report if it didn't have one. --- app/collector.go | 1 + app/multitenant/aws_collector.go | 2 +- app/multitenant/billing_emitter.go | 2 +- app/router.go | 4 ++++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/collector.go b/app/collector.go index f59f6f75f..a495b055a 100644 --- a/app/collector.go +++ b/app/collector.go @@ -348,6 +348,7 @@ func replay(a Adder, timestamps []time.Time, reports []report.Report) { due := time.Now() for { for i, r := range reports { + r.TS = due a.Add(nil, r, nil) due = due.Add(delays[i]) delay := due.Sub(time.Now()) diff --git a/app/multitenant/aws_collector.go b/app/multitenant/aws_collector.go index 0e84bdba1..f3a9ef6ba 100644 --- a/app/multitenant/aws_collector.go +++ b/app/multitenant/aws_collector.go @@ -538,7 +538,7 @@ func (c *awsCollector) Add(ctx context.Context, rep report.Report, buf []byte) e } // first, put the report on s3 - rowKey, colKey := calculateDynamoKeys(userid, time.Now()) + rowKey, colKey := calculateDynamoKeys(userid, rep.TS) reportKey, err := calculateReportKey(rowKey, colKey) if err != nil { return err diff --git a/app/multitenant/billing_emitter.go b/app/multitenant/billing_emitter.go index ba0919b5e..6f5cb5d5c 100644 --- a/app/multitenant/billing_emitter.go +++ b/app/multitenant/billing_emitter.go @@ -59,7 +59,7 @@ func (e *BillingEmitter) Add(ctx context.Context, rep report.Report, buf []byte) // proceeding. return err } - rowKey, colKey := calculateDynamoKeys(userID, now) + rowKey, colKey := calculateDynamoKeys(userID, rep.TS) interval := e.reportInterval(rep) // Cache the last-known value of interval for this user, and use diff --git a/app/router.go b/app/router.go index 24bcf1749..73a2b1954 100644 --- a/app/router.go +++ b/app/router.go @@ -148,6 +148,10 @@ func RegisterReportPostHandler(a Adder, router *mux.Router) { buf, _ = rpt.WriteBinary() } + // If it didn't come in with a timestamp, give it one now + if rpt.TS.IsZero() { + rpt.TS = time.Now().UTC() + } if err := a.Add(ctx, *rpt, buf.Bytes()); err != nil { log.Errorf("Error Adding report: %v", err) respondWith(w, http.StatusInternalServerError, err)