diff --git a/go.mod b/go.mod index d947ae94afc..be0233cbbd5 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,6 @@ require ( github.com/gchaincl/sqlhooks v1.3.0 github.com/go-macaron/binding v0.0.0-20190806013118-0b4f37bab25b github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07 - github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659 github.com/go-sql-driver/mysql v1.5.0 github.com/go-stack/stack v1.8.0 github.com/gobwas/glob v0.2.3 diff --git a/go.sum b/go.sum index 634a69c5589..d6eaac3db11 100644 --- a/go.sum +++ b/go.sum @@ -177,7 +177,6 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dR github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= @@ -229,16 +228,12 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cortexproject/cortex v0.6.1-0.20200228110116-92ab6cbe0995/go.mod h1:3Xa3DjJxtpXqxcMGdk850lcIRb81M0fyY1MQ6udY134= github.com/cortexproject/cortex v1.2.1-0.20200803161316-7014ff11ed70/go.mod h1:PVPxNLrxKH+yc8asaJOxuz7TiRmMizFfnSMOnRzM6oM= -github.com/couchbase/gomemcached v0.0.0-20190515232915-c4b4ca0eb21d/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c= -github.com/couchbase/goutils v0.0.0-20190315194238-f9d42b11473b/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs= -github.com/couchbaselabs/go-couchbase v0.0.0-20190708161019-23e7ca2ce2b7/go.mod h1:mby/05p8HE5yHEAKiIH/555NoblMs7PtW6NrYshDruc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/crewjam/httperr v0.0.0-20190612203328-a946449404da/go.mod h1:+rmNIXRvYMqLQeR4DHyTvs6y0MEMymTz4vyFpFkKTPs= github.com/crewjam/saml v0.4.1 h1:ZNSRJvdbypQDY2uApMngeIHNcxS6UCRAgiw3S+pmgRU= github.com/crewjam/saml v0.4.1/go.mod h1:vHcshzXm2WkPOV1dcToZa99cCB1h3nPiKLtLYK+erBE= -github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= github.com/cznic/fileutil v0.0.0-20180108211300-6a051e75936f/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= @@ -358,8 +353,6 @@ github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07 h1:YSIA98PevNf1NtC github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07/go.mod h1://cJFfDp/70L0oTNAMB+M8Jd0rpuIx/55iARuJ6StwE= github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 h1:NjHlg70DuOkcAMqgt0+XA+NHwtu66MkTVVgR4fFWbcI= github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191/go.mod h1:VFI2o2q9kYsC4o7VP1HrEVosiZZTd+MVT3YZx4gqvJw= -github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659 h1:YXDFNK98PgKeBd+xM2Babdd6gyABG8H+SSAh5+hr0os= -github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659/go.mod h1:tLd0QEudXocQckwcpCq5pCuTCuYc24I0bRJDuRe9OuQ= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -807,8 +800,6 @@ github.com/linkedin/goavro/v2 v2.9.7 h1:Vd++Rb/RKcmNJjM0HP/JJFMEWa21eUBVKPYlKehO github.com/linkedin/goavro/v2 v2.9.7/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= -github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de/go.mod h1:3q8WtuPQsoRbatJuy3nvq/hRSvuBJrHHr+ybPPiNvHQ= -github.com/lunny/nodb v0.0.0-20160621015157-fc1ef06ad4af/go.mod h1:Cqz6pqow14VObJ7peltM+2n3PWOz7yTrfUuGbVFkzN0= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magefile/mage v1.9.0 h1:t3AU2wNwehMCW97vuqQLtw6puppWXHO+O2MHo5a50XE= github.com/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= @@ -1092,10 +1083,6 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= -github.com/siddontang/go-snappy v0.0.0-20140704025258-d8f7bb82a96d/go.mod h1:vq0tzqLRu6TS7Id0wMo2N5QzJoKedVeovOpHjnykSzY= -github.com/siddontang/ledisdb v0.0.0-20190202134119-8ceb77e66a92/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= -github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1141,7 +1128,6 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf h1:Z2X3Os7oRzpdJ75iPqWZc0HeJWFYNCvKsfpQwFpRNTA= github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/thanos-io/thanos v0.8.1-0.20200109203923-552ffa4c1a0d/go.mod h1:usT/TxtJQ7DzinTt+G9kinDQmRS5sxwu0unVKZ9vdcw= @@ -1718,7 +1704,6 @@ gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gG gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= -gopkg.in/bufio.v1 v1.0.0-20140618132640-567b2bfa514e/go.mod h1:xsQCaysVCudhrYTfzYWe577fCe7Ceci+6qjO2Rdc0Z4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= @@ -1743,7 +1728,6 @@ gopkg.in/macaron.v1 v1.3.9 h1:Dw+DDRYdXgQyEsPlfAfKz+UA5qVUrH3KPD7JhmZ9MFc= gopkg.in/macaron.v1 v1.3.9/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/redis.v2 v2.3.2/go.mod h1:4wl9PJ/CqzeHk3LVq1hNLHH8krm3+AXEgut4jVc++LU= gopkg.in/redis.v5 v5.2.9 h1:MNZYOLPomQzZMfpN3ZtD1uyJ2IDonTTlxYiV/pEApiw= gopkg.in/redis.v5 v5.2.9/go.mod h1:6gtv0/+A4iM08kdRfocWYB3bLX2tebpNtfKlFT6H4mY= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= diff --git a/pkg/api/dtos/alerting.go b/pkg/api/dtos/alerting.go index e67f39e8dc0..a692268082f 100644 --- a/pkg/api/dtos/alerting.go +++ b/pkg/api/dtos/alerting.go @@ -9,21 +9,6 @@ import ( "github.com/grafana/grafana/pkg/models" ) -type AlertRule struct { - Id int64 `json:"id"` - DashboardId int64 `json:"dashboardId"` - PanelId int64 `json:"panelId"` - Name string `json:"name"` - Message string `json:"message"` - State models.AlertStateType `json:"state"` - NewStateDate time.Time `json:"newStateDate"` - EvalDate time.Time `json:"evalDate"` - EvalData *simplejson.Json `json:"evalData"` - ExecutionError string `json:"executionError"` - Url string `json:"url"` - CanEdit bool `json:"canEdit"` -} - func formatShort(interval time.Duration) string { var result string diff --git a/pkg/api/static/static.go b/pkg/api/static/static.go index 2a35dd11fa6..0971a93c5a8 100644 --- a/pkg/api/static/static.go +++ b/pkg/api/static/static.go @@ -65,20 +65,6 @@ func (sm *staticMap) Set(dir *http.Dir) { sm.data[string(*dir)] = dir } -func (sm *staticMap) Get(name string) *http.Dir { - sm.lock.RLock() - defer sm.lock.RUnlock() - - return sm.data[name] -} - -func (sm *staticMap) Delete(name string) { - sm.lock.Lock() - defer sm.lock.Unlock() - - delete(sm.data, name) -} - var statics = staticMap{sync.RWMutex{}, map[string]*http.Dir{}} // staticFileSystem implements http.FileSystem interface. @@ -197,22 +183,3 @@ func Static(directory string, staticOpt ...StaticOptions) macaron.Handler { staticHandler(ctx, log, opt) } } - -// Statics registers multiple static middleware handlers all at once. -func Statics(opt StaticOptions, dirs ...string) macaron.Handler { - if len(dirs) == 0 { - panic("no static directory is given") - } - opts := make([]StaticOptions, len(dirs)) - for i := range dirs { - opts[i] = prepareStaticOption(dirs[i], opt) - } - - return func(ctx *macaron.Context, log *log.Logger) { - for i := range opts { - if staticHandler(ctx, log, opts[i]) { - return - } - } - } -} diff --git a/pkg/bus/bus.go b/pkg/bus/bus.go index dfe8be1eb4b..223b9199f3c 100644 --- a/pkg/bus/bus.go +++ b/pkg/bus/bus.go @@ -9,9 +9,6 @@ import ( // HandlerFunc defines a handler function interface. type HandlerFunc interface{} -// CtxHandlerFunc defines a context handler function. -type CtxHandlerFunc func() - // Msg defines a message interface. type Msg interface{} @@ -204,14 +201,6 @@ func Publish(msg Msg) error { return globalBus.Publish(msg) } -// InTransaction starts a transaction and store it in the context. -// The caller can then pass a function with multiple DispatchCtx calls that -// all will be executed in the same transaction. InTransaction will rollback if the -// callback returns an error. -func InTransaction(ctx context.Context, fn func(ctx context.Context) error) error { - return globalBus.InTransaction(ctx, fn) -} - func ClearBusHandlers() { globalBus = New() } diff --git a/pkg/infra/log/log.go b/pkg/infra/log/log.go index cf25b1064d8..737d48941c3 100644 --- a/pkg/infra/log/log.go +++ b/pkg/infra/log/log.go @@ -36,13 +36,6 @@ func New(logger string, ctx ...interface{}) Logger { return Root.New(params...) } -// NewWithLevel returns a new logger with a certain level. -func NewWithLevel(name string, level log15.Lvl) Logger { - logger := Root.New("logger", name) - logger.SetHandler(log15.LvlFilterHandler(level, log15.StreamHandler(os.Stdout, getLogFormat("console")))) - return logger -} - func Tracef(format string, v ...interface{}) { var message string if len(v) > 0 { @@ -91,10 +84,6 @@ func Errorf(skip int, format string, v ...interface{}) { Root.Error(fmt.Sprintf(format, v...)) } -func Criticalf(skip int, format string, v ...interface{}) { - Root.Crit(fmt.Sprintf(format, v...)) -} - func Fatalf(skip int, format string, v ...interface{}) { Root.Crit(fmt.Sprintf(format, v...)) Close() @@ -114,25 +103,6 @@ func Reload() { } } -func GetLogLevelFor(name string) Lvl { - if level, ok := filters[name]; ok { - switch level { - case log15.LvlWarn: - return LvlWarn - case log15.LvlInfo: - return LvlInfo - case log15.LvlError: - return LvlError - case log15.LvlCrit: - return LvlCrit - default: - return LvlDebug - } - } - - return LvlInfo -} - var logLevels = map[string]log15.Lvl{ "trace": log15.LvlDebug, "debug": log15.LvlDebug, diff --git a/pkg/infra/log/log_writer.go b/pkg/infra/log/log_writer.go deleted file mode 100644 index 2ff401a7f0a..00000000000 --- a/pkg/infra/log/log_writer.go +++ /dev/null @@ -1,39 +0,0 @@ -package log - -import ( - "io" - "strings" -) - -type logWriterImpl struct { - log Logger - level Lvl - prefix string -} - -func NewLogWriter(log Logger, level Lvl, prefix string) io.Writer { - return &logWriterImpl{ - log: log, - level: level, - prefix: prefix, - } -} - -func (l *logWriterImpl) Write(p []byte) (n int, err error) { - message := l.prefix + strings.TrimSpace(string(p)) - - switch l.level { - case LvlCrit: - l.log.Crit(message) - case LvlError: - l.log.Error(message) - case LvlWarn: - l.log.Warn(message) - case LvlInfo: - l.log.Info(message) - default: - l.log.Debug(message) - } - - return len(p), nil -} diff --git a/pkg/infra/log/log_writer_test.go b/pkg/infra/log/log_writer_test.go deleted file mode 100644 index 8d1429323ce..00000000000 --- a/pkg/infra/log/log_writer_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package log - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/inconshreveable/log15" -) - -type FakeLogger struct { - m map[string]string -} - -func (f *FakeLogger) New(ctx ...interface{}) log15.Logger { - return nil -} - -func (f *FakeLogger) Debug(msg string, ctx ...interface{}) { - f.m["debug"] = msg -} - -func (f *FakeLogger) Info(msg string, ctx ...interface{}) { - f.m["info"] = msg -} - -func (f *FakeLogger) Warn(msg string, ctx ...interface{}) { - f.m["warn"] = msg -} - -func (f *FakeLogger) Error(msg string, ctx ...interface{}) { - f.m["err"] = msg -} - -func (f *FakeLogger) Crit(msg string, ctx ...interface{}) { - f.m["crit"] = msg -} - -func (f *FakeLogger) GetHandler() log15.Handler { - return nil -} - -func (f *FakeLogger) SetHandler(l log15.Handler) {} - -func TestLogWriter_level(t *testing.T) { - tests := []struct { - description string - logger string - prefix string - level Lvl - input []byte - expectedConsumed int - expectedOutput string - }{ - { - description: "level crit", - logger: "crit", - input: []byte("crit"), - level: LvlCrit, - expectedConsumed: 4, - expectedOutput: "crit", - }, - { - description: "level error", - logger: "err", - input: []byte("error"), - level: LvlError, - expectedConsumed: 5, - expectedOutput: "error", - }, - { - description: "level warn", - logger: "warn", - input: []byte("warn"), - level: LvlWarn, - expectedConsumed: 4, - expectedOutput: "warn", - }, - { - description: "level info", - logger: "info", - input: []byte("info"), - level: LvlInfo, - expectedConsumed: 4, - expectedOutput: "info", - }, - { - description: "level debug", - logger: "debug", - input: []byte("debug"), - level: LvlDebug, - expectedConsumed: 5, - expectedOutput: "debug", - }, - { - description: "prefix", - logger: "debug", - input: []byte("debug"), - prefix: "prefix", - level: LvlDebug, - expectedConsumed: 5, - expectedOutput: "prefixdebug", - }, - } - - for _, tc := range tests { - tc := tc // to avoid timing issues - - t.Run(tc.description, func(t *testing.T) { - t.Parallel() - fake := &FakeLogger{m: map[string]string{}} - - w := NewLogWriter(fake, tc.level, tc.prefix) - n, err := w.Write(tc.input) - require.NoError(t, err) - - assert.Equal(t, tc.expectedConsumed, n) - assert.Equal(t, tc.expectedOutput, fake.m[tc.logger]) - }) - } -} diff --git a/pkg/login/social/generic_oauth_test.go b/pkg/login/social/generic_oauth_test.go index 0832e04c899..618fa67898d 100644 --- a/pkg/login/social/generic_oauth_test.go +++ b/pkg/login/social/generic_oauth_test.go @@ -4,9 +4,11 @@ import ( "encoding/json" "net/http" "net/http/httptest" + "os" "time" "github.com/inconshreveable/log15" + "github.com/mattn/go-isatty" "github.com/stretchr/testify/require" "testing" @@ -15,11 +17,24 @@ import ( "golang.org/x/oauth2" ) +func getLogFormat() log15.Format { + if isatty.IsTerminal(os.Stdout.Fd()) { + return log15.TerminalFormat() + } + return log15.LogfmtFormat() +} + +func newLogger(name string, level log15.Lvl) log.Logger { + logger := log.Root.New("logger", name) + logger.SetHandler(log15.LvlFilterHandler(level, log15.StreamHandler(os.Stdout, getLogFormat()))) + return logger +} + func TestSearchJSONForEmail(t *testing.T) { t.Run("Given a generic OAuth provider", func(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, } @@ -107,7 +122,7 @@ func TestSearchJSONForRole(t *testing.T) { t.Run("Given a generic OAuth provider", func(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, } @@ -170,7 +185,7 @@ func TestUserInfoSearchesForEmailAndRole(t *testing.T) { t.Run("Given a generic OAuth provider", func(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, emailAttributePath: "email", } @@ -337,7 +352,7 @@ func TestUserInfoSearchesForLogin(t *testing.T) { t.Run("Given a generic OAuth provider", func(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, loginAttributePath: "login", } @@ -432,7 +447,7 @@ func TestUserInfoSearchesForName(t *testing.T) { t.Run("Given a generic OAuth provider", func(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, nameAttributePath: "name", } @@ -529,7 +544,7 @@ func TestUserInfoSearchesForName(t *testing.T) { func TestPayloadCompression(t *testing.T) { provider := SocialGenericOAuth{ SocialBase: &SocialBase{ - log: log.NewWithLevel("generic_oauth_test", log15.LvlDebug), + log: newLogger("generic_oauth_test", log15.LvlDebug), }, emailAttributePath: "email", } diff --git a/pkg/models/dashboards.go b/pkg/models/dashboards.go index 30afd0b900d..e549f8f2001 100644 --- a/pkg/models/dashboards.go +++ b/pkg/models/dashboards.go @@ -272,11 +272,6 @@ func (cmd *SaveDashboardCommand) GetDashboardModel() *Dashboard { return dash } -// GetString a -func (d *Dashboard) GetString(prop string, defaultValue string) string { - return d.Data.Get(prop).MustString(defaultValue) -} - // UpdateSlug updates the slug func (d *Dashboard) UpdateSlug() { title := d.Data.Get("title").MustString() diff --git a/pkg/plugins/backendplugin/coreplugin/core_plugin.go b/pkg/plugins/backendplugin/coreplugin/core_plugin.go deleted file mode 100644 index e3168539e96..00000000000 --- a/pkg/plugins/backendplugin/coreplugin/core_plugin.go +++ /dev/null @@ -1,81 +0,0 @@ -package coreplugin - -import ( - "context" - - "github.com/grafana/grafana-plugin-sdk-go/backend" - "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/models" - "github.com/grafana/grafana/pkg/plugins/backendplugin" - "github.com/grafana/grafana/pkg/tsdb" -) - -type corePlugin struct { - pluginID string - logger log.Logger - backend.CheckHealthHandler - backend.CallResourceHandler - backend.QueryDataHandler -} - -// New returns a new backendplugin.PluginFactoryFunc for creating a core (built-in) backendplugin.Plugin. -func New(opts backend.ServeOpts) backendplugin.PluginFactoryFunc { - return backendplugin.PluginFactoryFunc(func(pluginID string, logger log.Logger, env []string) (backendplugin.Plugin, error) { - return &corePlugin{ - pluginID: pluginID, - logger: logger, - CheckHealthHandler: opts.CheckHealthHandler, - CallResourceHandler: opts.CallResourceHandler, - QueryDataHandler: opts.QueryDataHandler, - }, nil - }) -} - -func (cp *corePlugin) PluginID() string { - return cp.pluginID -} - -func (cp *corePlugin) Logger() log.Logger { - return cp.logger -} - -func (cp *corePlugin) Start(ctx context.Context) error { - if cp.QueryDataHandler != nil { - tsdb.RegisterTsdbQueryEndpoint(cp.pluginID, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) { - return newQueryEndpointAdapter(cp.pluginID, cp.logger, backendplugin.InstrumentQueryDataHandler(cp.QueryDataHandler)), nil - }) - } - return nil -} - -func (cp *corePlugin) Stop(ctx context.Context) error { - return nil -} - -func (cp *corePlugin) IsManaged() bool { - return false -} - -func (cp *corePlugin) Exited() bool { - return false -} - -func (cp *corePlugin) CollectMetrics(ctx context.Context) (*backend.CollectMetricsResult, error) { - return nil, backendplugin.ErrMethodNotImplemented -} - -func (cp *corePlugin) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { - if cp.CheckHealthHandler != nil { - return cp.CheckHealthHandler.CheckHealth(ctx, req) - } - - return nil, backendplugin.ErrMethodNotImplemented -} - -func (cp *corePlugin) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error { - if cp.CallResourceHandler != nil { - return cp.CallResourceHandler.CallResource(ctx, req, sender) - } - - return backendplugin.ErrMethodNotImplemented -} diff --git a/pkg/plugins/backendplugin/coreplugin/core_plugin_test.go b/pkg/plugins/backendplugin/coreplugin/core_plugin_test.go deleted file mode 100644 index d9fa8be7f2a..00000000000 --- a/pkg/plugins/backendplugin/coreplugin/core_plugin_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package coreplugin_test - -import ( - "context" - "testing" - - "github.com/grafana/grafana-plugin-sdk-go/backend" - "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/plugins/backendplugin" - "github.com/grafana/grafana/pkg/plugins/backendplugin/coreplugin" - "github.com/stretchr/testify/require" -) - -func TestCorePlugin(t *testing.T) { - t.Run("New core plugin with empty opts should return expected values", func(t *testing.T) { - factory := coreplugin.New(backend.ServeOpts{}) - p, err := factory("plugin", log.New("test"), nil) - require.NoError(t, err) - require.NotNil(t, p) - require.NoError(t, p.Start(context.Background())) - require.NoError(t, p.Stop(context.Background())) - require.False(t, p.IsManaged()) - require.False(t, p.Exited()) - - _, err = p.CollectMetrics(context.Background()) - require.Equal(t, backendplugin.ErrMethodNotImplemented, err) - - _, err = p.CheckHealth(context.Background(), nil) - require.Equal(t, backendplugin.ErrMethodNotImplemented, err) - - err = p.CallResource(context.Background(), nil, nil) - require.Equal(t, backendplugin.ErrMethodNotImplemented, err) - }) - - t.Run("New core plugin with handlers set in opts should return expected values", func(t *testing.T) { - checkHealthCalled := false - callResourceCalled := false - factory := coreplugin.New(backend.ServeOpts{ - CheckHealthHandler: backend.CheckHealthHandlerFunc(func(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { - checkHealthCalled = true - return nil, nil - }), - CallResourceHandler: backend.CallResourceHandlerFunc(func(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error { - callResourceCalled = true - return nil - }), - }) - p, err := factory("plugin", log.New("test"), nil) - require.NoError(t, err) - require.NotNil(t, p) - require.NoError(t, p.Start(context.Background())) - require.NoError(t, p.Stop(context.Background())) - require.False(t, p.IsManaged()) - require.False(t, p.Exited()) - - _, err = p.CollectMetrics(context.Background()) - require.Equal(t, backendplugin.ErrMethodNotImplemented, err) - - _, err = p.CheckHealth(context.Background(), &backend.CheckHealthRequest{}) - require.NoError(t, err) - require.True(t, checkHealthCalled) - - err = p.CallResource(context.Background(), &backend.CallResourceRequest{}, nil) - require.NoError(t, err) - require.True(t, callResourceCalled) - }) -} diff --git a/pkg/plugins/backendplugin/coreplugin/query_endpoint_adapter.go b/pkg/plugins/backendplugin/coreplugin/query_endpoint_adapter.go deleted file mode 100644 index 311d06cbf4b..00000000000 --- a/pkg/plugins/backendplugin/coreplugin/query_endpoint_adapter.go +++ /dev/null @@ -1,113 +0,0 @@ -package coreplugin - -import ( - "context" - "time" - - "github.com/grafana/grafana-plugin-sdk-go/backend" - "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/models" - "github.com/grafana/grafana/pkg/plugins/datasource/wrapper" - "github.com/grafana/grafana/pkg/tsdb" -) - -func newQueryEndpointAdapter(pluginID string, logger log.Logger, handler backend.QueryDataHandler) tsdb.TsdbQueryEndpoint { - return &queryEndpointAdapter{ - pluginID: pluginID, - logger: logger, - handler: handler, - } -} - -type queryEndpointAdapter struct { - pluginID string - logger log.Logger - handler backend.QueryDataHandler -} - -func modelToInstanceSettings(ds *models.DataSource) (*backend.DataSourceInstanceSettings, error) { - jsonDataBytes, err := ds.JsonData.MarshalJSON() - if err != nil { - return nil, err - } - - return &backend.DataSourceInstanceSettings{ - ID: ds.Id, - Name: ds.Name, - URL: ds.Url, - Database: ds.Database, - User: ds.User, - BasicAuthEnabled: ds.BasicAuth, - BasicAuthUser: ds.BasicAuthUser, - JSONData: jsonDataBytes, - DecryptedSecureJSONData: ds.DecryptedValues(), - Updated: ds.Updated, - }, nil -} - -func (a *queryEndpointAdapter) Query(ctx context.Context, ds *models.DataSource, query *tsdb.TsdbQuery) (*tsdb.Response, error) { - instanceSettings, err := modelToInstanceSettings(ds) - if err != nil { - return nil, err - } - - req := &backend.QueryDataRequest{ - PluginContext: backend.PluginContext{ - OrgID: ds.OrgId, - PluginID: a.pluginID, - User: wrapper.BackendUserFromSignedInUser(query.User), - DataSourceInstanceSettings: instanceSettings, - }, - Queries: []backend.DataQuery{}, - Headers: query.Headers, - } - - for _, q := range query.Queries { - modelJSON, err := q.Model.MarshalJSON() - if err != nil { - return nil, err - } - req.Queries = append(req.Queries, backend.DataQuery{ - RefID: q.RefId, - Interval: time.Duration(q.IntervalMs) * time.Millisecond, - MaxDataPoints: q.MaxDataPoints, - TimeRange: backend.TimeRange{ - From: query.TimeRange.GetFromAsTimeUTC(), - To: query.TimeRange.GetToAsTimeUTC(), - }, - QueryType: q.QueryType, - JSON: modelJSON, - }) - } - - resp, err := a.handler.QueryData(ctx, req) - if err != nil { - return nil, err - } - - tR := &tsdb.Response{ - Results: make(map[string]*tsdb.QueryResult, len(resp.Responses)), - } - - for refID, r := range resp.Responses { - qr := &tsdb.QueryResult{ - RefId: refID, - } - - for _, f := range r.Frames { - if f.RefID == "" { - f.RefID = refID - } - } - - qr.Dataframes = tsdb.NewDecodedDataFrames(r.Frames) - - if r.Error != nil { - qr.Error = r.Error - } - - tR.Results[refID] = qr - } - - return tR, nil -} diff --git a/pkg/plugins/backendplugin/grpcplugin/client.go b/pkg/plugins/backendplugin/grpcplugin/client.go index dc8897dcc34..88961efe13f 100644 --- a/pkg/plugins/backendplugin/grpcplugin/client.go +++ b/pkg/plugins/backendplugin/grpcplugin/client.go @@ -66,11 +66,6 @@ type PluginDescriptor struct { startFns PluginStartFuncs } -// PluginID returns the plugin ID. -func (pd PluginDescriptor) PluginID() string { - return pd.pluginID -} - // getV2PluginSet returns list of plugins supported on v2. func getV2PluginSet() goplugin.PluginSet { return goplugin.PluginSet{ diff --git a/pkg/services/alerting/conditions/query_test.go b/pkg/services/alerting/conditions/query_test.go index 54765e7328d..bd1a2b75b23 100644 --- a/pkg/services/alerting/conditions/query_test.go +++ b/pkg/services/alerting/conditions/query_test.go @@ -20,6 +20,16 @@ import ( "github.com/xorcare/pointer" ) +func newTimeSeriesPointsFromArgs(values ...float64) tsdb.TimeSeriesPoints { + points := make(tsdb.TimeSeriesPoints, 0) + + for i := 0; i < len(values); i += 2 { + points = append(points, tsdb.NewTimePoint(null.FloatFrom(values[i]), values[i+1])) + } + + return points +} + func TestQueryCondition(t *testing.T) { Convey("when evaluating query condition", t, func() { queryConditionScenario("Given avg() and > 100", func(ctx *queryConditionTestContext) { @@ -47,7 +57,7 @@ func TestQueryCondition(t *testing.T) { }) Convey("should fire when avg is above 100", func() { - points := tsdb.NewTimeSeriesPointsFromArgs(120, 0) + points := newTimeSeriesPointsFromArgs(120, 0) ctx.series = tsdb.TimeSeriesSlice{tsdb.NewTimeSeries("test1", points)} cr, err := ctx.exec() @@ -67,7 +77,7 @@ func TestQueryCondition(t *testing.T) { }) Convey("Should not fire when avg is below 100", func() { - points := tsdb.NewTimeSeriesPointsFromArgs(90, 0) + points := newTimeSeriesPointsFromArgs(90, 0) ctx.series = tsdb.TimeSeriesSlice{tsdb.NewTimeSeries("test1", points)} cr, err := ctx.exec() @@ -88,8 +98,8 @@ func TestQueryCondition(t *testing.T) { Convey("Should fire if only first series matches", func() { ctx.series = tsdb.TimeSeriesSlice{ - tsdb.NewTimeSeries("test1", tsdb.NewTimeSeriesPointsFromArgs(120, 0)), - tsdb.NewTimeSeries("test2", tsdb.NewTimeSeriesPointsFromArgs(0, 0)), + tsdb.NewTimeSeries("test1", newTimeSeriesPointsFromArgs(120, 0)), + tsdb.NewTimeSeries("test2", newTimeSeriesPointsFromArgs(0, 0)), } cr, err := ctx.exec() @@ -121,7 +131,7 @@ func TestQueryCondition(t *testing.T) { Convey("Should set Firing if eval match", func() { ctx.evaluator = `{"type": "no_value", "params": []}` ctx.series = tsdb.TimeSeriesSlice{ - tsdb.NewTimeSeries("test1", tsdb.NewTimeSeriesPointsFromArgs()), + tsdb.NewTimeSeries("test1", newTimeSeriesPointsFromArgs()), } cr, err := ctx.exec() @@ -131,8 +141,8 @@ func TestQueryCondition(t *testing.T) { Convey("Should set NoDataFound both series are empty", func() { ctx.series = tsdb.TimeSeriesSlice{ - tsdb.NewTimeSeries("test1", tsdb.NewTimeSeriesPointsFromArgs()), - tsdb.NewTimeSeries("test2", tsdb.NewTimeSeriesPointsFromArgs()), + tsdb.NewTimeSeries("test1", newTimeSeriesPointsFromArgs()), + tsdb.NewTimeSeries("test2", newTimeSeriesPointsFromArgs()), } cr, err := ctx.exec() @@ -153,8 +163,8 @@ func TestQueryCondition(t *testing.T) { Convey("Should not set NoDataFound if one series is empty", func() { ctx.series = tsdb.TimeSeriesSlice{ - tsdb.NewTimeSeries("test1", tsdb.NewTimeSeriesPointsFromArgs()), - tsdb.NewTimeSeries("test2", tsdb.NewTimeSeriesPointsFromArgs(120, 0)), + tsdb.NewTimeSeries("test1", newTimeSeriesPointsFromArgs()), + tsdb.NewTimeSeries("test2", newTimeSeriesPointsFromArgs(120, 0)), } cr, err := ctx.exec() diff --git a/pkg/services/annotations/annotations.go b/pkg/services/annotations/annotations.go index ceb19d5f5cc..cc25567e53e 100644 --- a/pkg/services/annotations/annotations.go +++ b/pkg/services/annotations/annotations.go @@ -35,15 +35,6 @@ type ItemQuery struct { Limit int64 `json:"limit"` } -type PostParams struct { - DashboardId int64 `json:"dashboardId"` - PanelId int64 `json:"panelId"` - Epoch int64 `json:"epoch"` - Title string `json:"title"` - Text string `json:"text"` - Icon string `json:"icon"` -} - type DeleteParams struct { OrgId int64 Id int64 diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index a35ffbb8a22..2f9445c5fed 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -16,7 +16,6 @@ import ( "strings" "time" - "github.com/go-macaron/session" "github.com/prometheus/common/model" ini "gopkg.in/ini.v1" @@ -170,7 +169,6 @@ var ( BasicAuthEnabled bool // Session settings. - SessionOptions session.Options SessionConnMaxLifetime int64 // Global setting objects. diff --git a/pkg/tsdb/models.go b/pkg/tsdb/models.go index 4d4fb50aeb4..ae12ef36390 100644 --- a/pkg/tsdb/models.go +++ b/pkg/tsdb/models.go @@ -72,16 +72,6 @@ func NewTimePoint(value null.Float, timestamp float64) TimePoint { return TimePoint{value, null.FloatFrom(timestamp)} } -func NewTimeSeriesPointsFromArgs(values ...float64) TimeSeriesPoints { - points := make(TimeSeriesPoints, 0) - - for i := 0; i < len(values); i += 2 { - points = append(points, NewTimePoint(null.FloatFrom(values[i]), values[i+1])) - } - - return points -} - func NewTimeSeries(name string, points TimeSeriesPoints) *TimeSeries { return &TimeSeries{ Name: name, diff --git a/pkg/tsdb/query_endpoint.go b/pkg/tsdb/query_endpoint.go index 4e4f1c9ec9e..856b7066832 100644 --- a/pkg/tsdb/query_endpoint.go +++ b/pkg/tsdb/query_endpoint.go @@ -2,7 +2,6 @@ package tsdb import ( "context" - "fmt" "github.com/grafana/grafana/pkg/models" ) @@ -19,18 +18,6 @@ func init() { registry = make(map[string]GetTsdbQueryEndpointFn) } -func getTsdbQueryEndpointFor(dsInfo *models.DataSource) (TsdbQueryEndpoint, error) { - if fn, exists := registry[dsInfo.Type]; exists { - executor, err := fn(dsInfo) - if err != nil { - return nil, err - } - - return executor, nil - } - return nil, fmt.Errorf("Could not find executor for data source type: %s", dsInfo.Type) -} - func RegisterTsdbQueryEndpoint(pluginId string, fn GetTsdbQueryEndpointFn) { registry[pluginId] = fn } diff --git a/pkg/tsdb/request.go b/pkg/tsdb/request.go index 162116fb2fa..572e09f1c9d 100644 --- a/pkg/tsdb/request.go +++ b/pkg/tsdb/request.go @@ -2,6 +2,7 @@ package tsdb import ( "context" + "fmt" "github.com/grafana/grafana/pkg/models" ) @@ -9,7 +10,14 @@ import ( type HandleRequestFunc func(ctx context.Context, dsInfo *models.DataSource, req *TsdbQuery) (*Response, error) func HandleRequest(ctx context.Context, dsInfo *models.DataSource, req *TsdbQuery) (*Response, error) { - endpoint, err := getTsdbQueryEndpointFor(dsInfo) + var endpoint TsdbQueryEndpoint + fn, exists := registry[dsInfo.Type] + if !exists { + return nil, fmt.Errorf("Could not find executor for data source type: %s", dsInfo.Type) + } + + var err error + endpoint, err = fn(dsInfo) if err != nil { return nil, err } diff --git a/pkg/util/math.go b/pkg/util/math.go index 391ab426081..e656393b14e 100644 --- a/pkg/util/math.go +++ b/pkg/util/math.go @@ -1,13 +1,5 @@ package util -// MaxInt returns the larger of x or y. -func MaxInt(x, y int) int { - if x < y { - return y - } - return x -} - // MinInt returns the smaller of x or y. func MinInt(x, y int) int { if x > y {