feat(agent): unify service statuses across monitor impls

This commit is contained in:
2026-04-05 08:07:32 +03:00
parent 2714bd1178
commit c6c46aee68
3 changed files with 51 additions and 3 deletions
+17 -1
View File
@@ -1,6 +1,22 @@
package models
// ServiceStatus represents the unified status of a service across all monitor types.
type ServiceStatus string
const (
StatusRunning ServiceStatus = "running"
StatusStopped ServiceStatus = "stopped"
StatusDegraded ServiceStatus = "degraded"
StatusPending ServiceStatus = "pending"
StatusUnknown ServiceStatus = "unknown"
)
// IsHealthy reports whether the service is stable enough for dependents to rely on.
func (s ServiceStatus) IsHealthy() bool {
return s == StatusRunning
}
type Service struct {
Name string
Status string
Status ServiceStatus
}
+17 -1
View File
@@ -36,7 +36,23 @@ func (self *DockerMonitor) CheckServices(ctx context.Context) ([]models.Service,
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
Status: mapContainerState(string(item.State)),
}
}), nil
}
// mapContainerState maps Docker container states to unified ServiceStatus.
func mapContainerState(state string) models.ServiceStatus {
switch state {
case "running":
return models.StatusRunning
case "exited", "dead":
return models.StatusStopped
case "paused":
return models.StatusDegraded
case "restarting", "created", "removing":
return models.StatusPending
default:
return models.StatusUnknown
}
}
+17 -1
View File
@@ -44,7 +44,23 @@ func (self *KubesMonitor) CheckServices(ctx context.Context) ([]models.Service,
return lo.Map(pods.Items, func(item corev1.Pod, _ int) models.Service {
return models.Service{
Name: item.Name,
Status: string(item.Status.Phase), // TODO: map to standartized states enum
Status: mapPodPhase(item.Status.Phase),
}
}), nil
}
// mapPodPhase maps K8s pod phases to unified ServiceStatus.
func mapPodPhase(phase corev1.PodPhase) models.ServiceStatus {
switch phase {
case corev1.PodRunning:
return models.StatusRunning
case corev1.PodSucceeded:
return models.StatusStopped
case corev1.PodFailed:
return models.StatusStopped
case corev1.PodPending:
return models.StatusPending
default:
return models.StatusUnknown
}
}