/
events.go
63 lines (55 loc) · 1.67 KB
/
events.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package v1
import (
"context"
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/mizhexiaoxiao/k8s-api-service/app"
"github.com/mizhexiaoxiao/k8s-api-service/controllers/k8s"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type EventsUri struct {
Cluster string `uri:"cluster" binding:"required"`
}
type EventsQuery struct {
Namespace string `json:"namespace" form:"namespace" binding:"required"`
Name string `json:"name" form:"name" binding:"required"`
Kind string `json:"kind" form:"kind" binding:"required"`
Uid string `json:"uid" form:"uid" binding:"required"`
}
func GetEvents(c *gin.Context) {
appG := app.Gin{C: c}
var (
u EventsUri
q EventsQuery
listOpts metav1.ListOptions
)
if err := appG.C.ShouldBindUri(&u); err != nil {
appG.Fail(http.StatusBadRequest, err, nil)
return
}
if err := appG.C.ShouldBindQuery(&q); err != nil {
appG.Fail(http.StatusBadRequest, err, nil)
return
}
k8sClient, err := k8s.GetClient(u.Cluster)
if err != nil {
appG.Fail(http.StatusInternalServerError, err, nil)
return
}
listOpts.FieldSelector = fmt.Sprintf(
"involvedObject.name=%s,involvedObject.namespace=%s,involvedObject.kind=%s,involvedObject.uid=%s",
q.Name, q.Namespace, q.Kind, q.Uid,
)
listOpts.TypeMeta = metav1.TypeMeta{Kind: q.Kind}
events, err := k8sClient.ClientV1.CoreV1().Events(q.Namespace).List(context.TODO(), listOpts)
for i := 0; i < len(events.Items); i++ {
events.Items[i].CreationTimestamp = metav1.NewTime(events.Items[i].CreationTimestamp.Add(8 * time.Hour))
}
if err != nil {
appG.Fail(http.StatusInternalServerError, err, nil)
return
}
appG.Success(http.StatusOK, "ok", events)
}