初始化提交
This commit is contained in:
78
mengyamonitor-backend/docker.go
Normal file
78
mengyamonitor-backend/docker.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// readDockerStats 读取 Docker 统计信息(简化版)
|
||||
func readDockerStats() DockerStats {
|
||||
stats := DockerStats{
|
||||
Available: false,
|
||||
RunningNames: []string{},
|
||||
StoppedNames: []string{},
|
||||
ImageNames: []string{},
|
||||
}
|
||||
|
||||
// 检查 docker 是否可用
|
||||
if _, err := exec.LookPath("docker"); err != nil {
|
||||
return stats
|
||||
}
|
||||
|
||||
stats.Available = true
|
||||
|
||||
// 获取 Docker 版本
|
||||
cmd := exec.Command("docker", "--version")
|
||||
if out, err := cmd.Output(); err == nil {
|
||||
stats.Version = strings.TrimSpace(string(out))
|
||||
}
|
||||
|
||||
// 获取运行中的容器名
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
cmd = exec.CommandContext(ctx, "docker", "ps", "--format", "{{.Names}}")
|
||||
if out, err := cmd.Output(); err == nil {
|
||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if line != "" {
|
||||
stats.RunningNames = append(stats.RunningNames, line)
|
||||
stats.Running++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取停止的容器名
|
||||
ctx, cancel = context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
cmd = exec.CommandContext(ctx, "docker", "ps", "-a", "--filter", "status=exited", "--format", "{{.Names}}")
|
||||
if out, err := cmd.Output(); err == nil {
|
||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if line != "" {
|
||||
stats.StoppedNames = append(stats.StoppedNames, line)
|
||||
stats.Stopped++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取镜像名(只获取前20个,避免数据过多)
|
||||
ctx, cancel = context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
cmd = exec.CommandContext(ctx, "docker", "images", "--format", "{{.Repository}}:{{.Tag}}")
|
||||
if out, err := cmd.Output(); err == nil {
|
||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if line != "" && line != "<none>:<none>" {
|
||||
stats.ImageNames = append(stats.ImageNames, line)
|
||||
stats.ImageCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return stats
|
||||
}
|
||||
Reference in New Issue
Block a user