From ced17ebfae9caf4fec0d68ec38265457abd47373 Mon Sep 17 00:00:00 2001 From: Agustin Godnic Date: Mon, 14 Aug 2023 16:40:59 -0300 Subject: [PATCH] Add 3-month filter to last-txs endpoint --- analytics/metric/metric.go | 2 +- api/handlers/transactions/queries.go | 15 ++++++++++++--- api/handlers/transactions/queries_test.go | 8 ++++---- api/handlers/transactions/repository.go | 6 ++++-- api/middleware/extract_parameters.go | 6 ++++++ api/routes/wormscan/transactions/controller.go | 1 + 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/analytics/metric/metric.go b/analytics/metric/metric.go index b2fc99d9..df71acb7 100644 --- a/analytics/metric/metric.go +++ b/analytics/metric/metric.go @@ -145,7 +145,7 @@ func (m *Metric) vaaCountMeasurement(ctx context.Context, vaa *sdk.VAA) error { } m.metrics.IncSuccessfulMeasurement(vaaCountMeasurement) - m.logger.Info("generated a data point for the vaa_count metric") + m.logger.Info("generated a data point for the vaa count metric") return nil } diff --git a/api/handlers/transactions/queries.go b/api/handlers/transactions/queries.go index bbe79188..b2e4d3b0 100644 --- a/api/handlers/transactions/queries.go +++ b/api/handlers/transactions/queries.go @@ -36,12 +36,18 @@ union(tables: [aggregatesVaaCount, lastVaaCount]) |> sort(columns: ["_time"], desc: true) ` -func buildLastTrxQuery(bucket string, tm time.Time, q *TransactionCountQuery) string { +func buildLastTrxQuery( + dataPointsBucket string, + aggregationsBucket string, + tm time.Time, + q *TransactionCountQuery, +) string { + startLastVaa, startAggregatesVaa := createRangeQuery(tm, q.TimeSpan) if q.TimeSpan == "1d" && q.SampleRate == "1h" { - return fmt.Sprintf(queryTemplateVaaCount1d1h, bucket, startLastVaa, q.SampleRate, bucket, startAggregatesVaa) + return fmt.Sprintf(queryTemplateVaaCount1d1h, dataPointsBucket, startLastVaa, q.SampleRate, aggregationsBucket, startAggregatesVaa) } - return fmt.Sprintf(queryTemplateVaaCount, bucket, startLastVaa, bucket, startAggregatesVaa) + return fmt.Sprintf(queryTemplateVaaCount, dataPointsBucket, startLastVaa, aggregationsBucket, startAggregatesVaa) } func createRangeQuery(t time.Time, timeSpan string) (string, string) { @@ -57,6 +63,9 @@ func createRangeQuery(t time.Time, timeSpan string) (string, string) { case "1mo": startLastVaa = t.Truncate(time.Hour * 24) startAggregatesVaa = startLastVaa.Add(-time.Hour * 24 * 30) + case "3mo": + startLastVaa = t.Truncate(time.Hour * 24) + startAggregatesVaa = startLastVaa.Add(-time.Hour * 24 * 90) default: startLastVaa = t.Truncate(time.Hour * 1) startAggregatesVaa = startLastVaa.Add(-time.Hour * 24) diff --git a/api/handlers/transactions/queries_test.go b/api/handlers/transactions/queries_test.go index c337c52f..877e5b6a 100644 --- a/api/handlers/transactions/queries_test.go +++ b/api/handlers/transactions/queries_test.go @@ -51,7 +51,7 @@ lastVaaCount = from(bucket: "wormscan-1month") |> filter(fn: (r) => r["_measurement"] == "vaa_count") |> group() |> aggregateWindow(every: 1h, fn: count, createEmpty: true) -aggregatesVaaCount = from(bucket: "wormscan-1month") +aggregatesVaaCount = from(bucket: "wormscan") |> range(start: 2023-05-03T18:00:00Z) |> filter(fn: (r) => r["_measurement"] == "vaa_count_1h") union(tables: [aggregatesVaaCount, lastVaaCount]) @@ -60,7 +60,7 @@ union(tables: [aggregatesVaaCount, lastVaaCount]) ` //2023-05-04T18:39:10.985Z tm := time.Date(2023, 5, 4, 18, 39, 10, 985, time.UTC) - actual := buildLastTrxQuery("wormscan-1month", tm, &TransactionCountQuery{TimeSpan: "1d", SampleRate: "1h"}) + actual := buildLastTrxQuery("wormscan-1month", "wormscan", tm, &TransactionCountQuery{TimeSpan: "1d", SampleRate: "1h"}) assert.Equal(t, expected, actual) } @@ -71,7 +71,7 @@ lastVaaCount = from(bucket: "wormscan-1month") |> range(start: 2023-05-04T00:00:00Z) |> filter(fn: (r) => r["_measurement"] == "vaa_count") |> group() -aggregatesVaaCount = from(bucket: "wormscan-1month") +aggregatesVaaCount = from(bucket: "wormscan") |> range(start: 2023-04-27T00:00:00Z) |> filter(fn: (r) => r["_measurement"] == "vaa_count_1h") |> aggregateWindow(every: 1h, fn: sum, createEmpty: true) @@ -82,7 +82,7 @@ union(tables: [aggregatesVaaCount, lastVaaCount]) ` //2023-05-04T18:39:10.985Z tm := time.Date(2023, 5, 4, 18, 39, 10, 985, time.UTC) - actual := buildLastTrxQuery("wormscan-1month", tm, &TransactionCountQuery{TimeSpan: "1w", SampleRate: "1d"}) + actual := buildLastTrxQuery("wormscan-1month", "wormscan", tm, &TransactionCountQuery{TimeSpan: "1w", SampleRate: "1d"}) assert.Equal(t, expected, actual) } diff --git a/api/handlers/transactions/repository.go b/api/handlers/transactions/repository.go index 03d0ae4d..a4028637 100644 --- a/api/handlers/transactions/repository.go +++ b/api/handlers/transactions/repository.go @@ -623,7 +623,8 @@ func (r *Repository) getVolume24h(ctx context.Context) (string, error) { // GetTransactionCount get the last transactions. func (r *Repository) GetTransactionCount(ctx context.Context, q *TransactionCountQuery) ([]TransactionCountResult, error) { - query := buildLastTrxQuery(r.bucket30DaysRetention, time.Now(), q) + + query := buildLastTrxQuery(r.bucket30DaysRetention, r.bucketInfiniteRetention, time.Now(), q) result, err := r.queryAPI.Query(ctx, query) if err != nil { return nil, err @@ -631,6 +632,7 @@ func (r *Repository) GetTransactionCount(ctx context.Context, q *TransactionCoun if result.Err() != nil { return nil, result.Err() } + response := []TransactionCountResult{} for result.Next() { var row TransactionCountResult @@ -644,7 +646,7 @@ func (r *Repository) GetTransactionCount(ctx context.Context, q *TransactionCoun // https://github.com/wormhole-foundation/wormhole-explorer/issues/406 for i := range response { if i > 0 { - if q.TimeSpan == "1w" || q.TimeSpan == "1mo" { + if q.TimeSpan == "1w" || q.TimeSpan == "1mo" || q.TimeSpan == "3mo" { response[i].Time = response[i].Time.AddDate(0, 0, -1) } else if q.TimeSpan == "1d" { response[i].Time = response[i].Time.Add(-1 * time.Hour) diff --git a/api/middleware/extract_parameters.go b/api/middleware/extract_parameters.go index 2754df88..9f297972 100644 --- a/api/middleware/extract_parameters.go +++ b/api/middleware/extract_parameters.go @@ -297,10 +297,12 @@ func isValidSampleRate(sampleRate string) bool { } func ExtractTimeSpanAndSampleRate(c *fiber.Ctx, l *zap.Logger) (string, string, error) { + timeSpan, err := ExtractTimeSpan(c, l) if err != nil { return "", "", err } + sampleRate, err := ExtractSampleRate(c, l) if err != nil { return "", "", err @@ -319,6 +321,10 @@ func ExtractTimeSpanAndSampleRate(c *fiber.Ctx, l *zap.Logger) (string, string, if sampleRate != "1d" { return "", "", response.NewInvalidQueryParamError(c, "INVALID CONFIGURATION , QUERY PARAMETERS", nil) } + case "3mo": + if sampleRate != "1d" { + return "", "", response.NewInvalidQueryParamError(c, "INVALID CONFIGURATION , QUERY PARAMETERS", nil) + } } return timeSpan, sampleRate, nil diff --git a/api/routes/wormscan/transactions/controller.go b/api/routes/wormscan/transactions/controller.go index 66e52362..7bd271ff 100644 --- a/api/routes/wormscan/transactions/controller.go +++ b/api/routes/wormscan/transactions/controller.go @@ -38,6 +38,7 @@ func NewController(transactionsService *transactions.Service, logger *zap.Logger // @Failure 500 // @Router /api/v1/last-txs [get] func (c *Controller) GetLastTransactions(ctx *fiber.Ctx) error { + timeSpan, sampleRate, err := middleware.ExtractTimeSpanAndSampleRate(ctx, c.logger) if err != nil { return err