github.com/tilt-dev/wat@v0.0.2-0.20180626175338-9349b638e250/cli/analytics/opt.go (about) 1 package analytics 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 "github.com/windmilleng/wat/cli/dirs" 9 ) 10 11 type Opt int 12 13 const ( 14 OptDefault Opt = iota 15 OptOut 16 OptIn 17 ) 18 19 var Choices = map[Opt]string{ 20 OptDefault: "default", 21 OptOut: "opt-out", 22 OptIn: "opt-in", 23 } 24 25 func OptStatus() (Opt, error) { 26 txt, err := readChoiceFile() 27 if err != nil { 28 return OptDefault, err 29 } 30 31 switch txt { 32 case Choices[OptIn]: 33 return OptIn, nil 34 case Choices[OptOut]: 35 return OptOut, nil 36 } 37 38 return OptDefault, nil 39 } 40 41 func SetOptStr(s string) error { 42 choice := OptDefault 43 for k, v := range Choices { 44 if v == s { 45 choice = k 46 } 47 // allow "<appName> analytics opt in" to work 48 if v == "opt-"+s { 49 choice = k 50 } 51 } 52 53 return SetOpt(choice) 54 } 55 56 func SetOpt(c Opt) error { 57 s := Choices[c] 58 59 d, err := dirs.UseWindmillDir() 60 if err != nil { 61 return err 62 } 63 64 if err = d.WriteFile(choiceFile, s); err != nil { 65 return err 66 } 67 68 return nil 69 } 70 71 func readChoiceFile() (string, error) { 72 d, err := dirs.UseWindmillDir() 73 if err != nil { 74 return "", err 75 } 76 77 txt, err := d.ReadFile(choiceFile) 78 if err != nil { 79 if !os.IsNotExist(err) { 80 return "", err 81 } 82 txt = "" 83 } 84 85 return strings.TrimSpace(txt), nil 86 } 87 88 func optedIn() bool { 89 opt, err := OptStatus() 90 if err != nil { 91 fmt.Fprintf(os.Stderr, "analytics.optedIn: %v\n", err) 92 } 93 94 return opt == OptIn 95 }