63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"flag"
|
||
"fmt"
|
||
"github.com/docker/docker/api/types"
|
||
"github.com/docker/docker/api/types/container"
|
||
"github.com/docker/docker/client"
|
||
"github.com/samber/lo"
|
||
"log"
|
||
"net/http"
|
||
"strings"
|
||
)
|
||
|
||
var args string
|
||
var tag string
|
||
|
||
func sendFeedback(msg string) error {
|
||
url := fmt.Sprintf("https://api.day.app/tFaz24oYAmdzLbJhpnoZCG/%s?group=juno-monitor", msg)
|
||
_, err := http.Get(url)
|
||
return err
|
||
}
|
||
|
||
func main() {
|
||
flag.StringVar(&args, "args", "", "args a,b,c")
|
||
flag.StringVar(&tag, "tag", "", "tag n1")
|
||
flag.Parse()
|
||
|
||
ctx := context.Background()
|
||
cli, err := client.NewClientWithOpts(client.FromEnv, func(c *client.Client) error {
|
||
c.ClientVersion()
|
||
return nil
|
||
})
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
log.Println("init docker client success", cli.ClientVersion(), cli.DaemonHost())
|
||
|
||
containerList, err := cli.ContainerList(ctx, container.ListOptions{})
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
log.Println("get container list success, size: ", len(containerList))
|
||
|
||
monitorNames := strings.Split(args, ",")
|
||
log.Println("monitorNames", monitorNames)
|
||
|
||
containerNames := lo.Map(containerList, func(c types.Container, _ int) string {
|
||
return strings.ReplaceAll(c.Names[0], "/", "")
|
||
})
|
||
|
||
log.Println("container find names", containerNames)
|
||
for _, targetName := range monitorNames {
|
||
if lo.IndexOf(containerNames, targetName) == -1 {
|
||
err := sendFeedback(fmt.Sprintf("⚠️警告,容器[%s]已挂掉,tag: %s", targetName, tag))
|
||
if err != nil {
|
||
log.Println("send feedback failed", err)
|
||
}
|
||
}
|
||
}
|
||
}
|