fix query from last-tx endpoint (#311)

Co-authored-by: ftocal <fert1335@gmail.com>
This commit is contained in:
walker-16 2023-05-12 10:54:29 -03:00 committed by GitHub
parent eb414c9f65
commit 25a675f99a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 64 additions and 29 deletions

View File

@ -5,44 +5,62 @@ import (
"time"
)
const queryTemplateVaaCount = `
// queryTemplateVaaCount1d1h is the query used to get the last VAA count and the aggregated VAA count for the last 24 hours by hour.
const queryTemplateVaaCount1d1h = `
lastVaaCount = from(bucket: "%s")
|> range(start: %s)
|> filter(fn: (r) => r["_measurement"] == "vaa_count")
|> group()
|> aggregateWindow(every: %s, fn: count, createEmpty: true)
aggregatesVaaCount = from(bucket: "%s")
|> range(start: %s , stop: %s)
|> range(start: %s)
|> filter(fn: (r) => r["_measurement"] == "vaa_count_1h")
|> aggregateWindow(every: %s, fn: count, createEmpty: true)
union(tables: [aggregatesVaaCount, lastVaaCount])
|> group()
|> sort(columns: ["_time"], desc: true)
`
// queryTemplateVaaCount1d1h is the query used to get the last VAA count and the aggregated VAA count for 1 week or month by day.
const queryTemplateVaaCount = `
lastVaaCount = from(bucket: "%s")
|> range(start: %s)
|> filter(fn: (r) => r["_measurement"] == "vaa_count")
|> group()
aggregatesVaaCount = from(bucket: "%s")
|> range(start: %s)
|> filter(fn: (r) => r["_measurement"] == "vaa_count_1h")
|> aggregateWindow(every: 1h, fn: sum, createEmpty: true)
union(tables: [aggregatesVaaCount, lastVaaCount])
|> group()
|> aggregateWindow(every: 1d, fn: sum, createEmpty: true)
|> sort(columns: ["_time"], desc: true)
`
func buildLastTrxQuery(bucket string, tm time.Time, q *TransactionCountQuery) string {
startLastVaa, startAggregatesVaa, stopAggregatesVaa := createRangeQuery(tm, q.TimeSpan)
return fmt.Sprintf(queryTemplateVaaCount, bucket, startLastVaa, q.SampleRate, bucket, startAggregatesVaa, stopAggregatesVaa, q.SampleRate)
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(queryTemplateVaaCount, bucket, startLastVaa, bucket, startAggregatesVaa)
}
func createRangeQuery(t time.Time, timeSpan string) (string, string, string) {
func createRangeQuery(t time.Time, timeSpan string) (string, string) {
const format = time.RFC3339Nano
startLastVaa := t.Truncate(time.Hour * 1)
stopAggregatesVaa := startLastVaa.Add(time.Nanosecond * 1)
var startAggregatesVaa time.Time
var startLastVaa, startAggregatesVaa time.Time
switch timeSpan {
case "1w":
startLastVaa = t.Truncate(time.Hour * 24)
startAggregatesVaa = startLastVaa.Add(-time.Hour * 24 * 7)
case "1mo":
startLastVaa = t.Truncate(time.Hour * 24)
startAggregatesVaa = startLastVaa.Add(-time.Hour * 24 * 30)
default:
startLastVaa = t.Truncate(time.Hour * 1)
startAggregatesVaa = startLastVaa.Add(-time.Hour * 24)
}
return startLastVaa.Format(format), startAggregatesVaa.Format(format), stopAggregatesVaa.Format(format)
return startLastVaa.Format(format), startAggregatesVaa.Format(format)
}

View File

@ -10,9 +10,9 @@ import (
func TestQueries_createRangeQuery(t *testing.T) {
var tests = []struct {
tm time.Time
ts string
wantStartLastVaa, wantStartAggregatesVaa, wantStopAggregatesVaa string
tm time.Time
ts string
wantStartLastVaa, wantStartAggregatesVaa string
}{
{
//2023-05-04T12:25:48.112233445Z
@ -20,35 +20,31 @@ func TestQueries_createRangeQuery(t *testing.T) {
ts: "1d",
wantStartLastVaa: "2023-05-04T12:00:00Z",
wantStartAggregatesVaa: "2023-05-03T12:00:00Z",
wantStopAggregatesVaa: "2023-05-04T12:00:00.000000001Z",
},
{
//2023-05-04T20:59:17.992233445Z
tm: time.Date(2023, 5, 4, 20, 59, 17, 992233445, time.UTC),
ts: "1w",
wantStartLastVaa: "2023-05-04T20:00:00Z",
wantStartAggregatesVaa: "2023-04-27T20:00:00Z",
wantStopAggregatesVaa: "2023-05-04T20:00:00.000000001Z",
wantStartLastVaa: "2023-05-04T00:00:00Z",
wantStartAggregatesVaa: "2023-04-27T00:00:00Z",
},
{
//2023-05-04T17:09:33.987654321Z
tm: time.Date(2023, 5, 4, 17, 9, 33, 987654321, time.UTC),
ts: "1mo",
wantStartLastVaa: "2023-05-04T17:00:00Z",
wantStartAggregatesVaa: "2023-04-04T17:00:00Z",
wantStopAggregatesVaa: "2023-05-04T17:00:00.000000001Z",
wantStartLastVaa: "2023-05-04T00:00:00Z",
wantStartAggregatesVaa: "2023-04-04T00:00:00Z",
},
}
for _, tt := range tests {
startLastVaa, startAggregatesVaa, stopAggregatesVaa := createRangeQuery(tt.tm, tt.ts)
startLastVaa, startAggregatesVaa := createRangeQuery(tt.tm, tt.ts)
assert.Equal(t, tt.wantStartLastVaa, startLastVaa)
assert.Equal(t, tt.wantStartAggregatesVaa, startAggregatesVaa)
assert.Equal(t, tt.wantStopAggregatesVaa, stopAggregatesVaa)
}
}
func TestQueries_buildLastTrxQuery(t *testing.T) {
func TestQueries_buildLastTrxQuery1d1h(t *testing.T) {
expected := `
lastVaaCount = from(bucket: "wormscan-1month")
@ -56,12 +52,9 @@ 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")
|> range(start: 2023-05-03T18:00:00Z , stop: 2023-05-04T18:00:00.000000001Z)
|> range(start: 2023-05-03T18:00:00Z)
|> filter(fn: (r) => r["_measurement"] == "vaa_count_1h")
|> aggregateWindow(every: 1h, fn: count, createEmpty: true)
union(tables: [aggregatesVaaCount, lastVaaCount])
|> group()
|> sort(columns: ["_time"], desc: true)
@ -73,3 +66,27 @@ union(tables: [aggregatesVaaCount, lastVaaCount])
fmt.Println(actual)
assert.Equal(t, expected, actual)
}
func TestQueries_buildLastTrxQuery1w1d(t *testing.T) {
expected := `
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")
|> range(start: 2023-04-27T00:00:00Z)
|> filter(fn: (r) => r["_measurement"] == "vaa_count_1h")
|> aggregateWindow(every: 1h, fn: sum, createEmpty: true)
union(tables: [aggregatesVaaCount, lastVaaCount])
|> group()
|> aggregateWindow(every: 1d, fn: sum, createEmpty: true)
|> sort(columns: ["_time"], desc: true)
`
//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"})
fmt.Println(actual)
fmt.Println(actual)
assert.Equal(t, expected, actual)
}