ecs/servers/admin/logic/manager.go
2025-07-16 10:05:22 +08:00

69 lines
1.6 KiB
Go

package logic
import (
"context"
"ecs/proto"
"fmt"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
"github.com/oylshe1314/framework/util"
"strings"
)
type AdminManager struct {
client *client.Client
context context.Context
cancel context.CancelFunc
}
func (this *AdminManager) Init() error {
var err error
this.client, err = client.NewClientWithOpts(client.WithHost("192.168.84.132:2375"), client.WithVersion("1.51"))
if err != nil {
return err
}
this.context, this.cancel = context.WithCancel(context.Background())
return nil
}
func (this *AdminManager) Close() error {
this.cancel()
_ = this.client.Close()
return nil
}
func (this *AdminManager) ContainerList(name string) ([]*proto.Container, error) {
summaries, err := this.client.ContainerList(this.context, container.ListOptions{
Size: false,
All: false,
Latest: false,
Since: "",
Before: "",
Limit: 0,
Filters: filters.Args{},
})
if err != nil {
return nil, err
}
var containers []*proto.Container
for _, summary := range summaries {
containers = append(containers, &proto.Container{
ID: summary.ID,
Names: strings.Join(summary.Names, ","),
Image: summary.Image,
ImageID: summary.ImageID,
Command: summary.Command,
Created: summary.Created,
Ports: strings.Join(util.SliceConvert(summary.Ports, func(port container.Port) string {
return fmt.Sprint(port.IP, ":", port.PrivatePort, ":", port.PublicPort)
}), ","),
State: summary.State,
Status: summary.Status,
})
}
return containers, nil
}