From d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Wed, 17 May 2017 16:51:25 -0400 Subject: Upgrading server dependancies (#6431) --- .../github.com/segmentio/analytics-go/cli/cli.go | 174 +++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 vendor/github.com/segmentio/analytics-go/cli/cli.go (limited to 'vendor/github.com/segmentio') diff --git a/vendor/github.com/segmentio/analytics-go/cli/cli.go b/vendor/github.com/segmentio/analytics-go/cli/cli.go new file mode 100644 index 000000000..9d1f940c9 --- /dev/null +++ b/vendor/github.com/segmentio/analytics-go/cli/cli.go @@ -0,0 +1,174 @@ +package main + +import ( + "encoding/json" + "log" + "os" + "reflect" + + "github.com/segmentio/analytics-go" + "github.com/tj/docopt" +) + +const Usage = ` +Analytics Go CLI + +Usage: + analytics track [--properties=] [--context=] [--writeKey=] [--userId=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics screen [--properties=] [--context=] [--writeKey=] [--userId=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics page [--properties=] [--context=] [--writeKey=] [--userId=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics identify [--traits=] [--context=] [--writeKey=] [--userId=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics group --groupId= [--traits=] [--properties=] [--context=] [--writeKey=] [--userId=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics alias --userId= --previousId= [--traits=] [--properties=] [--context=] [--writeKey=] [--anonymousId=] [--integrations=] [--timestamp=] + analytics -h | --help + analytics --version + +Options: + -h --help Show this screen. + --version Show version. +` + +func main() { + arguments, err := docopt.Parse(Usage, nil, true, "Anaytics Go CLI", false) + check(err) + + writeKey := getOptionalString(arguments, "--writeKey") + if writeKey == "" { + writeKey = os.Getenv("SEGMENT_WRITE_KEY") + if writeKey == "" { + log.Fatal("either $SEGMENT_WRITE_KEY or --writeKey must be provided") + } + } + + client := analytics.New(writeKey) + client.Size = 1 + client.Verbose = true + + if arguments["track"].(bool) { + m := &analytics.Track{ + Event: arguments[""].(string), + } + properties := getOptionalString(arguments, "--properties") + if properties != "" { + var parsedProperties map[string]interface{} + err := json.Unmarshal([]byte(properties), &parsedProperties) + check(err) + m.Properties = parsedProperties + } + + setCommonFields(m, arguments) + + check(client.Track(m)) + } + + if arguments["screen"].(bool) || arguments["page"].(bool) { + m := &analytics.Page{ + Name: arguments[""].(string), + } + /* Bug in Go library - page has traits not properties. + properties := getOptionalString(arguments, "--properties") + if properties != "" { + var parsedProperties map[string]interface{} + err := json.Unmarshal([]byte(properties), &parsedProperties) + check(err) + t.Properties = parsedProperties + } + */ + + setCommonFields(m, arguments) + + check(client.Page(m)) + } + + if arguments["identify"].(bool) { + m := &analytics.Identify{} + traits := getOptionalString(arguments, "--traits") + if traits != "" { + var parsedTraits map[string]interface{} + err := json.Unmarshal([]byte(traits), &parsedTraits) + check(err) + m.Traits = parsedTraits + } + + setCommonFields(m, arguments) + + check(client.Identify(m)) + } + + if arguments["group"].(bool) { + m := &analytics.Group{ + GroupId: arguments["--groupId"].(string), + } + traits := getOptionalString(arguments, "--traits") + if traits != "" { + var parsedTraits map[string]interface{} + err := json.Unmarshal([]byte(traits), &parsedTraits) + check(err) + m.Traits = parsedTraits + } + + setCommonFields(m, arguments) + + check(client.Group(m)) + } + + if arguments["alias"].(bool) { + m := &analytics.Alias{ + PreviousId: arguments["--previousId"].(string), + } + + setCommonFields(m, arguments) + + check(client.Alias(m)) + } + + client.Close() +} + +func setCommonFields(message interface{}, arguments map[string]interface{}) { + userId := getOptionalString(arguments, "--userId") + if userId != "" { + setFieldValue(message, "UserId", userId) + } + anonymousId := getOptionalString(arguments, "--anonymousId") + if anonymousId != "" { + setFieldValue(message, "AnonymousId", anonymousId) + } + integrations := getOptionalString(arguments, "--integrations") + if integrations != "" { + var parsedIntegrations map[string]interface{} + err := json.Unmarshal([]byte(integrations), &parsedIntegrations) + check(err) + setFieldValue(message, "Integrations", parsedIntegrations) + } + context := getOptionalString(arguments, "--context") + if context != "" { + var parsedContext map[string]interface{} + err := json.Unmarshal([]byte(context), &parsedContext) + check(err) + setFieldValue(message, "Context", parsedContext) + + } + timestamp := getOptionalString(arguments, "--timestamp") + if timestamp != "" { + setFieldValue(message, "Timestamp", timestamp) + } +} + +func setFieldValue(target interface{}, field string, value interface{}) { + reflect.ValueOf(target).Elem().FieldByName(field).Set(reflect.ValueOf(value)) +} + +func getOptionalString(m map[string]interface{}, k string) string { + v := m[k] + if v == nil { + return "" + } + return v.(string) +} + +func check(err error) { + if err != nil { + log.Fatal(err) + } +} -- cgit v1.2.3-1-g7c22