// polyTriageLogHandler returns the entries in the triagelog paginated // in reverse chronological order. func polyTriageLogHandler(w http.ResponseWriter, r *http.Request) { // Get the pagination params. var logEntries []*expstorage.TriageLogEntry var total int q := r.URL.Query() offset, size, err := util.PaginationParams(q, 0, DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE) if err == nil { details := q.Get("details") == "true" logEntries, total, err = storages.ExpectationsStore.QueryLog(offset, size, details) } if err != nil { util.ReportError(w, r, err, "Unable to retrieve triage log.") return } pagination := &util.ResponsePagination{ Offset: offset, Size: size, Total: total, } sendResponse(w, logEntries, http.StatusOK, pagination) }
// listTrybotsJSONHandler returns a list of issues (Rietveld) that have // trybot results associated with them. func listTrybotsJSONHandler(w http.ResponseWriter, r *http.Request) { var trybotRuns []*search.TrybotIssue var total int offset, size, err := util.PaginationParams(r.URL.Query(), 0, DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE) if err == nil { trybotRuns, total, err = search.ListTrybotIssues(storages, offset, size) } if err != nil { util.ReportError(w, r, err, "Retrieving trybot results failed.") return } pagination := &util.ResponsePagination{ Offset: offset, Size: size, Total: total, } sendResponse(w, trybotRuns, 200, pagination) }
func GetTasksHandler(prototype Task, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") params := QueryParams{} params.Username = r.FormValue("username") params.SuccessfulOnly = parseBoolFormValue(r.FormValue("successful")) params.PendingOnly = parseBoolFormValue(r.FormValue("not_completed")) params.FutureRunsOnly = parseBoolFormValue(r.FormValue("include_future_runs")) params.ExcludeDummyPageSets = parseBoolFormValue(r.FormValue("exclude_dummy_page_sets")) if params.SuccessfulOnly && params.PendingOnly { skutil.ReportError(w, r, fmt.Errorf("Inconsistent params: successful %v not_completed %v", r.FormValue("successful"), r.FormValue("not_completed")), "") return } if params.ExcludeDummyPageSets && !HasPageSetsColumn(prototype) { skutil.ReportError(w, r, fmt.Errorf("Task %s does not use page sets and thus cannot exclude dummy page sets.", prototype.GetTaskName()), "") return } offset, size, err := skutil.PaginationParams(r.URL.Query(), 0, DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE) if err == nil { params.Offset, params.Size = offset, size } else { skutil.ReportError(w, r, err, "Failed to get pagination params") return } params.CountQuery = false query, args := DBTaskQuery(prototype, params) glog.Infof("Running %s", query) data, err := prototype.Select(query, args...) if err != nil { skutil.ReportError(w, r, err, fmt.Sprintf("Failed to query %s tasks", prototype.GetTaskName())) return } params.CountQuery = true query, args = DBTaskQuery(prototype, params) // Get the total count. glog.Infof("Running %s", query) countVal := []int{} if err := db.DB.Select(&countVal, query, args...); err != nil { skutil.ReportError(w, r, err, fmt.Sprintf("Failed to query %s tasks", prototype.GetTaskName())) return } pagination := &skutil.ResponsePagination{ Offset: offset, Size: size, Total: countVal[0], } type Permissions struct { DeleteAllowed bool RedoAllowed bool } tasks := AsTaskSlice(data) permissions := make([]Permissions, len(tasks)) for i := 0; i < len(tasks); i++ { deleteAllowed, _ := canDeleteTask(tasks[i], r) redoAllowed, _ := canRedoTask(tasks[i], r) permissions[i] = Permissions{DeleteAllowed: deleteAllowed, RedoAllowed: redoAllowed} } jsonResponse := map[string]interface{}{ "data": data, "permissions": permissions, "pagination": pagination, } if err := json.NewEncoder(w).Encode(jsonResponse); err != nil { skutil.ReportError(w, r, err, "Failed to encode JSON") return } }