prow/cmd/deck/main.go
func handleLog(lc logClient) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		setHeadersNoCaching(w)
		w.Header().Set("Access-Control-Allow-Origin", "*")
		job := r.URL.Query().Get("job")
		id := r.URL.Query().Get("id")
		logger := logrus.WithFields(logrus.Fields{"job": job, "id": id})
		if err := validateLogRequest(r); err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}
		log, err := lc.GetJobLog(job, id)
		if err != nil {
			http.Error(w, fmt.Sprintf("Log not found: %v", err), http.StatusNotFound)
			logger := logger.WithError(err)
			msg := "Log not found."
			if strings.Contains(err.Error(), "PodInitializing") {
				// PodInitializing is really common and not something
				// that has any actionable items for administrators
				// monitoring logs, so we should log it as information
				logger.Info(msg)
			} else {
				logger.Warning(msg)
			}
			return
		}
		if _, err = w.Write(log); err != nil {
			logger.WithError(err).Warning("Error writing log.")
		}
	}
}
func handleLog(lc logClient) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		setHeadersNoCaching(w)
		w.Header().Set("Access-Control-Allow-Origin", "*")
		job := r.URL.Query().Get("job")
		id := r.URL.Query().Get("id")
		logger := logrus.WithFields(logrus.Fields{"job": job, "id": id})
		if err := validateLogRequest(r); err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}
		log, err := lc.GetJobLog(job, id)
		if err != nil {
			http.Error(w, fmt.Sprintf("Log not found: %v", err), http.StatusNotFound)
			logger := logger.WithError(err)
			msg := "Log not found."
			if strings.Contains(err.Error(), "PodInitializing") {
				// PodInitializing is really common and not something
				// that has any actionable items for administrators
				// monitoring logs, so we should log it as information
				logger.Info(msg)
			} else {
				logger.Warning(msg)
			}
			return
		}
		if _, err = w.Write(log); err != nil {
			logger.WithError(err).Warning("Error writing log.")
		}
	}
}
func handleLog ( lc logClient ) http . HandlerFunc { return func ( w http . ResponseWriter , r * http . Request ) { setHeadersNoCaching ( w ) w . Header ( ) . Set ( " " , " " ) job := r . URL . Query ( ) . Get ( " " ) id := r . URL . Query ( ) . Get ( " " ) logger := logrus . WithFields ( logrus . Fields { " " : job , " " : id } ) if err := validateLogRequest ( r ) ; err != nil { http . Error ( w , err . Error ( ) , http . StatusBadRequest ) return } log , err := lc . GetJobLog ( job , id ) if err != nil { http . Error ( w , fmt . Sprintf ( " " , err ) , http . StatusNotFound ) logger := logger . WithError ( err ) msg := " " if strings . Contains ( err . Error ( ) , " " ) { // PodInitializing is really common and not something // that has any actionable items for administrators // monitoring logs, so we should log it as information logger . Info ( msg ) } else { logger . Warning ( msg ) } return } if _ , err = w . Write ( log ) ; err != nil { logger . WithError ( err ) . Warning ( " " ) } } }
// TODO(spxtr): Cache, rate limit.
TODO ( spxtr ) : Cache rate limit .