From 696172ad48f47a2808b0eae03f9972213e2d5d6f Mon Sep 17 00:00:00 2001 From: cellarspoon Date: Thu, 23 Dec 2021 21:45:59 +0100 Subject: [PATCH] WIP: half-baked errors implementation --- cli/app/errors.go | 57 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/cli/app/errors.go b/cli/app/errors.go index 20ae9afd..80ebef40 100644 --- a/cli/app/errors.go +++ b/cli/app/errors.go @@ -1,7 +1,15 @@ package app import ( + "fmt" + "strings" + + "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/autocomplete" + "coopcloud.tech/abra/pkg/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) @@ -19,9 +27,52 @@ by "abra app logs ". Flags: []cli.Flag{}, BashComplete: autocomplete.AppNameComplete, Action: func(c *cli.Context) error { - // TODO: entrypoint error - // TODO: ps --no-trunc errors - // TODO: failing healthcheck + app := internal.ValidateApp(c) + + cl, err := client.New(app.Server) + if err != nil { + logrus.Fatal(err) + } + + filters := filters.NewArgs() + filters.Add("name", app.StackName()) + + containers, err := cl.ContainerList(c.Context, types.ContainerListOptions{Filters: filters}) + if err != nil { + logrus.Fatal(err) + } + + // tableCol := []string{"status", "error", "healthcheck", "healthcheck logs"} + // table := abraFormatter.CreateTable(tableCol) + + for _, container := range containers { + fmt.Println("service: ", strings.Join(container.Names, "")) + + containerState, err := cl.ContainerInspect(c.Context, container.ID) + if err != nil { + logrus.Fatal(err) + } + + fmt.Println("restarted no. times: ", containerState.RestartCount) + fmt.Println("status: ", containerState.State.Status) + fmt.Println("oom killed: ", containerState.State.OOMKilled) + + if containerState.State.Health != nil { + fmt.Println("healthcheck status: ", containerState.State.Health.Status) + fmt.Println("failed no. times: ", containerState.State.Health.FailingStreak) + for _, log := range containerState.State.Health.Log { + fmt.Println("output: ", log.Output) + } + } + + fmt.Println("---") + + // table.Append([]string{containerState.State.Status, containerState.State.Error, healthCheckState, healthCheckLogs}) + + } + + // table.Render() + return nil }, }