// makeBugChomperPage builds and serves the BugChomper page. func makeBugChomperPage(w http.ResponseWriter, r *http.Request) { // Redirect for login if needed. user := login.LoggedInAs(r) if user == "" { http.Redirect(w, r, login.LoginURL(w, r), http.StatusFound) return } glog.Infof("Logged in as %s", user) issueTracker := issue_tracker.New(login.GetHttpClient(r)) w.Header().Set("Content-Type", "text/html") glog.Info("Loading bugs for " + user) bugList, err := issueTracker.GetBugs(PROJECT_NAME, user) if err != nil { reportError(w, err.Error(), http.StatusInternalServerError) return } bugsById := make(map[string]*issue_tracker.Issue) bugsByPriority := make(map[string][]*issue_tracker.Issue) for _, bug := range bugList.Items { bugsById[strconv.Itoa(bug.Id)] = bug var bugPriority string for _, label := range bug.Labels { if strings.HasPrefix(label, PRIORITY_PREFIX) { bugPriority = label[len(PRIORITY_PREFIX):] } } if _, ok := bugsByPriority[bugPriority]; !ok { bugsByPriority[bugPriority] = make( []*issue_tracker.Issue, 0) } bugsByPriority[bugPriority] = append( bugsByPriority[bugPriority], bug) } bugsJson, err := json.Marshal(bugsById) if err != nil { reportError(w, err.Error(), http.StatusInternalServerError) return } data := struct { Title string User string BugsJson template.JS BugsByPriority *map[string][]*issue_tracker.Issue Priorities []string PriorityPrefix string }{ Title: "BugChomper", User: user, BugsJson: template.JS(string(bugsJson)), BugsByPriority: &bugsByPriority, Priorities: issue_tracker.BugPriorities, PriorityPrefix: PRIORITY_PREFIX, } if err := templates.ExecuteTemplate(w, "bug_chomper.html", data); err != nil { reportError(w, err.Error(), http.StatusInternalServerError) return } }
// redirectHandler handles redirecting to the correct tradefed page. func redirectHandler(w http.ResponseWriter, r *http.Request) { if login.LoggedInAs(r) == "" { r.Header.Set("Referer", r.URL.String()) http.Redirect(w, r, login.LoginURL(w, r), 302) return } vars := mux.Vars(r) codename := vars["codename"] buildNumberStr := vars["buildNumber"] target, err := codenameDB.Get([]byte(codename), nil) if err != nil { util.ReportError(w, r, err, "Not a valid target codename.") return } buildNumber, err := strconv.Atoi(buildNumberStr) if err != nil { util.ReportError(w, r, err, "Not a valid build number.") return } build, err := buildbot.GetBuildFromDB(string(codename), FAKE_MASTER, buildNumber) if err != nil { util.ReportError(w, r, err, "Could not find a matching build.") } id, ok := build.GetProperty("androidinternal_buildid").([]interface{})[1].(string) if !ok { util.ReportError(w, r, fmt.Errorf("Got %#v", id), "Could not find a matching build id.") return } w.Header().Set("Content-Type", "text/html") if _, err := w.Write([]byte(fmt.Sprintf(REDIRECT_TEMPLATE, codename, target, id, id, target, id, id, target))); err != nil { glog.Errorf("Failed to write response: %s", err) } }
// builderRedirectHandler handles redirecting to the correct tradefed page. func builderRedirectHandler(w http.ResponseWriter, r *http.Request) { if login.LoggedInAs(r) == "" { r.Header.Set("Referer", r.URL.String()) http.Redirect(w, r, login.LoginURL(w, r), 302) return } vars := mux.Vars(r) codename := vars["codename"] target, err := codenameDB.Get([]byte(codename), nil) if err != nil { util.ReportError(w, r, err, "Not a valid target codename.") return } w.Header().Set("Content-Type", "text/html") if _, err := w.Write([]byte(fmt.Sprintf(BUILDER_REDIRECT_TEMPLATE, codename, target, target, target))); err != nil { glog.Errorf("Failed to write response: %s", err) } }
// redirectHandler handles redirecting to the correct internal build page. func redirectHandler(w http.ResponseWriter, r *http.Request) { if login.LoggedInAs(r) == "" { r.Header.Set("Referer", r.URL.String()) http.Redirect(w, r, login.LoginURL(w, r), 302) return } vars := mux.Vars(r) codename := vars["codename"] buildNumberStr := vars["buildNumber"] target, err := codenameDB.Get([]byte(codename), nil) if err != nil { util.ReportError(w, r, err, "Not a valid target codename.") return } buildNumber, err := strconv.Atoi(buildNumberStr) if err != nil { util.ReportError(w, r, err, "Not a valid build number.") return } build, err := db.GetBuildFromDB(FAKE_MASTER, string(codename), buildNumber) if err != nil { util.ReportError(w, r, err, "Could not find a matching build.") } result := "" if id, err := build.GetStringProperty("androidinternal_buildid"); err == nil { result = fmt.Sprintf(LAUNCH_CONTROL_BUILD_REDIRECT_TEMPLATE, codename, target, id, id, target, id, id, target) } else if link, err := build.GetStringProperty("testResultsLink"); err == nil { result = fmt.Sprintf(TEST_RESULTS_REDIRECT_TEMPLATE, target, link, link) } else if cl, err := build.GetStringProperty("changeListNumber"); err == nil { link = fmt.Sprintf("http://cl/%s", cl) result = fmt.Sprintf(TEST_RESULTS_REDIRECT_TEMPLATE, target, link, link) } if result == "" { glog.Errorf("No redirect for %#v", build) util.ReportError(w, r, fmt.Errorf("No redirect for this build."), "") return } w.Header().Set("Content-Type", "text/html") if _, err := w.Write([]byte(result)); err != nil { util.ReportError(w, r, err, "Failed to write response") } }
func loginHandler(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, login.LoginURL(w, r), http.StatusFound) return }