github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/engine/telemetry/start_tracker.go (about) 1 package telemetry 2 3 import ( 4 "context" 5 6 "go.opentelemetry.io/otel/trace" 7 8 "github.com/tilt-dev/tilt/internal/store" 9 ) 10 11 type StartTracker struct { 12 tracer trace.Tracer 13 span trace.Span 14 startFinished bool 15 } 16 17 func NewStartTracker(tracer trace.Tracer) *StartTracker { 18 return &StartTracker{tracer: tracer, startFinished: false} 19 } 20 21 func (c *StartTracker) OnChange(ctx context.Context, st store.RStore, _ store.ChangeSummary) error { 22 if c.startFinished { 23 return nil 24 } 25 26 state := st.RLockState() 27 defer st.RUnlockState() 28 29 if !state.InitialBuildsCompleted() && c.span == nil { 30 _, span := c.tracer.Start(ctx, "first_run") 31 c.span = span 32 } 33 34 if state.InitialBuildsCompleted() && c.span != nil { 35 c.span.End() 36 c.startFinished = true 37 } 38 39 return nil 40 }