From 424355dfb6c65e688057619a694542abd4623115 Mon Sep 17 00:00:00 2001 From: JP Appel Date: Sat, 5 Oct 2024 17:54:56 -0400 Subject: Add endpoint for foundry container's logs --- api/docker.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 api/docker.go (limited to 'api/docker.go') diff --git a/api/docker.go b/api/docker.go new file mode 100644 index 0000000..21d5c26 --- /dev/null +++ b/api/docker.go @@ -0,0 +1,58 @@ +package api + +import ( + "context" + "fmt" + "io" + "log/slog" + + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" +) + +const vttContainerId string = "foundry-foundry-1" + +func stopVtt(ctx context.Context) error { + apiClient, err := client.NewClientWithOpts(client.FromEnv) + if err != nil { + Logger.ErrorContext(ctx, "Failed to get docker api client", slog.Any("err", err)) + return err + } + + Logger.InfoContext(ctx, "Stopping foundry container") + err = apiClient.ContainerStop(ctx, vttContainerId, container.StopOptions{}) + if err != nil { + Logger.ErrorContext(ctx, "Error occured while stopping foundry container", slog.Any("err", err)) + return err + } + + return nil +} + +// Get readcloser for logs +// If lines is zero, returns all logs. +func vttLogs(ctx context.Context, lines uint) (io.ReadCloser, error) { + apiClient, err := client.NewClientWithOpts(client.FromEnv) + if err != nil { + Logger.ErrorContext(ctx, "Failed to get docker api client", slog.Any("err", err)) + return nil, err + } + + opts := container.LogsOptions{ + ShowStdout: true, + ShowStderr: true, + Timestamps: true, + } + if lines != 0 { + opts.Tail = fmt.Sprint(lines) + } + + Logger.DebugContext(ctx, "Getting container logs") + r, err := apiClient.ContainerLogs(ctx, vttContainerId, opts) + if err != nil { + Logger.ErrorContext(ctx, "Failed to get foundry container's logs", slog.Any("err", err)) + return nil, err + } + + return r, nil +} -- cgit v1.2.3