diff --git a/cmd/traceectl/cmd/metrics.go b/cmd/traceectl/cmd/metrics.go new file mode 100644 index 000000000000..583cc2e8b01d --- /dev/null +++ b/cmd/traceectl/cmd/metrics.go @@ -0,0 +1,29 @@ +package cmd + +import ( + "os" + + cmdCobra "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/cobra" + + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/client" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +var metricsCmd = &cobra.Command{ + Use: "metrics", + Short: "Display Tracee metrics", + Long: "Retrieves metrics about Tracee's performance and resource usage.", + Run: func(cmd *cobra.Command, args []string) { + displayMetrics(cmd, args) + }, +} + +func init() { + rootCmd.AddCommand(metricsCmd) + + metricsCmd.Flags().String(flags.ServerFlag, client.DefaultSocket, "Specify the server unix socket.") + if err := viper.BindPFlag(flags.ServerFlag, metricsCmd.Flags().Lookup(flags.ServerFlag)); err != nil { + panic(err) + } +} diff --git a/cmd/traceectl/cmd/root.go b/cmd/traceectl/cmd/root.go index b36b8886d992..857b23e7f316 100644 --- a/cmd/traceectl/cmd/root.go +++ b/cmd/traceectl/cmd/root.go @@ -1,13 +1,10 @@ package cmd import ( - "context" - "fmt" "os" "github.com/spf13/cobra" - pb "github.com/aquasecurity/tracee/api/v1beta1" "github.com/aquasecurity/tracee/cmd/traceectl/pkg/client" "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/flags" ) @@ -47,8 +44,6 @@ This tool allows you to manage events, stream events directly from tracee, and g func init() { rootCmd.AddCommand(streamCmd) rootCmd.AddCommand(eventCmd) - rootCmd.AddCommand(metricsCmd) - rootCmd.AddCommand(versionCmd) rootCmd.PersistentFlags().StringVar(&server.Addr, "server", client.Socket, `Server connection path or address. for unix socket (default: /tmp/tracee.sock) @@ -56,68 +51,8 @@ func init() { rootCmd.PersistentFlags().StringVarP(&outputFlag, "output", "o", "", "Specify the output format") } -var metricsCmd = &cobra.Command{ - Use: "metrics [--output ]", - Short: "Display Tracee metrics", - Long: "Retrieves metrics about Tracee's performance and resource usage.", - Run: func(cmd *cobra.Command, args []string) { - displayMetrics(cmd, args) - }, -} - -var versionCmd = &cobra.Command{ - Use: "version", - Short: "Display the version of tracee", - Long: "This is the version of the tracee application you connected to", - Run: func(cmd *cobra.Command, args []string) { - displayVersion(cmd, args) - }, -} - func Execute() { if err := rootCmd.Execute(); err != nil { os.Exit(1) } } - -func displayMetrics(cmd *cobra.Command, _ []string) { - traceeClient, err := client.NewDiagnosticClient(server) - if err != nil { - cmd.PrintErrln("Error creating client: ", err) - return - } - defer traceeClient.CloseConnection() - - response, err := traceeClient.GetMetrics(context.Background(), &pb.GetMetricsRequest{}) - if err != nil { - cmd.PrintErrln("Error getting metrics: ", err) - return - } - - fmt.Fprintf(cmd.OutOrStdout(), "EventCount: %d\n", response.EventCount) - fmt.Fprintf(cmd.OutOrStdout(), "EventsFiltered: %d\n", response.EventsFiltered) - fmt.Fprintf(cmd.OutOrStdout(), "NetCapCount: %d\n", response.NetCapCount) - fmt.Fprintf(cmd.OutOrStdout(), "BPFLogsCount: %d\n", response.BPFLogsCount) - fmt.Fprintf(cmd.OutOrStdout(), "ErrorCount: %d\n", response.ErrorCount) - fmt.Fprintf(cmd.OutOrStdout(), "LostEvCount: %d\n", response.LostEvCount) - fmt.Fprintf(cmd.OutOrStdout(), "LostWrCount: %d\n", response.LostWrCount) - fmt.Fprintf(cmd.OutOrStdout(), "LostNtCapCount: %d\n", response.LostNtCapCount) - fmt.Fprintf(cmd.OutOrStdout(), "LostBPFLogsCount: %d\n", response.LostBPFLogsCount) -} - -func displayVersion(cmd *cobra.Command, _ []string) { - traceeClient, err := client.NewServiceClient(server) - if err != nil { - cmd.PrintErrln("Error creating client: ", err) - return - } - defer traceeClient.CloseConnection() - - response, err := traceeClient.GetVersion(context.Background(), &pb.GetVersionRequest{}) - - if err != nil { - cmd.PrintErrln("Error getting version: ", err) - return - } - fmt.Fprintf(cmd.OutOrStdout(), "Version: %s\n", response.Version) -} diff --git a/cmd/traceectl/cmd/version.go b/cmd/traceectl/cmd/version.go new file mode 100644 index 000000000000..96f9a4446915 --- /dev/null +++ b/cmd/traceectl/cmd/version.go @@ -0,0 +1,25 @@ +package cmd + +import ( + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/client" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Display the version of tracee", + Long: "This is the version of the tracee application you connected to", + Run: func(cmd *cobra.Command, args []string) { + displayVersion(cmd, args) + }, +} + +func inti() { + rootCmd.AddCommand(versionCmd) + + versionCmd.Flags().String(flags.ServerFlag, client.DefaultSocket, "Specify the server unix socket.") + if err := viper.BindPFlag(flags.ServerFlag, versionCmd.Flags().Lookup(flags.ServerFlag)); err != nil { + panic(err) + } +} diff --git a/cmd/traceectl/pkg/cmd/cobra/metrics.go b/cmd/traceectl/pkg/cmd/cobra/metrics.go new file mode 100644 index 000000000000..ae569f72ffc9 --- /dev/null +++ b/cmd/traceectl/pkg/cmd/cobra/metrics.go @@ -0,0 +1,32 @@ +package cobra + +import ( + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/flags" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/config" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func GetMetrics(cmdCobra *cobra.Command) (cmd.Metrics, error) { + var metrics cmd.Metrics + + server, err := flags.PrepareServer(viper.GetString(flags.ServerFlag)) + if err != nil { + return metrics, err + } + + metrics.Server = server + metrics.Printer = cmdCobra + metrics.Config.Printer = config.PrinterConfig{ + Kind: "table", + OutPath: viper.GetString(flags.OutputFlag), + OutFile: cmdCobra.OutOrStdout(), + } + metrics.Config.Server = config.ServerConfig{ + Protocol: "unix", + Address: server.Addr, + } + + return metrics, nil +} diff --git a/cmd/traceectl/pkg/cmd/cobra/version.go b/cmd/traceectl/pkg/cmd/cobra/version.go new file mode 100644 index 000000000000..f63fede5460f --- /dev/null +++ b/cmd/traceectl/pkg/cmd/cobra/version.go @@ -0,0 +1,31 @@ +package cobra + +import ( + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/flags" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/config" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func GetVersion(cmdCobra *cobra.Command) (cmd.Version, error) { + var version cmd.Version + + server, err := flags.PrepareServer(viper.GetString(flags.ServerFlag)) + if err != nil { + return version, err + } + + version.Server = server + version.Printer = cmdCobra + version.Config.Printer = config.PrinterConfig{ + Kind: "table", + OutPath: viper.GetString(flags.OutputFlag), + OutFile: cmdCobra.OutOrStdout(), + } + version.Config.Server = config.ServerConfig{ + Protocol: "unix", + Address: server.Addr, + } + return version, nil +} diff --git a/cmd/traceectl/pkg/cmd/metrics.go b/cmd/traceectl/pkg/cmd/metrics.go new file mode 100644 index 000000000000..3114f079f83e --- /dev/null +++ b/cmd/traceectl/pkg/cmd/metrics.go @@ -0,0 +1,35 @@ +package cmd + +import ( + "context" + "fmt" + + pb "github.com/aquasecurity/tracee/api/v1beta1" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/client" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/config" + "github.com/spf13/cobra" +) + +type Metrics struct { + Config config.Config + Server *client.Server + Printer *cobra.Command +} + +func (m Metrics) Run() error { + if err := m.Server.Connect(); err != nil { + return fmt.Errorf("error running version: %s", err) + } + defer m.Server.Close() + + response, err := m.Server.GetMetrics(context.Background(), &pb.GetMetricsRequest{}) + if err != nil { + return fmt.Errorf("error getting metrics: %s", err) + } + if metricsJson, err := response.MarshalJSON(); err != nil { + panic(err) + } else { + m.Printer.Printf("\n%s\n", metricsJson) + return nil + } +} diff --git a/cmd/traceectl/pkg/cmd/version.go b/cmd/traceectl/pkg/cmd/version.go new file mode 100644 index 000000000000..09c317493e02 --- /dev/null +++ b/cmd/traceectl/pkg/cmd/version.go @@ -0,0 +1,32 @@ +package cmd + +import ( + "context" + "fmt" + + pb "github.com/aquasecurity/tracee/api/v1beta1" + "github.com/spf13/cobra" + + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/client" + "github.com/aquasecurity/tracee/cmd/traceectl/pkg/config" +) + +type Version struct { + Config config.Config + Server *client.Server + Printer *cobra.Command +} + +func (v Version) Run() error { + if err := v.Server.Connect(); err != nil { + return fmt.Errorf("error running version: %s", err) + } + defer v.Server.Close() + + response, err := v.Server.GetVersion(context.Background(), &pb.GetVersionRequest{}) + if err != nil { + return fmt.Errorf("error getting version: %s", err) + } + v.Printer.Printf("Version: %s\n", response.Version) + return nil +}