package kubes import ( "context" "os" "path/filepath" "github.com/samber/lo" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/models" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/monitor" ) var _ monitor.ServiceMonitor = new(KubesMonitor) type KubesMonitor struct{ namespace string } func New(namespace string) *KubesMonitor { return &KubesMonitor{namespace} } func (self *KubesMonitor) CheckServices(ctx context.Context) ([]models.Service, error) { home, err := os.UserHomeDir() if err != nil { return nil, err } config, err := clientcmd.BuildConfigFromFlags("", filepath.Join(home, ".kube", "config")) if err != nil { return nil, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return nil, err } // TODO: consider moving all the shit above into constructor pods, err := clientset.CoreV1().Pods(self.namespace).List(context.TODO(), metav1.ListOptions{}) if err != nil { return nil, err } 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 } }), nil }