func appLog(w http.ResponseWriter, r *http.Request, t *auth.Token) error { var err error var lines int if l := r.URL.Query().Get("lines"); l != "" { lines, err = strconv.Atoi(l) if err != nil { msg := `Parameter "lines" must be an integer.` return &errors.HTTP{Code: http.StatusBadRequest, Message: msg} } } else { return &errors.HTTP{Code: http.StatusBadRequest, Message: `Parameter "lines" is mandatory.`} } w.Header().Set("Content-Type", "application/json") source := r.URL.Query().Get("source") u, err := t.User() if err != nil { return err } appName := r.URL.Query().Get(":app") extra := []interface{}{ "app=" + appName, fmt.Sprintf("lines=%d", lines), } if source != "" { extra = append(extra, "source="+source) } if r.URL.Query().Get("follow") == "1" { extra = append(extra, "follow=1") } rec.Log(u.Email, "app-log", extra...) a, err := getApp(appName, u) if err != nil { return err } logs, err := a.LastLogs(lines, source) if err != nil { return err } encoder := json.NewEncoder(w) err = encoder.Encode(logs) if err != nil { return err } // TODO(fss): write an automated test for this code. if r.URL.Query().Get("follow") == "1" { l := app.NewLogListener(&a) defer l.Close() for log := range l.C { err := encoder.Encode([]app.Applog{log}) if err != nil { break } } } return nil }
func appLog(w http.ResponseWriter, r *http.Request, u *auth.User) error { var err error var lines int if l := r.URL.Query().Get("lines"); l != "" { lines, err = strconv.Atoi(l) if err != nil { msg := `Parameter "lines" must be an integer.` return &errors.Http{Code: http.StatusBadRequest, Message: msg} } } else { return &errors.Http{Code: http.StatusBadRequest, Message: `Parameter "lines" is mandatory.`} } w.Header().Set("Content-Type", "application/json") appName := r.URL.Query().Get(":name") a, err := getApp(appName, u) if err != nil { return err } logs, err := a.LastLogs(lines, r.URL.Query().Get("source")) if err != nil { return err } encoder := json.NewEncoder(w) err = encoder.Encode(logs) if err != nil { return err } // TODO(fss): write an automated test for this code. if r.URL.Query().Get("follow") == "1" { l := app.NewLogListener(&a) defer l.Close() for log := range l.C { err := encoder.Encode([]app.Applog{log}) if err != nil { break } } } return nil }