Add 3-month filter to last-txs endpoint

This commit is contained in:
Agustin Godnic 2023-08-14 16:40:59 -03:00
parent a583d81dbc
commit ced17ebfae
6 changed files with 28 additions and 10 deletions

View File

@ -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
}

View File

@ -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)

View File

@ -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)
}

View File

@ -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)

View File

@ -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 <timeSpan>, <sampleRate> QUERY PARAMETERS", nil)
}
case "3mo":
if sampleRate != "1d" {
return "", "", response.NewInvalidQueryParamError(c, "INVALID CONFIGURATION <timeSpan>, <sampleRate> QUERY PARAMETERS", nil)
}
}
return timeSpan, sampleRate, nil

View File

@ -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