func getQueueApplicationsByState()

in pkg/webservice/handlers.go [950:1002]


func getQueueApplicationsByState(w http.ResponseWriter, r *http.Request) {
	writeHeaders(w, r.Method)
	vars := httprouter.ParamsFromContext(r.Context())
	if vars == nil {
		buildJSONErrorResponse(w, MissingParamsName, http.StatusBadRequest)
		return
	}

	partition := vars.ByName("partition")
	queueName := vars.ByName("queue")
	appState := strings.ToLower(vars.ByName("state"))
	status := strings.ToLower(r.URL.Query().Get("status"))

	partitionContext := schedulerContext.Load().GetPartitionWithoutClusterID(partition)
	if partitionContext == nil {
		buildJSONErrorResponse(w, PartitionDoesNotExists, http.StatusNotFound)
		return
	}
	unescapedQueueName, err := url.QueryUnescape(queueName)
	if err != nil {
		buildJSONErrorResponse(w, err.Error(), http.StatusBadRequest)
		return
	}
	queueErr := validateQueue(unescapedQueueName)
	if queueErr != nil {
		buildJSONErrorResponse(w, queueErr.Error(), http.StatusBadRequest)
		return
	}
	queue := partitionContext.GetQueue(unescapedQueueName)
	if queue == nil {
		buildJSONErrorResponse(w, QueueDoesNotExists, http.StatusNotFound)
		return
	}
	if appState != AppStateActive {
		buildJSONErrorResponse(w, fmt.Sprintf("Only following application states are allowed: %s", AppStateActive), http.StatusBadRequest)
		return
	}
	if status != "" && !allowedAppActiveStatuses[status] {
		buildJSONErrorResponse(w, allowedActiveStatusMsg, http.StatusBadRequest)
		return
	}

	appsDao := make([]*dao.ApplicationDAOInfo, 0)
	for _, app := range queue.GetCopyOfApps() {
		if status == "" || strings.ToLower(app.CurrentState()) == status {
			appsDao = append(appsDao, getApplicationDAO(app))
		}
	}

	if err := json.NewEncoder(w).Encode(appsDao); err != nil {
		buildJSONErrorResponse(w, err.Error(), http.StatusInternalServerError)
	}
}