From 1b9f25e64f6143ce3a373a00d015426d0960e5b3 Mon Sep 17 00:00:00 2001 From: Amir Raminfar Date: Wed, 31 Jul 2024 10:39:24 -0700 Subject: [PATCH] chore: fixes analytics to have better data (#3170) --- internal/support/cli/analytics.go | 23 ++++++++++++------- internal/support/cli/clients.go | 6 ++--- internal/support/docker/multi_host_service.go | 3 +-- internal/web/events.go | 4 ---- internal/web/index.go | 1 + main.go | 5 +++- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/internal/support/cli/analytics.go b/internal/support/cli/analytics.go index 68cae9b5..1c545a6c 100644 --- a/internal/support/cli/analytics.go +++ b/internal/support/cli/analytics.go @@ -11,17 +11,24 @@ func StartEvent(args Args, mode string, client docker.Client, subCommand string) return } event := analytics.BeaconEvent{ - Name: "start", - Version: args.Version(), - Mode: mode, - RemoteAgents: len(args.RemoteAgent), - RemoteClients: len(args.RemoteHost), - SubCommand: subCommand, + Name: "start", + Version: args.Version(), + Mode: mode, + RemoteAgents: len(args.RemoteAgent), + RemoteClients: len(args.RemoteHost), + SubCommand: subCommand, + HasActions: args.EnableActions, + HasCustomAddress: args.Addr != ":8080", + HasCustomBase: args.Base != "/", + HasHostname: args.Hostname != "", + FilterLength: len(args.Filter), } if client != nil { - event.ServerID = client.SystemInfo().ID - event.ServerVersion = client.SystemInfo().ServerVersion + host := client.Host() + event.ServerID = host.ID + event.ServerVersion = host.DockerVersion + event.IsSwarmMode = client.SystemInfo().Swarm.NodeID != "" } else { event.ServerID = "n/a" } diff --git a/internal/support/cli/clients.go b/internal/support/cli/clients.go index 3baff59d..3b3add8d 100644 --- a/internal/support/cli/clients.go +++ b/internal/support/cli/clients.go @@ -8,7 +8,7 @@ import ( log "github.com/sirupsen/logrus" ) -func CreateMultiHostService(embeddedCerts embed.FS, args Args) *docker_support.MultiHostService { +func CreateMultiHostService(embeddedCerts embed.FS, args Args) (docker.Client, *docker_support.MultiHostService) { var clients []docker_support.ClientService if len(args.RemoteHost) > 0 { log.Warnf(`Remote host flag is deprecated and will be removed in future versions. Agents will replace remote hosts as a safer and performant option. See https://github.com/amir20/dozzle/issues/3066 for discussion.`) @@ -38,10 +38,8 @@ func CreateMultiHostService(embeddedCerts embed.FS, args Args) *docker_support.M _, err := localClient.ListContainers() if err != nil { log.Debugf("could not connect to local Docker Engine: %s", err) - go StartEvent(args, args.Mode, nil, "") } else { log.Debugf("connected to local Docker Engine") - go StartEvent(args, args.Mode, localClient, "") clients = append(clients, docker_support.NewDockerClientService(localClient)) } } @@ -52,5 +50,5 @@ func CreateMultiHostService(embeddedCerts embed.FS, args Args) *docker_support.M } clientManager := docker_support.NewRetriableClientManager(args.RemoteAgent, certs, clients...) - return docker_support.NewMultiHostService(clientManager) + return localClient, docker_support.NewMultiHostService(clientManager) } diff --git a/internal/support/docker/multi_host_service.go b/internal/support/docker/multi_host_service.go index 99b92225..5663d7c3 100644 --- a/internal/support/docker/multi_host_service.go +++ b/internal/support/docker/multi_host_service.go @@ -28,8 +28,7 @@ type ClientManager interface { } type MultiHostService struct { - manager ClientManager - SwarmMode bool + manager ClientManager } func NewMultiHostService(manager ClientManager) *MultiHostService { diff --git a/internal/web/events.go b/internal/web/events.go index a166bd52..c47533e7 100644 --- a/internal/web/events.go +++ b/internal/web/events.go @@ -139,10 +139,6 @@ func sendBeaconEvent(h *handler, r *http.Request, runningContainers int) { b.ServerID = local.ID } - if h.multiHostService.SwarmMode { - b.Mode = "swarm" - } - if err := analytics.SendBeacon(b); err != nil { log.Debugf("error sending beacon: %v", err) } diff --git a/internal/web/index.go b/internal/web/index.go index fa7fcb70..d1a1da45 100644 --- a/internal/web/index.go +++ b/internal/web/index.go @@ -42,6 +42,7 @@ func (h *handler) executeTemplate(w http.ResponseWriter, req *http.Request) { if h.config.Base != "/" { base = h.config.Base } + hosts := h.multiHostService.Hosts() sort.Slice(hosts, func(i, j int) bool { return hosts[i].Name < hosts[j].Name diff --git a/main.go b/main.go index 0a8118d3..c3ee8638 100644 --- a/main.go +++ b/main.go @@ -135,12 +135,15 @@ func main() { var multiHostService *docker_support.MultiHostService if args.Mode == "server" { - multiHostService = cli.CreateMultiHostService(certs, args) + var localClient docker.Client + localClient, multiHostService = cli.CreateMultiHostService(certs, args) if multiHostService.TotalClients() == 0 { log.Fatal("Could not connect to any Docker Engines") } else { log.Infof("Connected to %d Docker Engine(s)", multiHostService.TotalClients()) } + go cli.StartEvent(args, "server", localClient, "") + } else if args.Mode == "swarm" { localClient, err := docker.NewLocalClient(args.Filter, args.Hostname) if err != nil {