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  }