github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/engine/analytics/analytics_updater.go (about)

     1  package analytics
     2  
     3  import (
     4  	"context"
     5  
     6  	wmanalytics "github.com/tilt-dev/wmclient/pkg/analytics"
     7  
     8  	"github.com/tilt-dev/tilt/internal/analytics"
     9  	"github.com/tilt-dev/tilt/internal/store"
    10  	"github.com/tilt-dev/tilt/pkg/logger"
    11  )
    12  
    13  type CmdTags map[string]string
    14  
    15  func (t CmdTags) AsMap() map[string]string {
    16  	return (map[string]string)(t)
    17  }
    18  
    19  type AnalyticsUpdater struct {
    20  	ta          *analytics.TiltAnalytics
    21  	cmdTags     CmdTags
    22  	reportedCmd bool
    23  	engineMode  store.EngineMode
    24  }
    25  
    26  func NewAnalyticsUpdater(ta *analytics.TiltAnalytics, cmdTags CmdTags, engineMode store.EngineMode) *AnalyticsUpdater {
    27  	return &AnalyticsUpdater{
    28  		ta:          ta,
    29  		cmdTags:     cmdTags,
    30  		reportedCmd: ta.EffectiveOpt() != wmanalytics.OptOut,
    31  		engineMode:  engineMode,
    32  	}
    33  }
    34  
    35  func (sub *AnalyticsUpdater) OnChange(ctx context.Context, st store.RStore, _ store.ChangeSummary) error {
    36  	state := st.RLockState()
    37  	defer st.RUnlockState()
    38  
    39  	sub.ta.SetTiltfileOpt(state.AnalyticsTiltfileOpt)
    40  	err := sub.ta.SetUserOpt(state.AnalyticsUserOpt)
    41  	if err != nil {
    42  		logger.Get(ctx).Infof("error saving analytics opt (tried to record opt: '%s')", state.AnalyticsUserOpt)
    43  	}
    44  
    45  	if sub.ta.EffectiveOpt() != wmanalytics.OptOut && !sub.reportedCmd {
    46  		sub.reportedCmd = true
    47  
    48  		cmd := "cmd.up"
    49  		if sub.engineMode.IsCIMode() {
    50  			cmd = "cmd.ci"
    51  		}
    52  
    53  		sub.ta.Incr(cmd, sub.cmdTags.AsMap())
    54  	}
    55  
    56  	return nil
    57  }
    58  
    59  var _ store.Subscriber = &AnalyticsUpdater{}