diff --git a/analytics/ga.go b/analytics/ga.go new file mode 100644 index 00000000..59b17ac6 --- /dev/null +++ b/analytics/ga.go @@ -0,0 +1,55 @@ +package analytics + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/http/httputil" + + log "github.com/sirupsen/logrus" +) + +func SendStartEvent(se StartEvent) error { + postBody := map[string]interface{}{ + "client_id": se.ClientId, + "events": []map[string]interface{}{ + { + "name": "start", + "params": se, + }, + }, + } + + jsonValue, err := json.Marshal(postBody) + if err != nil { + return err + } + + req, err := http.NewRequest("POST", "https://www.google-analytics.com/mp/collect", bytes.NewBuffer(jsonValue)) + if err != nil { + return err + } + + q := req.URL.Query() + q.Add("measurement_id", "G-S6NT05VXK9") + q.Add("api_secret", "7FFhe65HQK-bXvujpQMquQ") + req.URL.RawQuery = q.Encode() + + response, err := http.DefaultClient.Do(req) + if err != nil { + log.Debug(err) + } + defer response.Body.Close() + + if response.StatusCode/100 != 2 { + dump, err := httputil.DumpResponse(response, true) + if err != nil { + return err + } + log.Debugf("%v", string(dump)) + return fmt.Errorf("google analytics returned non-2xx status code: %v", response.Status) + } + + return nil +} diff --git a/analytics/ga_example.go b/analytics/ga_example.go deleted file mode 100644 index de4454b4..00000000 --- a/analytics/ga_example.go +++ /dev/null @@ -1,68 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "log" - "net/http" - "net/http/httputil" -) - -type StartEvent struct { - Version string - FilterLength int - CustomAddress bool - CustomBase bool - TailSize int - Protected bool - -} - -func main() { - postBody := map[string]interface{}{ - "client_id": "XXXXXXXXXX.YYYYYYYYYY", - "events": []map[string]interface{}{ - { - "name": "test_go", - "params": map[string]interface{}{ - "version": "1.1.1", - "docker": "2", - "color": "red", - }, - }, - }, - } - - jsonValue, err := json.Marshal(postBody) - if err != nil { - log.Fatal(err) - } - log.Print(string(jsonValue)) - - req, err := http.NewRequest("POST", "https://www.google-analytics.com/mp/collect", bytes.NewBuffer(jsonValue)) - if err != nil { - log.Fatal(err) - } - - q := req.URL.Query() - q.Add("measurement_id", "G-S6NT05VXK9") - q.Add("api_secret", "7FFhe65HQK-bXvujpQMquQ") - req.URL.RawQuery = q.Encode() - - dump, err := httputil.DumpRequestOut(req, true) - if err != nil { - log.Fatal(err) - } - log.Printf("%v", string(dump)) - - if response, err := http.DefaultClient.Do(req); err != nil { - log.Fatal(err) - } else { - defer response.Body.Close() - dump, err := httputil.DumpResponse(response, true) - if err != nil { - log.Fatal(err) - } - log.Printf("%v", string(dump)) - } -} diff --git a/analytics/types.go b/analytics/types.go new file mode 100644 index 00000000..cc0eae82 --- /dev/null +++ b/analytics/types.go @@ -0,0 +1,11 @@ +package analytics + +type StartEvent struct { + ClientId string `json:"-"` + Version string `json:"version"` + FilterLength int `json:"filterLength"` + CustomAddress bool `json:"customAddress"` + CustomBase bool `json:"customBase"` + TailSize int `json:"tailSize"` + Protected bool `json:"protected"` +} diff --git a/main.go b/main.go index 382393ef..d2846198 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,7 @@ import ( "time" "github.com/alexflint/go-arg" + "github.com/amir20/dozzle/analytics" "github.com/amir20/dozzle/docker" "github.com/amir20/dozzle/web" @@ -103,7 +104,7 @@ func main() { } srv := web.CreateServer(dockerClient, static, config) - + go doStartEvent(args) go func() { log.Infof("Accepting connections on %s", srv.Addr) if err := srv.ListenAndServe(); err != nil { @@ -121,3 +122,25 @@ func main() { srv.Shutdown(ctx) os.Exit(0) } + +func doStartEvent(arg args) { + host, err := os.Hostname() + if err != nil { + log.Debug(err) + return + } + + event := analytics.StartEvent{ + ClientId: host, + Version: version, + FilterLength: len(filters), + CustomAddress: arg.Addr != ":8080", + CustomBase: arg.Base != "/", + TailSize: arg.TailSize, + Protected: arg.Username != "", + } + + if err := analytics.SendStartEvent(event); err != nil { + log.Debug(err) + } +}