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 package cmd
import ( import (
"bufio"
"context" "context"
"encoding/json"
"fmt" "fmt"
"io" "io"
"os"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
@ -19,36 +20,65 @@ import (
v1 "k8s.io/api/core/v1" 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 { func pullImages(ctx context.Context, cli *client.Client, imageFront string, imageHub string, imageWorker string) error {
readerFront, err := cli.ImagePull(ctx, imageFront, types.ImagePullOptions{}) readerFront, err := cli.ImagePull(ctx, imageFront, types.ImagePullOptions{})
if err != nil { if err != nil {
return err return err
} }
defer readerFront.Close() defer readerFront.Close()
_, err = io.Copy(os.Stdout, readerFront) logPullingImage(imageFront, readerFront)
if err != nil {
return err
}
readerHub, err := cli.ImagePull(ctx, imageHub, types.ImagePullOptions{}) readerHub, err := cli.ImagePull(ctx, imageHub, types.ImagePullOptions{})
if err != nil { if err != nil {
return err return err
} }
defer readerHub.Close() defer readerHub.Close()
_, err = io.Copy(os.Stdout, readerHub) logPullingImage(imageHub, readerHub)
if err != nil {
return err
}
readerWorker, err := cli.ImagePull(ctx, imageWorker, types.ImagePullOptions{}) readerWorker, err := cli.ImagePull(ctx, imageWorker, types.ImagePullOptions{})
if err != nil { if err != nil {
return err return err
} }
defer readerWorker.Close() defer readerWorker.Close()
_, err = io.Copy(os.Stdout, readerWorker) logPullingImage(imageWorker, readerWorker)
if err != nil {
return err
}
return nil return nil
} }

View File

@ -17,7 +17,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/kubeshark/base/pkg/models" "github.com/kubeshark/base/pkg/models"
"github.com/kubeshark/kubeshark/cmd/goUtils"
"github.com/kubeshark/kubeshark/config" "github.com/kubeshark/kubeshark/config"
"github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/config/configStructs"
"github.com/kubeshark/kubeshark/errormessage" "github.com/kubeshark/kubeshark/errormessage"
@ -95,9 +94,9 @@ func tap() {
defer finishTapExecution(kubernetesProvider) defer finishTapExecution(kubernetesProvider)
go goUtils.HandleExcWrapper(watchHubEvents, ctx, kubernetesProvider, cancel) go watchHubEvents(ctx, kubernetesProvider, cancel)
go goUtils.HandleExcWrapper(watchHubPod, ctx, kubernetesProvider, cancel) go watchHubPod(ctx, kubernetesProvider, cancel)
go goUtils.HandleExcWrapper(watchFrontPod, ctx, kubernetesProvider, cancel) go watchFrontPod(ctx, kubernetesProvider, cancel)
// block until exit signal or error // block until exit signal or error
utils.WaitForTermination(ctx, cancel) utils.WaitForTermination(ctx, cancel)

View File

@ -5,7 +5,6 @@ import (
"time" "time"
"github.com/kubeshark/kubeshark/cmd" "github.com/kubeshark/kubeshark/cmd"
"github.com/kubeshark/kubeshark/cmd/goUtils"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@ -13,5 +12,5 @@ import (
func main() { func main() {
zerolog.SetGlobalLevel(zerolog.InfoLevel) zerolog.SetGlobalLevel(zerolog.InfoLevel)
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).With().Caller().Logger() 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
}