diff --git a/sync/metrics.go b/sync/metrics.go index f588c089..cd75cd22 100644 --- a/sync/metrics.go +++ b/sync/metrics.go @@ -39,8 +39,8 @@ type metrics struct { requestRangeTimeHist metric.Float64Histogram requestRangeStartTS time.Time - blockTime metric.Float64Histogram - prevHeader time.Time + blockTime metric.Float64Histogram + prevHeaderTs time.Time } func newMetrics() (*metrics, error) { @@ -213,12 +213,18 @@ func (m *metrics) updateGetRangeRequestInfo(ctx context.Context, amount uint64, }) } -func (m *metrics) newSubjectiveHead(ctx context.Context, height uint64, timestamp time.Time) { +func (m *metrics) newNetHead(ctx context.Context, height uint64, timestamp time.Time) { m.observe(ctx, func(ctx context.Context) { m.subjectiveHead.Store(height) - if !m.prevHeader.IsZero() { - m.blockTime.Record(ctx, timestamp.Sub(m.prevHeader).Seconds()) + if timestamp.After(m.prevHeaderTs) { + if !m.prevHeaderTs.IsZero() { + m.blockTime.Record(ctx, timestamp.Sub(m.prevHeaderTs).Seconds(), + metric.WithAttributes( + otelattr.Uint64("height", height), + )) + } + m.prevHeaderTs = time.Now() } }) } diff --git a/sync/syncer_head.go b/sync/syncer_head.go index 85caedc1..0cbedeb5 100644 --- a/sync/syncer_head.go +++ b/sync/syncer_head.go @@ -201,7 +201,6 @@ func (s *Syncer[H]) setLocalHead(ctx context.Context, netHead H) { "hash", netHead.Hash().String(), "err", err) } - s.metrics.newSubjectiveHead(s.ctx, netHead.Height(), netHead.Time()) storeHead, err := s.store.Head(ctx) if err == nil && storeHead.Height() >= netHead.Height() { @@ -227,6 +226,7 @@ func (s *Syncer[H]) incomingNetworkHead(ctx context.Context, head H) error { } s.setLocalHead(ctx, head) + s.metrics.newNetHead(s.ctx, head.Height(), head.Time()) return nil }