feat(agent): add service monitor interface and docker implementation
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package docker
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/models"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/monitor"
|
||||
"github.com/moby/moby/api/types/container"
|
||||
moby "github.com/moby/moby/client"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
var _ monitor.ServiceMonitor = new(DockerMonitor)
|
||||
|
||||
type DockerMonitor struct{}
|
||||
|
||||
func New() *DockerMonitor {
|
||||
return &DockerMonitor{}
|
||||
}
|
||||
|
||||
func (self *DockerMonitor) CheckServices(ctx context.Context) ([]models.Service, error) {
|
||||
client, err := moby.New(moby.FromEnv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ctrs, err := client.ContainerList(ctx, moby.ContainerListOptions{
|
||||
Size: false,
|
||||
All: false,
|
||||
Limit: 0,
|
||||
Filters: moby.Filters{},
|
||||
Latest: false,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return lo.Map(ctrs.Items, func(item container.Summary, _ int) models.Service {
|
||||
return models.Service{
|
||||
Name: lo.If(len(item.Names) > 0, item.Names[0]).Else(item.ID),
|
||||
Status: string(item.State), // TODO: map to standartized states enum
|
||||
}
|
||||
}), nil
|
||||
}
|
||||
Reference in New Issue
Block a user