Skip to content

Commit c3df46b

Browse files
Fix timeline chart bucket alignment and precision (#2129)
Replaced integer duration division with `time.Truncate(granularity)` to ensure mathematically perfect bucket alignment and prevent edge-case tracking bugs over long periods. Also swapped map keys from `time.Time` to `int64` (Unix timestamps) to avoid any potential strict location/pointer reference mapping issues when processing Unmarshalled `time.Time` types. Added tests with unaligned data to confirm correctness. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: KCarretto <16250309+KCarretto@users.noreply.github.com>
1 parent 5011143 commit c3df46b

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

tavern/internal/graphql/metrics.resolvers.go

Lines changed: 12 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tavern/internal/graphql/metrics_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ func TestMetrics_QuestTimelineChart(t *testing.T) {
5959
Save(ctx)
6060
require.NoError(t, err)
6161

62-
// Quest 3 at startTime + 3s (Bucket 3)
62+
// Quest 3 at startTime + 3.5s (Unaligned! Should be perfectly aligned into Bucket 3)
6363
_, err = client.Quest.Create().
6464
SetName("quest3").
6565
SetTome(tome1).
66-
SetCreatedAt(startTime.Add(3 * time.Second)).
66+
SetCreatedAt(startTime.Add(3500 * time.Millisecond)).
6767
Save(ctx)
6868
require.NoError(t, err)
6969

tavern/internal/graphql/resolver.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ func WithBuilderCA(builderCA *x509.Certificate) Option {
4545
// NewSchema creates a graphql executable schema.
4646
func NewSchema(client *ent.Client, importer RepoImporter, options ...func(*Resolver)) graphql.ExecutableSchema {
4747
resolver := &Resolver{
48-
client: client,
49-
importer: importer,
48+
client: client,
49+
importer: importer,
5050
}
5151
for _, opt := range options {
52-
opt(resolver)
53-
}
52+
opt(resolver)
53+
}
5454
cfg := generated.Config{
5555
Resolvers: resolver,
5656
}

0 commit comments

Comments
 (0)