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  }