diff options
author | Christopher Speller <crspeller@gmail.com> | 2017-05-17 16:51:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-17 16:51:25 -0400 |
commit | d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26 (patch) | |
tree | dbde13123c6add150448f7b75753ac022d862475 /vendor/github.com/segmentio/analytics-go/cli | |
parent | cd23b8139a9463b67e3096744321f6f4eb0ca40a (diff) | |
download | chat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.tar.gz chat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.tar.bz2 chat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.zip |
Upgrading server dependancies (#6431)
Diffstat (limited to 'vendor/github.com/segmentio/analytics-go/cli')
-rw-r--r-- | vendor/github.com/segmentio/analytics-go/cli/cli.go | 174 |
1 files changed, 174 insertions, 0 deletions
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 <event> [--properties=<properties>] [--context=<context>] [--writeKey=<writeKey>] [--userId=<userId>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<timestamp>] + analytics screen <name> [--properties=<properties>] [--context=<context>] [--writeKey=<writeKey>] [--userId=<userId>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<timestamp>] + analytics page <name> [--properties=<properties>] [--context=<context>] [--writeKey=<writeKey>] [--userId=<userId>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<timestamp>] + analytics identify [--traits=<traits>] [--context=<context>] [--writeKey=<writeKey>] [--userId=<userId>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<timestamp>] + analytics group --groupId=<groupId> [--traits=<traits>] [--properties=<properties>] [--context=<context>] [--writeKey=<writeKey>] [--userId=<userId>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<timestamp>] + analytics alias --userId=<userId> --previousId=<previousId> [--traits=<traits>] [--properties=<properties>] [--context=<context>] [--writeKey=<writeKey>] [--anonymousId=<anonymousId>] [--integrations=<integrations>] [--timestamp=<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["<event>"].(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["<name>"].(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) + } +} |