feat(agent): add k8s service monitor implementation
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user