Merge branch 'master' into alert_ui_take2

pull/5622/head
Torkel Ödegaard 9 years ago
commit 0ef6801117
  1. 56
      pkg/api/common.go
  2. 1
      pkg/log/log.go
  3. 6
      pkg/middleware/logger.go
  4. 12
      pkg/middleware/middleware.go
  5. 7
      pkg/middleware/quota.go
  6. 4
      pkg/services/sqlstore/datasource_test.go
  7. 2
      pkg/services/sqlstore/migrations/migrations_test.go
  8. 4
      pkg/services/sqlstore/sqlstore.go

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/metrics" "github.com/grafana/grafana/pkg/metrics"
"github.com/grafana/grafana/pkg/middleware" "github.com/grafana/grafana/pkg/middleware"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
@ -21,13 +20,15 @@ var (
) )
type Response interface { type Response interface {
WriteTo(out http.ResponseWriter) WriteTo(ctx *middleware.Context)
} }
type NormalResponse struct { type NormalResponse struct {
status int status int
body []byte body []byte
header http.Header header http.Header
errMessage string
err error
} }
func wrap(action interface{}) macaron.Handler { func wrap(action interface{}) macaron.Handler {
@ -41,17 +42,21 @@ func wrap(action interface{}) macaron.Handler {
res = ServerError(err) res = ServerError(err)
} }
res.WriteTo(c.Resp) res.WriteTo(c)
} }
} }
func (r *NormalResponse) WriteTo(out http.ResponseWriter) { func (r *NormalResponse) WriteTo(ctx *middleware.Context) {
header := out.Header() if r.err != nil {
ctx.Logger.Error(r.errMessage, "error", r.err)
}
header := ctx.Resp.Header()
for k, v := range r.header { for k, v := range r.header {
header[k] = v header[k] = v
} }
out.WriteHeader(r.status) ctx.Resp.WriteHeader(r.status)
out.Write(r.body) ctx.Resp.Write(r.body)
} }
func (r *NormalResponse) Cache(ttl string) *NormalResponse { func (r *NormalResponse) Cache(ttl string) *NormalResponse {
@ -64,7 +69,6 @@ func (r *NormalResponse) Header(key, value string) *NormalResponse {
} }
// functions to create responses // functions to create responses
func Empty(status int) *NormalResponse { func Empty(status int) *NormalResponse {
return Respond(status, nil) return Respond(status, nil)
} }
@ -80,29 +84,35 @@ func ApiSuccess(message string) *NormalResponse {
} }
func ApiError(status int, message string, err error) *NormalResponse { func ApiError(status int, message string, err error) *NormalResponse {
resp := make(map[string]interface{}) data := make(map[string]interface{})
if err != nil {
log.Error(4, "%s: %v", message, err)
if setting.Env != setting.PROD {
resp["error"] = err.Error()
}
}
switch status { switch status {
case 404: case 404:
metrics.M_Api_Status_404.Inc(1) metrics.M_Api_Status_404.Inc(1)
resp["message"] = "Not Found" data["message"] = "Not Found"
case 500: case 500:
metrics.M_Api_Status_500.Inc(1) metrics.M_Api_Status_500.Inc(1)
resp["message"] = "Internal Server Error" data["message"] = "Internal Server Error"
} }
if message != "" { if message != "" {
resp["message"] = message data["message"] = message
}
if err != nil {
if setting.Env != setting.PROD {
data["error"] = err.Error()
}
}
resp := Json(status, data)
if err != nil {
resp.errMessage = message
resp.err = err
} }
return Json(status, resp) return resp
} }
func Respond(status int, body interface{}) *NormalResponse { func Respond(status int, body interface{}) *NormalResponse {

@ -22,6 +22,7 @@ var loggersToClose []DisposableHandler
func init() { func init() {
loggersToClose = make([]DisposableHandler, 0) loggersToClose = make([]DisposableHandler, 0)
Root = log15.Root() Root = log15.Root()
Root.SetHandler(log15.DiscardHandler())
} }
func New(logger string, ctx ...interface{}) Logger { func New(logger string, ctx ...interface{}) Logger {

@ -48,7 +48,11 @@ func Logger() macaron.Handler {
if ctx, ok := c.Data["ctx"]; ok { if ctx, ok := c.Data["ctx"]; ok {
ctxTyped := ctx.(*Context) ctxTyped := ctx.(*Context)
ctxTyped.Logger.Info("Request Completed", "method", req.Method, "path", req.URL.Path, "status", status, "remote_addr", c.RemoteAddr(), "time_ns", timeTakenMs, "size", rw.Size()) if status == 500 {
ctxTyped.Logger.Error("Request Completed", "method", req.Method, "path", req.URL.Path, "status", status, "remote_addr", c.RemoteAddr(), "time_ns", timeTakenMs, "size", rw.Size())
} else {
ctxTyped.Logger.Info("Request Completed", "method", req.Method, "path", req.URL.Path, "status", status, "remote_addr", c.RemoteAddr(), "time_ns", timeTakenMs, "size", rw.Size())
}
} }
} }
} }

@ -80,7 +80,7 @@ func initContextWithAnonymousUser(ctx *Context) bool {
func initContextWithUserSessionCookie(ctx *Context) bool { func initContextWithUserSessionCookie(ctx *Context) bool {
// initialize session // initialize session
if err := ctx.Session.Start(ctx); err != nil { if err := ctx.Session.Start(ctx); err != nil {
log.Error(3, "Failed to start session", err) ctx.Logger.Error("Failed to start session", "error", err)
return false return false
} }
@ -91,7 +91,7 @@ func initContextWithUserSessionCookie(ctx *Context) bool {
query := m.GetSignedInUserQuery{UserId: userId} query := m.GetSignedInUserQuery{UserId: userId}
if err := bus.Dispatch(&query); err != nil { if err := bus.Dispatch(&query); err != nil {
log.Error(3, "Failed to get user with id %v", userId) ctx.Logger.Error("Failed to get user with id", "userId", userId)
return false return false
} else { } else {
ctx.SignedInUser = query.Result ctx.SignedInUser = query.Result
@ -185,7 +185,7 @@ func initContextWithApiKeyFromSession(ctx *Context) bool {
keyQuery := m.GetApiKeyByIdQuery{ApiKeyId: keyId.(int64)} keyQuery := m.GetApiKeyByIdQuery{ApiKeyId: keyId.(int64)}
if err := bus.Dispatch(&keyQuery); err != nil { if err := bus.Dispatch(&keyQuery); err != nil {
log.Error(3, "Failed to get api key by id", err) ctx.Logger.Error("Failed to get api key by id", "id", keyId, "error", err)
return false return false
} else { } else {
apikey := keyQuery.Result apikey := keyQuery.Result
@ -202,7 +202,7 @@ func initContextWithApiKeyFromSession(ctx *Context) bool {
// Handle handles and logs error by given status. // Handle handles and logs error by given status.
func (ctx *Context) Handle(status int, title string, err error) { func (ctx *Context) Handle(status int, title string, err error) {
if err != nil { if err != nil {
log.Error(4, "%s: %v", title, err) ctx.Logger.Error(title, "error", err)
if setting.Env != setting.PROD { if setting.Env != setting.PROD {
ctx.Data["ErrorMsg"] = err ctx.Data["ErrorMsg"] = err
} }
@ -223,9 +223,7 @@ func (ctx *Context) Handle(status int, title string, err error) {
func (ctx *Context) JsonOK(message string) { func (ctx *Context) JsonOK(message string) {
resp := make(map[string]interface{}) resp := make(map[string]interface{})
resp["message"] = message resp["message"] = message
ctx.JSON(200, resp) ctx.JSON(200, resp)
} }
@ -237,7 +235,7 @@ func (ctx *Context) JsonApiErr(status int, message string, err error) {
resp := make(map[string]interface{}) resp := make(map[string]interface{})
if err != nil { if err != nil {
log.Error(4, "%s: %v", message, err) ctx.Logger.Error(message, "error", err)
if setting.Env != setting.PROD { if setting.Env != setting.PROD {
resp["error"] = err.Error() resp["error"] = err.Error()
} }

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/log"
m "github.com/grafana/grafana/pkg/models" m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
"gopkg.in/macaron.v1" "gopkg.in/macaron.v1"
@ -35,10 +34,8 @@ func QuotaReached(c *Context, target string) (bool, error) {
return false, err return false, err
} }
log.Debug(fmt.Sprintf("checking quota for %s in scopes %v", target, scopes))
for _, scope := range scopes { for _, scope := range scopes {
log.Debug(fmt.Sprintf("checking scope %s", scope.Name)) c.Logger.Debug("Checking quota", "target", target, "scope", scope)
switch scope.Name { switch scope.Name {
case "global": case "global":
@ -51,7 +48,7 @@ func QuotaReached(c *Context, target string) (bool, error) {
if target == "session" { if target == "session" {
usedSessions := getSessionCount() usedSessions := getSessionCount()
if int64(usedSessions) > scope.DefaultLimit { if int64(usedSessions) > scope.DefaultLimit {
log.Debug(fmt.Sprintf("%d sessions active, limit is %d", usedSessions, scope.DefaultLimit)) c.Logger.Debug("Sessions limit reached", "active", usedSessions, "limit", scope.DefaultLimit)
return true, nil return true, nil
} }
continue continue

@ -12,8 +12,6 @@ import (
) )
func InitTestDB(t *testing.T) { func InitTestDB(t *testing.T) {
t.Log("InitTestDB")
x, err := xorm.NewEngine(sqlutil.TestDB_Sqlite3.DriverName, sqlutil.TestDB_Sqlite3.ConnStr) x, err := xorm.NewEngine(sqlutil.TestDB_Sqlite3.DriverName, sqlutil.TestDB_Sqlite3.ConnStr)
//x, err := xorm.NewEngine(sqlutil.TestDB_Mysql.DriverName, sqlutil.TestDB_Mysql.ConnStr) //x, err := xorm.NewEngine(sqlutil.TestDB_Mysql.DriverName, sqlutil.TestDB_Mysql.ConnStr)
//x, err := xorm.NewEngine(sqlutil.TestDB_Postgres.DriverName, sqlutil.TestDB_Postgres.ConnStr) //x, err := xorm.NewEngine(sqlutil.TestDB_Postgres.DriverName, sqlutil.TestDB_Postgres.ConnStr)
@ -24,7 +22,7 @@ func InitTestDB(t *testing.T) {
sqlutil.CleanDB(x) sqlutil.CleanDB(x)
if err := SetEngine(x, false); err != nil { if err := SetEngine(x); err != nil {
t.Fatal(err) t.Fatal(err)
} }
} }

@ -6,7 +6,6 @@ import (
"github.com/go-xorm/xorm" "github.com/go-xorm/xorm"
. "github.com/grafana/grafana/pkg/services/sqlstore/migrator" . "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
"github.com/grafana/grafana/pkg/services/sqlstore/sqlutil" "github.com/grafana/grafana/pkg/services/sqlstore/sqlutil"
"github.com/inconshreveable/log15"
. "github.com/smartystreets/goconvey/convey" . "github.com/smartystreets/goconvey/convey"
//"github.com/grafana/grafana/pkg/log" //"github.com/grafana/grafana/pkg/log"
@ -30,7 +29,6 @@ func TestMigrations(t *testing.T) {
sqlutil.CleanDB(x) sqlutil.CleanDB(x)
mg := NewMigrator(x) mg := NewMigrator(x)
mg.Logger.SetHandler(log15.DiscardHandler())
AddMigrations(mg) AddMigrations(mg)
err = mg.Start() err = mg.Start()

@ -78,7 +78,7 @@ func NewEngine() {
os.Exit(1) os.Exit(1)
} }
err = SetEngine(x, setting.Env == setting.DEV) err = SetEngine(x)
if err != nil { if err != nil {
sqlog.Error("Fail to initialize orm engine", "error", err) sqlog.Error("Fail to initialize orm engine", "error", err)
@ -86,7 +86,7 @@ func NewEngine() {
} }
} }
func SetEngine(engine *xorm.Engine, enableLog bool) (err error) { func SetEngine(engine *xorm.Engine) (err error) {
x = engine x = engine
dialect = migrator.NewDialect(x.DriverName()) dialect = migrator.NewDialect(x.DriverName())

Loading…
Cancel
Save