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{}