func getPartitionApplicationsByState()

in pkg/webservice/handlers.go [836:882]


func getPartitionApplicationsByState(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")
	appState := strings.ToLower(vars.ByName("state"))

	partitionContext := schedulerContext.Load().GetPartitionWithoutClusterID(partition)
	if partitionContext == nil {
		buildJSONErrorResponse(w, PartitionDoesNotExists, http.StatusNotFound)
		return
	}
	var appList []*objects.Application
	switch appState {
	case AppStateActive:
		if status := strings.ToLower(r.URL.Query().Get("status")); status != "" {
			if !allowedAppActiveStatuses[status] {
				buildJSONErrorResponse(w, allowedActiveStatusMsg, http.StatusBadRequest)
				return
			}
			for _, app := range partitionContext.GetApplications() {
				if strings.ToLower(app.CurrentState()) == status {
					appList = append(appList, app)
				}
			}
		} else {
			appList = partitionContext.GetApplications()
		}
	case AppStateRejected:
		appList = partitionContext.GetRejectedApplications()
	case AppStateCompleted:
		appList = partitionContext.GetCompletedApplications()
	default:
		buildJSONErrorResponse(w, fmt.Sprintf("Only following application states are allowed: %s, %s, %s", AppStateActive, AppStateRejected, AppStateCompleted), http.StatusBadRequest)
		return
	}
	appsDao := make([]*dao.ApplicationDAOInfo, 0, len(appList))
	for _, app := range appList {
		appsDao = append(appsDao, getApplicationDAO(app))
	}
	if err := json.NewEncoder(w).Encode(appsDao); err != nil {
		buildJSONErrorResponse(w, err.Error(), http.StatusInternalServerError)
	}
}