51 lines
1.3 KiB
Go
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
|
|
}
|