1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-25 14:59:26 +01:00

Adds analytics for start params

This commit is contained in:
Amir Raminfar
2021-04-19 12:22:13 -07:00
parent 3defe22eed
commit 9fdfabfb5d
4 changed files with 90 additions and 69 deletions

55
analytics/ga.go Normal file
View File

@@ -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
}

View File

@@ -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))
}
}

11
analytics/types.go Normal file
View File

@@ -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"`
}

25
main.go
View File

@@ -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)
}
}