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 }