aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/api/docker.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/docker.go')
-rw-r--r--api/docker.go58
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
+}