diff --git a/cmd/goUtils/funcWrappers.go b/cmd/goUtils/funcWrappers.go deleted file mode 100644 index 2ca0107e7..000000000 --- a/cmd/goUtils/funcWrappers.go +++ /dev/null @@ -1,27 +0,0 @@ -package goUtils - -import ( - "reflect" - - "github.com/rs/zerolog/log" -) - -func HandleExcWrapper(fn interface{}, params ...interface{}) (result []reflect.Value) { - defer func() { - if panicMessage := recover(); panicMessage != nil { - log.Fatal(). - Stack(). - Interface("msg", panicMessage). - Msg("Unhandled panic!") - } - }() - f := reflect.ValueOf(fn) - if f.Type().NumIn() != len(params) { - panic("Incorrect number of parameters!") - } - inputs := make([]reflect.Value, len(params)) - for k, in := range params { - inputs[k] = reflect.ValueOf(in) - } - return f.Call(inputs) -} diff --git a/cmd/pcapRunner.go b/cmd/pcapRunner.go index 9de17cf17..e39f5a112 100644 --- a/cmd/pcapRunner.go +++ b/cmd/pcapRunner.go @@ -1,10 +1,11 @@ package cmd import ( + "bufio" "context" + "encoding/json" "fmt" "io" - "os" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" @@ -19,36 +20,65 @@ import ( v1 "k8s.io/api/core/v1" ) +func logPullingImage(image string, reader io.ReadCloser) { + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + text := scanner.Text() + var data map[string]interface{} + if err := json.Unmarshal([]byte(text), &data); err != nil { + log.Error().Err(err).Send() + continue + } + + var id string + if val, ok := data["id"]; ok { + id = val.(string) + } + + var status string + if val, ok := data["status"]; ok { + status = val.(string) + } + + var progress string + if val, ok := data["progress"]; ok { + progress = val.(string) + } + + e := log.Info() + if image != "" { + e = e.Str("image", image) + } + + if progress != "" { + e = e.Str("progress", progress) + } + + e.Msg(fmt.Sprintf("[%-12s] %-18s", id, status)) + } +} + func pullImages(ctx context.Context, cli *client.Client, imageFront string, imageHub string, imageWorker string) error { readerFront, err := cli.ImagePull(ctx, imageFront, types.ImagePullOptions{}) if err != nil { return err } defer readerFront.Close() - _, err = io.Copy(os.Stdout, readerFront) - if err != nil { - return err - } + logPullingImage(imageFront, readerFront) readerHub, err := cli.ImagePull(ctx, imageHub, types.ImagePullOptions{}) if err != nil { return err } defer readerHub.Close() - _, err = io.Copy(os.Stdout, readerHub) - if err != nil { - return err - } + logPullingImage(imageHub, readerHub) readerWorker, err := cli.ImagePull(ctx, imageWorker, types.ImagePullOptions{}) if err != nil { return err } defer readerWorker.Close() - _, err = io.Copy(os.Stdout, readerWorker) - if err != nil { - return err - } + logPullingImage(imageWorker, readerWorker) return nil } diff --git a/cmd/tapRunner.go b/cmd/tapRunner.go index c57b08319..07864a75b 100644 --- a/cmd/tapRunner.go +++ b/cmd/tapRunner.go @@ -17,7 +17,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/kubeshark/base/pkg/models" - "github.com/kubeshark/kubeshark/cmd/goUtils" "github.com/kubeshark/kubeshark/config" "github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/errormessage" @@ -95,9 +94,9 @@ func tap() { defer finishTapExecution(kubernetesProvider) - go goUtils.HandleExcWrapper(watchHubEvents, ctx, kubernetesProvider, cancel) - go goUtils.HandleExcWrapper(watchHubPod, ctx, kubernetesProvider, cancel) - go goUtils.HandleExcWrapper(watchFrontPod, ctx, kubernetesProvider, cancel) + go watchHubEvents(ctx, kubernetesProvider, cancel) + go watchHubPod(ctx, kubernetesProvider, cancel) + go watchFrontPod(ctx, kubernetesProvider, cancel) // block until exit signal or error utils.WaitForTermination(ctx, cancel) diff --git a/kubeshark.go b/kubeshark.go index fd051bd8c..d5949ae64 100644 --- a/kubeshark.go +++ b/kubeshark.go @@ -5,7 +5,6 @@ import ( "time" "github.com/kubeshark/kubeshark/cmd" - "github.com/kubeshark/kubeshark/cmd/goUtils" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) @@ -13,5 +12,5 @@ import ( func main() { zerolog.SetGlobalLevel(zerolog.InfoLevel) log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).With().Caller().Logger() - goUtils.HandleExcWrapper(cmd.Execute) + cmd.Execute() } diff --git a/utils/json.go b/utils/json.go new file mode 100644 index 000000000..b3956f3b9 --- /dev/null +++ b/utils/json.go @@ -0,0 +1,17 @@ +package utils + +import ( + "strconv" + "strings" + + "github.com/rs/zerolog/log" +) + +func UnescapeUnicodeCharacters(raw string) string { + str, err := strconv.Unquote(strings.Replace(strconv.Quote(raw), `\\u`, `\u`, -1)) + if err != nil { + log.Error().Err(err).Send() + return raw + } + return str +}