diff --git a/Godeps/_workspace/src/github.com/go-xorm/core/mapper.go b/Godeps/_workspace/src/github.com/go-xorm/core/mapper.go index c00dc395211..3cc4735eb63 100644 --- a/Godeps/_workspace/src/github.com/go-xorm/core/mapper.go +++ b/Godeps/_workspace/src/github.com/go-xorm/core/mapper.go @@ -151,6 +151,7 @@ func (mapper SnakeMapper) Table2Obj(name string) string { func (mapper SnakeMapper) TableName(t string) string { return t } + // provide prefix table name support type PrefixMapper struct { Mapper IMapper diff --git a/Godeps/_workspace/src/github.com/mattn/go-sqlite3/doc.go b/Godeps/_workspace/src/github.com/mattn/go-sqlite3/doc.go index 51364c3c700..e7c06244393 100644 --- a/Godeps/_workspace/src/github.com/mattn/go-sqlite3/doc.go +++ b/Godeps/_workspace/src/github.com/mattn/go-sqlite3/doc.go @@ -33,7 +33,7 @@ extension for Regexp matcher operation. #include #include #include - + SQLITE_EXTENSION_INIT1 static void regexp_func(sqlite3_context *context, int argc, sqlite3_value **argv) { if (argc >= 2) { @@ -44,7 +44,7 @@ extension for Regexp matcher operation. int vec[500]; int n, rc; pcre* re = pcre_compile(pattern, 0, &errstr, &erroff, NULL); - rc = pcre_exec(re, NULL, target, strlen(target), 0, 0, vec, 500); + rc = pcre_exec(re, NULL, target, strlen(target), 0, 0, vec, 500); if (rc <= 0) { sqlite3_result_error(context, errstr, 0); return; @@ -52,7 +52,7 @@ extension for Regexp matcher operation. sqlite3_result_int(context, 1); } } - + #ifdef _WIN32 __declspec(dllexport) #endif diff --git a/Godeps/_workspace/src/github.com/mattn/go-sqlite3/sqlite3_test/sqltest.go b/Godeps/_workspace/src/github.com/mattn/go-sqlite3/sqlite3_test/sqltest.go index fc82782cd6e..782e15fa9d5 100644 --- a/Godeps/_workspace/src/github.com/mattn/go-sqlite3/sqlite3_test/sqltest.go +++ b/Godeps/_workspace/src/github.com/mattn/go-sqlite3/sqlite3_test/sqltest.go @@ -318,7 +318,7 @@ func BenchmarkQuery(b *testing.B) { var i int var f float64 var s string -// var t time.Time + // var t time.Time if err := db.QueryRow("select null, 1, 1.1, 'foo'").Scan(&n, &i, &f, &s); err != nil { panic(err) } @@ -331,7 +331,7 @@ func BenchmarkParams(b *testing.B) { var i int var f float64 var s string -// var t time.Time + // var t time.Time if err := db.QueryRow("select ?, ?, ?, ?", nil, 1, 1.1, "foo").Scan(&n, &i, &f, &s); err != nil { panic(err) } @@ -350,7 +350,7 @@ func BenchmarkStmt(b *testing.B) { var i int var f float64 var s string -// var t time.Time + // var t time.Time if err := st.QueryRow(nil, 1, 1.1, "foo").Scan(&n, &i, &f, &s); err != nil { panic(err) } diff --git a/grafana b/grafana index 373118c5eec..b3b096e204a 160000 --- a/grafana +++ b/grafana @@ -1 +1 @@ -Subproject commit 373118c5eecc5c3645254cb4b862124b55dae980 +Subproject commit b3b096e204a8ad6eb2aba6b98802589ab3d1fa28 diff --git a/pkg/api/api.go b/pkg/api/api.go index 8f2a5d59787..862b21aa3a2 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -25,6 +25,10 @@ func Register(m *macaron.Macaron) { m.Post("/api/account/using/:id", auth, SetUsingAccount) m.Get("/api/account/others", auth, GetOtherAccounts) + // datasources + m.Get("/admin/datasources/", auth, Index) + m.Get("/api/admin/datasources/", auth, GetDataSources) + // user register m.Get("/register/*_", Index) m.Post("/api/account", CreateAccount) diff --git a/pkg/api/api_datasources.go b/pkg/api/api_datasources.go new file mode 100644 index 00000000000..f238cc981f4 --- /dev/null +++ b/pkg/api/api_datasources.go @@ -0,0 +1,17 @@ +package api + +import ( + "github.com/torkelo/grafana-pro/pkg/bus" + "github.com/torkelo/grafana-pro/pkg/middleware" + m "github.com/torkelo/grafana-pro/pkg/models" +) + +func GetDataSources(c *middleware.Context) { + query := m.GetDataSourcesQuery{AccountId: c.Account.Id} + err := bus.SendQuery(&query) + + if err != nil { + c.JsonApiErr(500, "Failed to query datasources", err) + return + } +} diff --git a/pkg/bus/bus.go b/pkg/bus/bus.go index ceca947959f..8bdaee27212 100644 --- a/pkg/bus/bus.go +++ b/pkg/bus/bus.go @@ -18,6 +18,9 @@ type InProcBus struct { handlerIndex map[string]QueryHandler } +// temp stuff, not sure how to handle bus instance, and init yet +var globalBus = New() + func New() Bus { bus := &InProcBus{} bus.handlerIndex = make(map[string]QueryHandler) @@ -51,3 +54,12 @@ func (b *InProcBus) AddQueryHandler(handler QueryHandler) { fmt.Printf("QueryType %v\n", queryTypeName) b.handlerIndex[queryTypeName] = handler } + +// Package level functions +func AddQueryHandler(implName string, handler QueryHandler) { + globalBus.AddQueryHandler(handler) +} + +func SendQuery(query Query) error { + return globalBus.SendQuery(query) +} diff --git a/pkg/bus/bus_test.go b/pkg/bus/bus_test.go index 457aa48188b..3d9d94f0117 100644 --- a/pkg/bus/bus_test.go +++ b/pkg/bus/bus_test.go @@ -20,7 +20,7 @@ func TestHandlerReturnsError(t *testing.T) { err := bus.SendQuery(&TestQuery{}) if err == nil { - t.Fatal("Send query failed %v", err) + t.Fatal("Send query failed " + err.Error()) } else { t.Log("Handler error received ok") } @@ -38,7 +38,7 @@ func TestHandlerReturn(t *testing.T) { err := bus.SendQuery(query) if err != nil { - t.Fatal("Send query failed %v", err) + t.Fatal("Send query failed " + err.Error()) } else if query.Resp != "hello from handler" { t.Fatal("Failed to get response from handler") } diff --git a/pkg/dto/queries.go b/pkg/dto/queries.go deleted file mode 100644 index 002189d55db..00000000000 --- a/pkg/dto/queries.go +++ /dev/null @@ -1,9 +0,0 @@ -package dto - -type GetDashboardQuery struct { - Id int64 - Resp GetDashboardQueryResp -} - -type GetDashboardQueryResp struct { -} diff --git a/pkg/middleware/logger.go b/pkg/middleware/logger.go index fce0f6b8349..e3da83d836b 100644 --- a/pkg/middleware/logger.go +++ b/pkg/middleware/logger.go @@ -46,8 +46,8 @@ func Logger() macaron.Handler { content = fmt.Sprintf("\033[1;32m%s\033[0m", content) return case 304: + //content = fmt.Sprintf("\033[1;33m%s\033[0m", content) return - content = fmt.Sprintf("\033[1;33m%s\033[0m", content) case 404: content = fmt.Sprintf("\033[1;31m%s\033[0m", content) case 500: diff --git a/pkg/middleware/middleware.go b/pkg/middleware/middleware.go index a2a7d6ba01d..3d82e098423 100644 --- a/pkg/middleware/middleware.go +++ b/pkg/middleware/middleware.go @@ -9,6 +9,7 @@ import ( "github.com/torkelo/grafana-pro/pkg/log" "github.com/torkelo/grafana-pro/pkg/models" + "github.com/torkelo/grafana-pro/pkg/setting" ) type Context struct { @@ -60,8 +61,8 @@ func (ctx *Context) JsonApiErr(status int, message string, err error) { if err != nil { log.Error(4, "%s: %v", message, err) - if macaron.Env != macaron.PROD { - resp["error"] = err + if setting.Env != setting.PROD { + resp["error"] = err.Error() } } diff --git a/pkg/models/datasource.go b/pkg/models/datasource.go new file mode 100644 index 00000000000..8dc02962075 --- /dev/null +++ b/pkg/models/datasource.go @@ -0,0 +1,35 @@ +package models + +import "time" + +const ( + DS_GRAPHITE = "GRAPHITE" + DS_INFLUXDB = "INFLUXDB" + DS_ES = "ES" + DS_ACESSS_DIRECT = "DIRECT" + DS_ACESSS_PROXY = "PROXY" +) + +type DsType string +type DsAccess string + +type DataSource struct { + Id int64 + AccountId int64 + + Name string + Type DsType + Access DsAccess + Url string + Password string + User string + BasicAuth bool + + Created time.Time + Updated time.Time +} + +type GetDataSourcesQuery struct { + AccountId int64 + Resp []*DataSource +} diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 33b9a608fbc..a8285e0472d 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -25,8 +25,15 @@ const ( HTTPS Scheme = "https" ) +const ( + DEV string = "development" + PROD string = "production" + TEST string = "test" +) + var ( // App settings. + Env string = DEV AppVer string AppName string AppUrl string diff --git a/pkg/stores/sqlstore/sqlstore_datasource.go b/pkg/stores/sqlstore/sqlstore_datasource.go new file mode 100644 index 00000000000..b3162c099a5 --- /dev/null +++ b/pkg/stores/sqlstore/sqlstore_datasource.go @@ -0,0 +1,15 @@ +package sqlstore + +import ( + "errors" + "github.com/torkelo/grafana-pro/pkg/bus" + m "github.com/torkelo/grafana-pro/pkg/models" +) + +func init() { + bus.AddQueryHandler("sql", GetDataSourcesQuery) +} + +func GetDataSourcesQuery(query *m.GetDataSourcesQuery) error { + return errors.New("Hello from query handler") +}