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