github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/service/scheduler.go (about) 1 package service 2 3 import ( 4 "net/http" 5 6 "github.com/evergreen-ci/evergreen/model" 7 "github.com/evergreen-ci/evergreen/model/event" 8 "github.com/evergreen-ci/evergreen/model/user" 9 "github.com/evergreen-ci/evergreen/util" 10 "github.com/gorilla/mux" 11 "github.com/pkg/errors" 12 ) 13 14 func (uis *UIServer) getSchedulerPage(w http.ResponseWriter, r *http.Request) { 15 distroId := mux.Vars(r)["distro_id"] 16 projCtx := MustHaveProjectContext(r) 17 18 uis.WriteHTML(w, http.StatusOK, struct { 19 ProjectData projectContext 20 User *user.DBUser 21 DistroId string 22 }{projCtx, GetUser(r), distroId}, "base", "scheduler_events.html", "base_angular.html", "menu.html") 23 } 24 25 func (uis *UIServer) getSchedulerLogs(w http.ResponseWriter, r *http.Request) { 26 distroId := mux.Vars(r)["distro_id"] 27 28 loggedEvents, err := event.Find(event.AllLogCollection, event.RecentSchedulerEvents(distroId, 500)) 29 if err != nil { 30 uis.LoggedError(w, r, http.StatusInternalServerError, err) 31 return 32 } 33 uis.WriteJSON(w, http.StatusOK, loggedEvents) 34 } 35 36 func (uis *UIServer) schedulerStatsPage(w http.ResponseWriter, r *http.Request) { 37 38 projCtx := MustHaveProjectContext(r) 39 40 uis.WriteHTML(w, http.StatusOK, struct { 41 ProjectData projectContext 42 User *user.DBUser 43 }{projCtx, GetUser(r)}, "base", "scheduler_stats.html", "base_angular.html", "menu.html") 44 } 45 46 func (uis *UIServer) schedulerHostUtilization(w http.ResponseWriter, r *http.Request) { 47 // get granularity (in seconds) 48 granularity, err := util.GetIntValue(r, "granularity", 0) 49 if err != nil { 50 uis.LoggedError(w, r, http.StatusInternalServerError, err) 51 return 52 } 53 if granularity == 0 { 54 uis.LoggedError(w, r, http.StatusBadRequest, errors.New("Invalid granularity")) 55 return 56 } 57 58 // get number of days back 59 daysBack, err := util.GetIntValue(r, "numberDays", 0) 60 if err != nil { 61 uis.LoggedError(w, r, http.StatusInternalServerError, err) 62 return 63 } 64 if daysBack == 0 { 65 uis.LoggedError(w, r, http.StatusBadRequest, errors.New("Invalid days back")) 66 return 67 } 68 69 bucketData, err := model.CreateAllHostUtilizationBuckets(daysBack, granularity) 70 if err != nil { 71 http.Error(w, err.Error(), http.StatusInternalServerError) 72 return 73 } 74 uis.WriteJSON(w, http.StatusOK, bucketData) 75 76 return 77 78 } 79 80 func (uis *UIServer) averageSchedulerStats(w http.ResponseWriter, r *http.Request) { 81 // get granularity (in seconds) 82 granularity, err := util.GetIntValue(r, "granularity", 0) 83 if err != nil { 84 uis.LoggedError(w, r, http.StatusInternalServerError, err) 85 return 86 } 87 if granularity == 0 { 88 uis.LoggedError(w, r, http.StatusBadRequest, errors.New("Invalid granularity")) 89 return 90 } 91 92 // get number of days back 93 daysBack, err := util.GetIntValue(r, "numberDays", 0) 94 if err != nil { 95 uis.LoggedError(w, r, http.StatusInternalServerError, err) 96 return 97 } 98 if daysBack == 0 { 99 uis.LoggedError(w, r, http.StatusBadRequest, errors.New("Invalid days back")) 100 return 101 } 102 103 distroId := mux.Vars(r)["distro_id"] 104 105 bounds := model.CalculateBounds(daysBack, granularity) 106 107 avgBuckets, err := model.AverageStatistics(distroId, bounds) 108 if err != nil { 109 uis.LoggedError(w, r, http.StatusInternalServerError, err) 110 return 111 } 112 uis.WriteJSON(w, http.StatusOK, avgBuckets) 113 }