diff --git a/metrics/commands.go b/metrics/commands.go index bcf9ee91f..af491a890 100644 --- a/metrics/commands.go +++ b/metrics/commands.go @@ -23,6 +23,7 @@ var commandFlags = []string{ // Generated with generatecommands/main.go var managementCommands = []string{ + "help", "ecs", "scan", "app", diff --git a/metrics/generatecommands/main.go b/metrics/generatecommands/main.go index 9491c4e8a..c24c63058 100644 --- a/metrics/generatecommands/main.go +++ b/metrics/generatecommands/main.go @@ -35,6 +35,7 @@ func main() { fmt.Printf(` var managementCommands = []string{ + "help", "%s", } diff --git a/metrics/metrics.go b/metrics/metrics.go index 3f6c3931d..801c25bba 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -17,6 +17,8 @@ package metrics import ( + "strings" + "github.com/docker/compose-cli/utils" ) @@ -52,18 +54,15 @@ func GetCommand(args []string) string { onlyFlags := false for _, arg := range args { if arg == "--help" { - return "" + result = strings.TrimSpace(arg + " " + result) + continue } if arg == "--" { break } if isCommandFlag(arg) || (!onlyFlags && isCommand(arg)) { - if result == "" { - result = arg - } else { - result = result + " " + arg - } - if !isManagementCommand(arg) { + result = strings.TrimSpace(result + " " + arg) + if isCommand(arg) && !isManagementCommand(arg) { onlyFlags = true } } diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go index cd66e18a4..f9c24d875 100644 --- a/metrics/metrics_test.go +++ b/metrics/metrics_test.go @@ -153,26 +153,31 @@ func TestGetCommand(t *testing.T) { } } -func TestIgnoreHelpCommands(t *testing.T) { +func TestKeepHelpCommands(t *testing.T) { testCases := []struct { name string args []string expected string }{ { - name: "help", - args: []string{"--help"}, - expected: "", - }, - { - name: "help on run", + name: "run with help flag", args: []string{"run", "--help"}, - expected: "", + expected: "--help run", }, { - name: "help on compose up", - args: []string{"compose", "up", "--help"}, - expected: "", + name: "with help flag before-after commands", + args: []string{"compose", "--help", "up"}, + expected: "--help compose up", + }, + { + name: "help flag", + args: []string{"--help"}, + expected: "--help", + }, + { + name: "help commands", + args: []string{"help", "run"}, + expected: "help run", }, } diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index f404bded1..d06154904 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -161,15 +161,19 @@ func TestContextMetrics(t *testing.T) { s.Start() defer s.Stop() - t.Run("do not send metrics on help commands", func(t *testing.T) { + t.Run("send metrics on help commands", func(t *testing.T) { s.ResetUsage() + c.RunDockerCmd("help", "run") c.RunDockerCmd("--help") - c.RunDockerCmd("ps", "--help") c.RunDockerCmd("run", "--help") usage := s.GetUsage() - assert.Equal(t, 0, len(usage)) + assert.DeepEqual(t, []string{ + `{"command":"help run","context":"moby","source":"cli","status":"success"}`, + `{"command":"--help","context":"moby","source":"cli","status":"success"}`, + `{"command":"--help run","context":"moby","source":"cli","status":"success"}`, + }, usage) }) t.Run("metrics on default context", func(t *testing.T) { @@ -180,10 +184,11 @@ func TestContextMetrics(t *testing.T) { c.RunDockerOrExitError("version", "--xxx") usage := s.GetUsage() - assert.Equal(t, 3, len(usage)) - assert.Equal(t, `{"command":"ps","context":"moby","source":"cli","status":"success"}`, usage[0]) - assert.Equal(t, `{"command":"version","context":"moby","source":"cli","status":"success"}`, usage[1]) - assert.Equal(t, `{"command":"version","context":"moby","source":"cli","status":"failure"}`, usage[2]) + assert.DeepEqual(t, []string{ + `{"command":"ps","context":"moby","source":"cli","status":"success"}`, + `{"command":"version","context":"moby","source":"cli","status":"success"}`, + `{"command":"version","context":"moby","source":"cli","status":"failure"}`, + }, usage) }) t.Run("metrics on other context type", func(t *testing.T) { @@ -198,14 +203,15 @@ func TestContextMetrics(t *testing.T) { c.RunDockerCmd("--context", "test-example", "ps") usage := s.GetUsage() - assert.Equal(t, 7, len(usage)) - assert.Equal(t, `{"command":"context create","context":"moby","source":"cli","status":"success"}`, usage[0]) - assert.Equal(t, `{"command":"ps","context":"moby","source":"cli","status":"success"}`, usage[1]) - assert.Equal(t, `{"command":"context use","context":"moby","source":"cli","status":"success"}`, usage[2]) - assert.Equal(t, `{"command":"ps","context":"example","source":"cli","status":"success"}`, usage[3]) - assert.Equal(t, `{"command":"stop","context":"example","source":"cli","status":"failure"}`, usage[4]) - assert.Equal(t, `{"command":"context use","context":"example","source":"cli","status":"success"}`, usage[5]) - assert.Equal(t, `{"command":"ps","context":"example","source":"cli","status":"success"}`, usage[6]) + assert.DeepEqual(t, []string{ + `{"command":"context create","context":"moby","source":"cli","status":"success"}`, + `{"command":"ps","context":"moby","source":"cli","status":"success"}`, + `{"command":"context use","context":"moby","source":"cli","status":"success"}`, + `{"command":"ps","context":"example","source":"cli","status":"success"}`, + `{"command":"stop","context":"example","source":"cli","status":"failure"}`, + `{"command":"context use","context":"example","source":"cli","status":"success"}`, + `{"command":"ps","context":"example","source":"cli","status":"success"}`, + }, usage) }) }