feat(ui): sidebar kontainer + panel detail (ListContainers, navigasi j/k, klik pilih, refresh r)
CI / test (push) Successful in 21s
CI / test (push) Successful in 21s
This commit is contained in:
1 parent
18055979da
commit
fe781591e3
4 files changed
+336
-42
No files matched your search
@@ -5,7 +5,9 @@ package docker
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/docker/client"
|
||||
)
|
||||
|
||||
@@ -60,3 +62,39 @@ func (c *Client) Ping(ctx context.Context) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Container — ringkasan kontainer untuk sidebar/dashboard.
|
||||
type Container struct {
|
||||
ID string
|
||||
Name string
|
||||
Image string
|
||||
State string // running, exited, paused, restarting, created, dead
|
||||
Status string // "Up 2 hours (healthy)"
|
||||
}
|
||||
|
||||
// ListContainers mengembalikan semua kontainer (termasuk yang berhenti).
|
||||
func (c *Client) ListContainers(ctx context.Context) ([]Container, error) {
|
||||
list, err := c.cli.ContainerList(ctx, container.ListOptions{All: true})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("docker: daftar kontainer: %w", err)
|
||||
}
|
||||
out := make([]Container, 0, len(list))
|
||||
for _, ct := range list {
|
||||
name := ""
|
||||
if len(ct.Names) > 0 {
|
||||
name = strings.TrimPrefix(ct.Names[0], "/")
|
||||
}
|
||||
id := ct.ID
|
||||
if len(id) > 12 {
|
||||
id = id[:12]
|
||||
}
|
||||
out = append(out, Container{
|
||||
ID: id,
|
||||
Name: name,
|
||||
Image: ct.Image,
|
||||
State: ct.State,
|
||||
Status: ct.Status,
|
||||
})
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
Reference in new issue
Block a user