Have better logging in Docker pull of pcap command

This commit is contained in:
M. Mert Yildiran 2022-12-27 10:25:42 +03:00
parent f6bde5fe76
commit d9e53b20c1
No known key found for this signature in database
GPG Key ID: DA5D6DCBB758A461
5 changed files with 64 additions and 46 deletions

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)

View File

@ -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()
}

17
utils/json.go Normal file
View File

@ -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
}