feat: add logif for checl alive func
ci-agent / build (push) Has been cancelled

This commit is contained in:
d3m0k1d
2026-04-05 08:24:57 +03:00
parent 247505a310
commit f26fa3da69
2 changed files with 52 additions and 5 deletions
+4 -3
View File
@@ -8,9 +8,10 @@ import (
)
type ServiceConfig struct {
Name string `yaml:"name"`
Type string `yaml:"type"`
Path *string `yaml:"path"`
Name string `yaml:"name"`
Type string `yaml:"type"`
Path *string `yaml:"path"`
SystemdUnit *string `yaml:"systemd_unit"` // Optional: systemd unit name for health check
}
type AgentConfig struct {
+48 -2
View File
@@ -5,6 +5,7 @@ import (
"fmt"
"log"
"os"
"os/exec"
"strings"
"time"
@@ -329,7 +330,6 @@ func reconnectStream(
}
// reportServices periodically sends service status updates to the backend via gRPC.
// For now, all configured services are reported as "up" every 5 seconds.
func reportServices(
ctx context.Context,
grpcAddr string,
@@ -352,9 +352,10 @@ func reportServices(
for {
svcUpdates := make([]*proto.ServicesUpdate_ServiceUpdate, 0, len(services))
for _, svc := range services {
status := checkServiceStatus(svc, lgr)
svcUpdates = append(svcUpdates, &proto.ServicesUpdate_ServiceUpdate{
Name: svc.Name,
Status: "up",
Status: status,
})
}
@@ -377,6 +378,51 @@ func reportServices(
}
}
// checkServiceStatus checks if a service is alive based on its type.
func checkServiceStatus(svc config.ServiceConfig, lgr *logger.Logger) string {
// If systemd_unit is specified, check systemd first
if svc.SystemdUnit != nil && *svc.SystemdUnit != "" {
status := checkSystemdService(*svc.SystemdUnit)
if status != "up" {
lgr.Debug("Systemd service check", "unit", *svc.SystemdUnit, "status", status)
return status
}
}
// For docker type, check container is running
if svc.Type == "docker" {
status := checkDockerContainer(svc.Name)
if status != "up" {
lgr.Debug("Docker container check", "container", svc.Name, "status", status)
return status
}
}
return "up"
}
// checkSystemdService checks if a systemd service is active.
func checkSystemdService(unit string) string {
cmd := exec.Command("systemctl", "is-active", "--quiet", unit)
if err := cmd.Run(); err != nil {
return "down"
}
return "up"
}
// checkDockerContainer checks if a Docker container is running.
func checkDockerContainer(name string) string {
cmd := exec.Command("docker", "inspect", "-f", "{{.State.Running}}", name)
out, err := cmd.Output()
if err != nil {
return "down"
}
if strings.TrimSpace(string(out)) == "true" {
return "up"
}
return "down"
}
// reportSystemMetrics periodically collects and sends system metrics to the backend via gRPC.
func reportSystemMetrics(
ctx context.Context,