Skip to content

Commit

Permalink
change event command to support new format of tracectl
Browse files Browse the repository at this point in the history
  • Loading branch information
ShohamBit committed Jan 26, 2025
1 parent 72bd5c1 commit 534bd03
Show file tree
Hide file tree
Showing 5 changed files with 499 additions and 201 deletions.
271 changes: 130 additions & 141 deletions cmd/traceectl/cmd/event.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package cmd

import (
"context"
"fmt"
"strconv"
"strings"
"os"

"github.com/spf13/cobra"
"github.com/spf13/viper"

pb "github.com/aquasecurity/tracee/api/v1beta1"
"github.com/aquasecurity/tracee/cmd/traceectl/pkg/client"
"github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/formatter"
cmdCobra "github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/cobra"
"github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/flags"

"github.com/aquasecurity/tracee/cmd/traceectl/pkg/cmd/printer"
)

var eventCmd = &cobra.Command{
Expand All @@ -31,21 +31,29 @@ var eventCmd = &cobra.Command{
`,
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.PrintErrln("Error: no event names provided. Please specify at least one event to enable.")
return
}
cmd.Help()
},
}

func init() {
eventCmd.AddCommand(listEventCmd)
eventCmd.AddCommand(describeEventCmd)
eventCmd.AddCommand(enableEventCmd)
eventCmd.AddCommand(disableEventCmd)
// eventCmd.AddCommand(describeEventCmd)
// eventCmd.AddCommand(enableEventCmd)
// eventCmd.AddCommand(disableEventCmd)

listEventCmd.Flags().StringVarP(&formatFlag, "format", "f", formatter.FormatTable, "Output format (json|table)")
describeEventCmd.Flags().StringVarP(&formatFlag, "format", "f", formatter.FormatTable, "Output format (json|table)")
eventCmd.Flags().String(flags.ServerFlag, client.DefaultSocket, "Specify the server unix socket (default: /var/run/tracee.sock).")
if err := viper.BindPFlag(flags.ServerFlag, eventCmd.Flags().Lookup(flags.ServerFlag)); err != nil {
panic(err)
}

eventCmd.Flags().String(flags.FormatFlag, printer.TableFormat, "Specify the format (json or table) (default: table).")
if err := viper.BindPFlag(flags.FormatFlag, eventCmd.Flags().Lookup(flags.FormatFlag)); err != nil {
panic(err)
}
eventCmd.Flags().String(flags.OutputFlag, "stdout", "Specify the output destination (default: stdout).")
if err := viper.BindPFlag(flags.OutputFlag, eventCmd.Flags().Lookup(flags.OutputFlag)); err != nil {
panic(err)
}
}

var listEventCmd = &cobra.Command{
Expand All @@ -54,136 +62,117 @@ var listEventCmd = &cobra.Command{
Long: `Lists all available event definitions (built-in and plugin-defined), providing a brief summary of each.`,
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
listEvents(cmd, args)
},
}
var describeEventCmd = &cobra.Command{
Use: "describe <event_name>",
Short: "Describe an event",
Long: `Retrieves the detailed definition of a specific event, including its fields, types, and other metadata.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
eventDescriptions(cmd, args)
},
}
var enableEventCmd = &cobra.Command{
Use: "enable <event_name>",
Short: "Enable an event",
Long: `Enables capturing of a specific event type.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
enableEvents(cmd, args[0])
},
}
var disableEventCmd = &cobra.Command{
Use: "disable <event_name>",
Short: "Disable an event",
Long: `Disables capturing of a specific event type.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
disableEvents(cmd, args[0])
runner, err := cmdCobra.GetEvent(cmd, "list")
if err != nil {
cmd.PrintErrf("error creating runner: %s\n", err)
os.Exit(1)
}

if err := runner.Run(); err != nil {
cmd.PrintErrf("error running: %s\n", err)
os.Exit(1)
}
},
}

func listEvents(cmd *cobra.Command, args []string) {
traceeClient, err := client.NewServiceClient(server)
if err != nil {
cmd.PrintErrln("Error creating client: ", err)
return
}
defer traceeClient.CloseConnection()
// var describeEventCmd = &cobra.Command{
// Use: "describe <event_name>",
// Short: "Describe an event",
// Long: `Retrieves the detailed definition of a specific event, including its fields, types, and other metadata.`,
// Args: cobra.ExactArgs(1),
// Run: func(cmd *cobra.Command, args []string) {
// eventDescriptions(cmd, args)
// },
// }
// var enableEventCmd = &cobra.Command{
// Use: "enable <event_name>",
// Short: "Enable an event",
// Long: `Enables capturing of a specific event type.`,
// Args: cobra.ExactArgs(1),
// Run: func(cmd *cobra.Command, args []string) {
// enableEvents(cmd, args[0])
// },
// }
// var disableEventCmd = &cobra.Command{
// Use: "disable <event_name>",
// Short: "Disable an event",
// Long: `Disables capturing of a specific event type.`,
// Args: cobra.ExactArgs(1),
// Run: func(cmd *cobra.Command, args []string) {
// disableEvents(cmd, args[0])
// },
// }

response, err := traceeClient.GetEventDefinitions(context.Background(), &pb.GetEventDefinitionsRequest{EventNames: args})
if err != nil {
cmd.PrintErrln("Error getting event definitions: ", err)
return
}
format, err := formatter.NewFormatter(formatFlag, cmd)
if err != nil {
cmd.PrintErrln("Error creating formatter: ", err)
return
}
switch format.GetFormat() {
case formatter.FormatJson:
format.PrintJson(response)
case formatter.FormatTable:
format.PrintTableHeaders([]string{"ID", "Name", "Version", "Tags"})
for _, event := range response.Definitions {
// remove descriptions
format.PrintTableRow(prepareDescription(event)[:4])
}
default:
cmd.PrintErrln("output format not supported")
return
}
}
// func listEvents(cmd *cobra.Command, args []string) {
// traceeClient, err := client.NewServiceClient(server)
// if err != nil {
// cmd.PrintErrln("Error creating client: ", err)
// return
// }
// defer traceeClient.CloseConnection()

