summaryrefslogtreecommitdiffstats
path: root/pkg/container/docker_logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/container/docker_logger.go')
-rw-r--r--pkg/container/docker_logger.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/pkg/container/docker_logger.go b/pkg/container/docker_logger.go
new file mode 100644
index 0000000..b9eb503
--- /dev/null
+++ b/pkg/container/docker_logger.go
@@ -0,0 +1,83 @@
+//go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd))
+
+package container
+
+import (
+ "bufio"
+ "encoding/json"
+ "errors"
+ "io"
+
+ "github.com/sirupsen/logrus"
+)
+
+type dockerMessage struct {
+ ID string `json:"id"`
+ Stream string `json:"stream"`
+ Error string `json:"error"`
+ ErrorDetail struct {
+ Message string
+ }
+ Status string `json:"status"`
+ Progress string `json:"progress"`
+}
+
+const logPrefix = " \U0001F433 "
+
+func logDockerResponse(logger logrus.FieldLogger, dockerResponse io.ReadCloser, isError bool) error {
+ if dockerResponse == nil {
+ return nil
+ }
+ defer dockerResponse.Close()
+
+ scanner := bufio.NewScanner(dockerResponse)
+ msg := dockerMessage{}
+
+ for scanner.Scan() {
+ line := scanner.Bytes()
+
+ msg.ID = ""
+ msg.Stream = ""
+ msg.Error = ""
+ msg.ErrorDetail.Message = ""
+ msg.Status = ""
+ msg.Progress = ""
+
+ if err := json.Unmarshal(line, &msg); err != nil {
+ writeLog(logger, false, "Unable to unmarshal line [%s] ==> %v", string(line), err)
+ continue
+ }
+
+ if msg.Error != "" {
+ writeLog(logger, isError, "%s", msg.Error)
+ return errors.New(msg.Error)
+ }
+
+ if msg.ErrorDetail.Message != "" {
+ writeLog(logger, isError, "%s", msg.ErrorDetail.Message)
+ return errors.New(msg.Error)
+ }
+
+ if msg.Status != "" {
+ if msg.Progress != "" {
+ writeLog(logger, isError, "%s :: %s :: %s\n", msg.Status, msg.ID, msg.Progress)
+ } else {
+ writeLog(logger, isError, "%s :: %s\n", msg.Status, msg.ID)
+ }
+ } else if msg.Stream != "" {
+ writeLog(logger, isError, "%s", msg.Stream)
+ } else {
+ writeLog(logger, false, "Unable to handle line: %s", string(line))
+ }
+ }
+
+ return nil
+}
+
+func writeLog(logger logrus.FieldLogger, isError bool, format string, args ...interface{}) {
+ if isError {
+ logger.Errorf(format, args...)
+ } else {
+ logger.Debugf(format, args...)
+ }
+}