func()

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)
}