in pkg/controller/cmd/server.go [310:385]
func (s *Server) GetEvent(ctx *gin.Context) {
start := ctx.Query("start")
end := ctx.Query("end")
limit := ctx.Query("limit")
nodes := ctx.Query("nodes")
namespaces := ctx.Query("namespaces")
pods := ctx.Query("pods")
types := ctx.Query("types")
var startTime, endTime time.Time
var limitCnt int
var err error
if start != "" {
s, err := strconv.Atoi(start)
if err != nil {
ctx.AsciiJSON(http.StatusBadRequest, map[string]string{"error": fmt.Sprintf("start time format error: %v", err)})
return
}
startTime = time.Unix(int64(s), 0)
} else {
startTime = time.Now().Add(-10 * time.Minute)
}
if end != "" {
e, err := strconv.Atoi(end)
if err != nil {
ctx.AsciiJSON(http.StatusBadRequest, map[string]string{"error": fmt.Sprintf("end time format error: %v", err)})
return
}
endTime = time.Unix(int64(e), 0)
} else {
endTime = time.Now()
}
if limit != "" {
l, err := strconv.Atoi(limit)
if err != nil {
ctx.AsciiJSON(http.StatusBadRequest, map[string]string{"error": fmt.Sprintf("limit time format error: %v", err)})
return
}
limitCnt = l
} else {
limitCnt = 100
}
filters := map[string][]string{}
if nodes != "" {
filters["instance"] = strings.Split(nodes, ",")
}
if namespaces != "" {
filters["namespace"] = strings.Split(namespaces, ",")
}
if pods != "" {
filters["pod"] = strings.Split(pods, ",")
}
if types != "" {
filters["type"] = strings.Split(types, ",")
}
evts, err := s.controller.QueryRangeEvent(ctx, startTime, endTime, filters, limitCnt)
if err != nil {
ctx.AsciiJSON(http.StatusInternalServerError, map[string]string{"error": fmt.Sprintf("error query event: %v", err)})
return
}
// sort events by timestamp in descending order
sort.Slice(evts, func(i, j int) bool {
return evts[i].Timestamp > evts[j].Timestamp
})
ctx.AsciiJSON(http.StatusOK, evts)
}