diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2024-10-05 17:54:56 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2024-10-05 17:54:56 -0400 |
| commit | 424355dfb6c65e688057619a694542abd4623115 (patch) | |
| tree | d390619dcd900286cf18a04a4976b82ca4221992 /api/docker.go | |
| parent | 6c4f55aa3521af4fc5343b8412c2aed3e047008e (diff) | |
Add endpoint for foundry container's logs
Diffstat (limited to 'api/docker.go')
| -rw-r--r-- | api/docker.go | 58 |
1 files changed, 58 insertions, 0 deletions
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 +} |
