mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
v1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"strings"
|
|
)
|
|
|
|
func (k *Kubernetes) EventsList(ctx context.Context, namespace string) (string, error) {
|
|
unstructuredList, err := k.resourcesList(ctx, &schema.GroupVersionKind{
|
|
Group: "", Version: "v1", Kind: "Event",
|
|
}, namespace)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if len(unstructuredList.Items) == 0 {
|
|
return "No events found", nil
|
|
}
|
|
var eventMap []map[string]any
|
|
for _, item := range unstructuredList.Items {
|
|
event := &v1.Event{}
|
|
if err = runtime.DefaultUnstructuredConverter.FromUnstructured(item.Object, event); err != nil {
|
|
return "", err
|
|
}
|
|
timestamp := event.EventTime.Time
|
|
if timestamp.IsZero() && event.Series != nil {
|
|
timestamp = event.Series.LastObservedTime.Time
|
|
} else if timestamp.IsZero() && event.Count > 1 {
|
|
timestamp = event.LastTimestamp.Time
|
|
} else if timestamp.IsZero() {
|
|
timestamp = event.FirstTimestamp.Time
|
|
}
|
|
eventMap = append(eventMap, map[string]any{
|
|
"Namespace": event.Namespace,
|
|
"Timestamp": timestamp.String(),
|
|
"Type": event.Type,
|
|
"Reason": event.Reason,
|
|
"InvolvedObject": map[string]string{
|
|
"apiVersion": event.InvolvedObject.APIVersion,
|
|
"Kind": event.InvolvedObject.Kind,
|
|
"Name": event.InvolvedObject.Name,
|
|
},
|
|
"Message": strings.TrimSpace(event.Message),
|
|
})
|
|
}
|
|
yamlEvents, err := marshal(eventMap)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return fmt.Sprintf("The following events (YAML format) were found:\n%s", yamlEvents), nil
|
|
}
|