Files
HellreigN/agent/internal/monitor/kubes/impl.go
T

51 lines
1.3 KiB
Go

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
}