/*List the information about one or more tasks. The information is not in detai */ func ListTaskHandler(w http.ResponseWriter, r *http.Request) { //the return value :response var response util.HttpResponse inputInfo, err := GetInfoFromRequest(&w, r) if err != nil { return } var userRequest PsRequest userRequest.Init() for thisFlag, flagValue := range inputInfo.Data { switch thisFlag { case "a": userRequest.All, _ = strconv.ParseBool(flagValue) case "l": userRequest.Latest, _ = strconv.ParseBool(flagValue) case "n": userRequest.Name = flagValue case "i": userRequest.Image = flagValue case "t": userRequest.Type = flagValue default: response.Set(util.INVALID_INPUT, "invalid flag of wharf ps.") io.WriteString(w, response.String()) return } } //flags conflict if userRequest.All && userRequest.Latest || userRequest.All && userRequest.Name != "" || userRequest.Latest && userRequest.Name != "" { response.Set(util.INVALID_INPUT, "flags are conflicting with each other.") io.WriteString(w, response.String()) return } var psIterm PsOutput //task name is set || latest is set if userRequest.Name != "" || userRequest.Latest { if userRequest.Latest { userRequest.Name = LatestTask } thisTask, exists := Tasks[userRequest.Name] if !exists { response.Set(util.INVALID_INPUT, `No such task with name of "`+userRequest.Name+`"`) io.WriteString(w, response.String()) return } else { fillPSOutpusWithTask(&psIterm, &thisTask) data, _ := json.Marshal(psIterm) response.Set(util.OK, string(data)) io.WriteString(w, response.String()) return } } //traverse all the task in Tasks for _, thisTask := range Tasks { response.Status = util.OK if (userRequest.All == true || thisTask.Status == RUNNING) && (userRequest.Image == "" || thisTask.Cmd.ImageName == userRequest.Image) && (userRequest.Type == "" || thisTask.Cmd.TypeName == userRequest.Type) { fillPSOutpusWithTask(&psIterm, &thisTask) data, _ := json.Marshal(psIterm) response.Append(string(data)) } io.WriteString(w, response.String()) } return }