func eventDescriptions(cmd *cobra.Command, args []string) {
traceeClient, err := client.NewServiceClient(server)
if err != nil {
cmd.PrintErrln("Error creating client: ", err)
return
}
defer traceeClient.CloseConnection()
// response, err := traceeClient.GetEventDefinitions(context.Background(), &pb.GetEventDefinitionsRequest{EventNames: args})
// if err != nil {
// cmd.PrintErrln("Error getting event definitions: ", err)
// return
// }
// format, err := formatter.NewFormatter(formatFlag, cmd)
// if err != nil {
// cmd.PrintErrln("Error creating formatter: ", err)
// return
// }
// switch format.GetFormat() {
// case formatter.FormatJson:
// format.PrintJson(response)
// case formatter.FormatTable:
// format.PrintTableHeaders([]string{"ID", "Name", "Version", "Tags"})
// for _, event := range response.Definitions {
// // remove descriptions
// format.PrintTableRow(prepareDescription(event)[:4])
// }
// default:
// cmd.PrintErrln("output format not supported")
// return
// }
// }

response, err := traceeClient.GetEventDefinitions(context.Background(), &pb.GetEventDefinitionsRequest{EventNames: args})
if err != nil {
cmd.PrintErrln("Error getting event definitions: ", err)
return
}
format, err := formatter.NewFormatter(formatFlag, cmd)
if err != nil {
cmd.PrintErrln("Error creating formatter: ", err)
return
}
switch format.GetFormat() {
case formatter.FormatJson:
format.PrintJson(response)
case formatter.FormatTable:
format.PrintTableHeaders([]string{"ID", "Name", "Version", "Tags", "Description"})
for _, event := range response.Definitions {
format.PrintTableRow(prepareDescription(event))
}
default:
cmd.PrintErrln("output format not supported")
return
}
}
func prepareDescription(event *pb.EventDefinition) []string {
return []string{
strconv.Itoa(int(event.Id)),
event.Name,
fmt.Sprintf("%d.%d.%d", event.Version.Major, event.Version.Minor, event.Version.Patch),
strings.Join(event.Tags, ", "),
event.Description,
}
}
func enableEvents(cmd *cobra.Command, eventName string) {
traceeClient, err := client.NewServiceClient(server)
if err != nil {
cmd.PrintErrln("Error creating client: ", err)
return
}
defer traceeClient.CloseConnection()
// func eventDescriptions(cmd *cobra.Command, args []string) {
// traceeClient, err := client.NewServiceClient(server)
// if err != nil {
// cmd.PrintErrln("Error creating client: ", err)
// return
// }
// defer traceeClient.CloseConnection()

_, err = traceeClient.EnableEvent(context.Background(), &pb.EnableEventRequest{Name: eventName})
if err != nil {
cmd.PrintErrln("Error enabling event:", err)
return
}
cmd.Printf("Enabled event: %s\n", eventName)
}
func disableEvents(cmd *cobra.Command, eventName string) {
traceeClient, err := client.NewServiceClient(server)
if err != nil {
cmd.PrintErrln("Error creating client: ", err)
return
}
defer traceeClient.CloseConnection()
_, err = traceeClient.DisableEvent(context.Background(), &pb.DisableEventRequest{Name: eventName})
if err != nil {
cmd.PrintErrln("Error disabling event:", err)
return
}
cmd.Printf("Disabled event: %s\n", eventName)
}
// response, err := traceeClient.GetEventDefinitions(context.Background(), &pb.GetEventDefinitionsRequest{EventNames: args})
// if err != nil {
// cmd.PrintErrln("Error getting event definitions: ", err)
// return
// }
// format, err := formatter.NewFormatter(formatFlag, cmd)
// if err != nil {
// cmd.PrintErrln("Error creating formatter: ", err)
// return
// }
// switch format.GetFormat() {
// case formatter.FormatJson:
// format.PrintJson(response)
// case formatter.FormatTable:
// format.PrintTableHeaders([]string{"ID", "Name", "Version", "Tags", "Description"})
// for _, event := range response.Definitions {
// format.PrintTableRow(prepareDescription(event))
// }
// default:
// cmd.PrintErrln("output format not supported")
// return
// }
// }
// func prepareDescription(event *pb.EventDefinition) []string {
// return []string{
// strconv.Itoa(int(event.Id)),
// event.Name,
// fmt.Sprintf("%d.%d.%d", event.Version.Major, event.Version.Minor, event.Version.Patch),
// strings.Join(event.Tags, ", "),
// event.Description,
// }
// }
Loading

0 comments on commit 534bd03

Please sign in to comment.