diff --git a/docs/sources/http_api/data_source.md b/docs/sources/http_api/data_source.md index f60c9cd7000..2a3c20e9af8 100644 --- a/docs/sources/http_api/data_source.md +++ b/docs/sources/http_api/data_source.md @@ -74,7 +74,7 @@ page_keywords: grafana, admin, http, api, documentation, datasource "jsonData":null } -## Get a single data sources by Name +## Get a single data source by Name `GET /api/datasources/name/:name` @@ -107,6 +107,26 @@ page_keywords: grafana, admin, http, api, documentation, datasource "jsonData":null } +## Get data source Id by Name + +`GET /api/datasources/id/:name` + +**Example Request**: + + GET /api/datasources/id/test_datasource HTTP/1.1 + Accept: application/json + Content-Type: application/json + Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk + +**Example Response**: + + HTTP/1.1 200 + Content-Type: application/json + + { + "id":1 + } + ## Create data source `POST /api/datasources` diff --git a/pkg/api/api.go b/pkg/api/api.go index 0915bbd678d..793703153e1 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -171,11 +171,10 @@ func Register(r *macaron.Macaron) { r.Put("/:id", bind(m.UpdateDataSourceCommand{}), UpdateDataSource) r.Delete("/:id", DeleteDataSource) r.Get("/:id", wrap(GetDataSourceById)) + r.Get("/name/:name", wrap(GetDataSourceByName)) }, reqOrgAdmin) - r.Group("/datasources/name/:name", func() { - r.Get("/", wrap(GetDataSourceByName)) - }, reqOrgAdmin) + r.Get("/datasources/id/:name", wrap(GetDataSourceIdByName), reqSignedIn) r.Get("/frontend/settings/", GetFrontendSettings) r.Any("/datasources/proxy/:id/*", reqSignedIn, ProxyDataSourceRequest) diff --git a/pkg/api/datasources.go b/pkg/api/datasources.go index a156d10f098..0982d73e88e 100644 --- a/pkg/api/datasources.go +++ b/pkg/api/datasources.go @@ -116,6 +116,25 @@ func GetDataSourceByName(c *middleware.Context) Response { return Json(200, &dtos) } +// Get /api/datasources/id/:name +func GetDataSourceIdByName(c *middleware.Context) Response { + query := m.GetDataSourceByNameQuery{Name: c.Params(":name"), OrgId: c.OrgId} + + if err := bus.Dispatch(&query); err != nil { + if err == m.ErrDataSourceNotFound { + return ApiError(404, "Data source not found", nil) + } + return ApiError(500, "Failed to query datasources", err) + } + + ds := query.Result + dtos := dtos.AnyId{ + Id: ds.Id, + } + + return Json(200, &dtos) +} + func convertModelToDtos(ds m.DataSource) dtos.DataSource { return dtos.DataSource{ Id: ds.Id, diff --git a/pkg/api/dtos/models.go b/pkg/api/dtos/models.go index b810701233e..36e51fdc28a 100644 --- a/pkg/api/dtos/models.go +++ b/pkg/api/dtos/models.go @@ -10,6 +10,10 @@ import ( "github.com/grafana/grafana/pkg/setting" ) +type AnyId struct { + Id int64 `json:"id"` +} + type LoginCommand struct { User string `json:"user" binding:"Required"` Password string `json:"password" binding:"Required"`