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  }