mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Progress on data source admin
This commit is contained in:
parent
b70a3f0958
commit
27f07e9de2
1
Makefile
1
Makefile
@ -4,6 +4,7 @@ all: build
|
||||
|
||||
build:
|
||||
go build -o bin/grafana .
|
||||
go test ./pkg/...
|
||||
|
||||
lint:
|
||||
@gofmt -w . && go tool vet pkg/**/*.go && echo "$(GOLINT)"
|
||||
|
2
grafana
2
grafana
@ -1 +1 @@
|
||||
Subproject commit b3b096e204a8ad6eb2aba6b98802589ab3d1fa28
|
||||
Subproject commit adb1502e728e5a312a6e4dc680edbd1f75219ea1
|
@ -27,7 +27,8 @@ func Register(m *macaron.Macaron) {
|
||||
|
||||
// datasources
|
||||
m.Get("/admin/datasources/", auth, Index)
|
||||
m.Get("/api/admin/datasources/", auth, GetDataSources)
|
||||
m.Get("/api/admin/datasource/list", auth, GetDataSources)
|
||||
m.Post("/api/admin/datasource/add", auth, AddDataSource)
|
||||
|
||||
// user register
|
||||
m.Get("/register/*_", Index)
|
||||
|
@ -8,10 +8,26 @@ import (
|
||||
|
||||
func GetDataSources(c *middleware.Context) {
|
||||
query := m.GetDataSourcesQuery{AccountId: c.Account.Id}
|
||||
err := bus.SendQuery(&query)
|
||||
err := bus.Dispatch(&query)
|
||||
|
||||
if err != nil {
|
||||
c.JsonApiErr(500, "Failed to query datasources", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func AddDataSource(c *middleware.Context) {
|
||||
cmd := m.AddDataSourceCommand{}
|
||||
|
||||
if !c.JsonBody(&cmd) {
|
||||
c.JsonApiErr(400, "bad request", nil)
|
||||
return
|
||||
}
|
||||
|
||||
err := bus.Dispatch(&cmd)
|
||||
if err != nil {
|
||||
c.JsonApiErr(500, "Failed to add datasource", err)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,16 +6,16 @@ import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type QueryHandler interface{}
|
||||
type Query interface{}
|
||||
type HandlerFunc interface{}
|
||||
type Msg interface{}
|
||||
|
||||
type Bus interface {
|
||||
SendQuery(query Query) error
|
||||
AddQueryHandler(handler QueryHandler)
|
||||
Dispatch(msg Msg) error
|
||||
AddHandler(handler HandlerFunc)
|
||||
}
|
||||
|
||||
type InProcBus struct {
|
||||
handlerIndex map[string]QueryHandler
|
||||
handlers map[string]HandlerFunc
|
||||
}
|
||||
|
||||
// temp stuff, not sure how to handle bus instance, and init yet
|
||||
@ -23,21 +23,20 @@ var globalBus = New()
|
||||
|
||||
func New() Bus {
|
||||
bus := &InProcBus{}
|
||||
bus.handlerIndex = make(map[string]QueryHandler)
|
||||
bus.handlers = make(map[string]HandlerFunc)
|
||||
return bus
|
||||
}
|
||||
|
||||
func (b *InProcBus) SendQuery(query Query) error {
|
||||
var queryName = reflect.TypeOf(query).Elem().Name()
|
||||
fmt.Printf("sending query for type: %v\n", queryName)
|
||||
func (b *InProcBus) Dispatch(msg Msg) error {
|
||||
var msgName = reflect.TypeOf(msg).Elem().Name()
|
||||
|
||||
var handler = b.handlerIndex[queryName]
|
||||
var handler = b.handlers[msgName]
|
||||
if handler == nil {
|
||||
return errors.New("handler not found")
|
||||
|
||||
}
|
||||
|
||||
var params = make([]reflect.Value, 1)
|
||||
params[0] = reflect.ValueOf(query)
|
||||
params[0] = reflect.ValueOf(msg)
|
||||
|
||||
ret := reflect.ValueOf(handler).Call(params)
|
||||
err := ret[0].Interface()
|
||||
@ -48,18 +47,18 @@ func (b *InProcBus) SendQuery(query Query) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (b *InProcBus) AddQueryHandler(handler QueryHandler) {
|
||||
func (b *InProcBus) AddHandler(handler HandlerFunc) {
|
||||
handlerType := reflect.TypeOf(handler)
|
||||
queryTypeName := handlerType.In(0).Elem().Name()
|
||||
fmt.Printf("QueryType %v\n", queryTypeName)
|
||||
b.handlerIndex[queryTypeName] = handler
|
||||
b.handlers[queryTypeName] = handler
|
||||
}
|
||||
|
||||
// Package level functions
|
||||
func AddQueryHandler(implName string, handler QueryHandler) {
|
||||
globalBus.AddQueryHandler(handler)
|
||||
func AddHandler(implName string, handler HandlerFunc) {
|
||||
globalBus.AddHandler(handler)
|
||||
}
|
||||
|
||||
func SendQuery(query Query) error {
|
||||
return globalBus.SendQuery(query)
|
||||
func Dispatch(msg Msg) error {
|
||||
return globalBus.Dispatch(msg)
|
||||
}
|
||||
|
@ -10,14 +10,14 @@ type TestQuery struct {
|
||||
Resp string
|
||||
}
|
||||
|
||||
func TestHandlerReturnsError(t *testing.T) {
|
||||
func TestQueryHandlerReturnsError(t *testing.T) {
|
||||
bus := New()
|
||||
|
||||
bus.AddQueryHandler(func(query *TestQuery) error {
|
||||
bus.AddHandler(func(query *TestQuery) error {
|
||||
return errors.New("handler error")
|
||||
})
|
||||
|
||||
err := bus.SendQuery(&TestQuery{})
|
||||
err := bus.Dispatch(&TestQuery{})
|
||||
|
||||
if err == nil {
|
||||
t.Fatal("Send query failed " + err.Error())
|
||||
@ -26,16 +26,16 @@ func TestHandlerReturnsError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandlerReturn(t *testing.T) {
|
||||
func TestQueryHandlerReturn(t *testing.T) {
|
||||
bus := New()
|
||||
|
||||
bus.AddQueryHandler(func(q *TestQuery) error {
|
||||
bus.AddHandler(func(q *TestQuery) error {
|
||||
q.Resp = "hello from handler"
|
||||
return nil
|
||||
})
|
||||
|
||||
query := &TestQuery{}
|
||||
err := bus.SendQuery(query)
|
||||
err := bus.Dispatch(query)
|
||||
|
||||
if err != nil {
|
||||
t.Fatal("Send query failed " + err.Error())
|
||||
|
@ -1,34 +1,35 @@
|
||||
package renderer
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
func TestPhantomRender(t *testing.T) {
|
||||
|
||||
Convey("Can render url", t, func() {
|
||||
tempDir, _ := ioutil.TempDir("", "img")
|
||||
png, err := RenderToPng("http://www.google.com")
|
||||
So(err, ShouldBeNil)
|
||||
So(exists(png), ShouldEqual, true)
|
||||
|
||||
//_, err = os.Stat(store.getFilePathForDashboard("hello"))
|
||||
//So(err, ShouldBeNil)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func exists(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
if err == nil {
|
||||
return true
|
||||
}
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
//
|
||||
// import (
|
||||
// "io/ioutil"
|
||||
// "os"
|
||||
// "testing"
|
||||
//
|
||||
// . "github.com/smartystreets/goconvey/convey"
|
||||
// )
|
||||
//
|
||||
// func TestPhantomRender(t *testing.T) {
|
||||
//
|
||||
// Convey("Can render url", t, func() {
|
||||
// tempDir, _ := ioutil.TempDir("", "img")
|
||||
// ipng, err := RenderToPng("http://www.google.com")
|
||||
// So(err, ShouldBeNil)
|
||||
// So(exists(png), ShouldEqual, true)
|
||||
//
|
||||
// //_, err = os.Stat(store.getFilePathForDashboard("hello"))
|
||||
// //So(err, ShouldBeNil)
|
||||
// })
|
||||
//
|
||||
// }
|
||||
//
|
||||
// func exists(path string) bool {
|
||||
// _, err := os.Stat(path)
|
||||
// if err == nil {
|
||||
// return true
|
||||
// }
|
||||
// if os.IsNotExist(err) {
|
||||
// return false
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
|
@ -33,3 +33,13 @@ type GetDataSourcesQuery struct {
|
||||
AccountId int64
|
||||
Resp []*DataSource
|
||||
}
|
||||
|
||||
type AddDataSourceCommand struct {
|
||||
AccountId int64
|
||||
Name string
|
||||
Type DsType
|
||||
Access DsAccess
|
||||
Url string
|
||||
Password string
|
||||
User string
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/torkelo/grafana-pro/pkg/models"
|
||||
m "github.com/torkelo/grafana-pro/pkg/models"
|
||||
"github.com/torkelo/grafana-pro/pkg/setting"
|
||||
|
||||
"github.com/go-xorm/xorm"
|
||||
@ -27,18 +27,19 @@ var (
|
||||
)
|
||||
|
||||
func Init() {
|
||||
tables = append(tables, new(models.Account), new(models.Dashboard), new(models.Collaborator))
|
||||
tables = append(tables, new(m.Account), new(m.Dashboard),
|
||||
new(m.Collaborator), new(m.DataSource))
|
||||
|
||||
models.SaveAccount = SaveAccount
|
||||
models.GetAccount = GetAccount
|
||||
models.GetAccountByLogin = GetAccountByLogin
|
||||
models.GetOtherAccountsFor = GetOtherAccountsFor
|
||||
models.GetDashboard = GetDashboard
|
||||
models.SaveDashboard = SaveDashboard
|
||||
models.SearchQuery = SearchQuery
|
||||
models.DeleteDashboard = DeleteDashboard
|
||||
models.GetCollaboratorsForAccount = GetCollaboratorsForAccount
|
||||
models.AddCollaborator = AddCollaborator
|
||||
m.SaveAccount = SaveAccount
|
||||
m.GetAccount = GetAccount
|
||||
m.GetAccountByLogin = GetAccountByLogin
|
||||
m.GetOtherAccountsFor = GetOtherAccountsFor
|
||||
m.GetDashboard = GetDashboard
|
||||
m.SaveDashboard = SaveDashboard
|
||||
m.SearchQuery = SearchQuery
|
||||
m.DeleteDashboard = DeleteDashboard
|
||||
m.GetCollaboratorsForAccount = GetCollaboratorsForAccount
|
||||
m.AddCollaborator = AddCollaborator
|
||||
}
|
||||
|
||||
func LoadModelsConfig() {
|
||||
|
@ -7,9 +7,14 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
bus.AddQueryHandler("sql", GetDataSourcesQuery)
|
||||
bus.AddHandler("sql", GetDataSourcesQuery)
|
||||
bus.AddHandler("sql", AddDataSource)
|
||||
}
|
||||
|
||||
func GetDataSourcesQuery(query *m.GetDataSourcesQuery) error {
|
||||
return errors.New("Hello from query handler")
|
||||
}
|
||||
|
||||
func AddDataSource(cmd *m.AddDataSourceCommand) error {
|
||||
return errors.New("Hello from command handler")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user