Kaynağa Gözat

Implemented GetDataSourceIdByName API

utkarshcmu 9 yıl önce
ebeveyn
işleme
4fbff99186

+ 21 - 1
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`

+ 3 - 1
pkg/api/api.go

@@ -171,9 +171,11 @@ 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))
+			r.Get("/name/:name", wrap(GetDataSourceByName))
 		}, reqOrgAdmin)
 
+		r.Get("/datasources/id/:name", wrap(GetDataSourceIdByName), reqSignedIn)
+
 		r.Get("/frontend/settings/", GetFrontendSettings)
 		r.Any("/datasources/proxy/:id/*", reqSignedIn, ProxyDataSourceRequest)
 		r.Any("/datasources/proxy/:id", reqSignedIn, ProxyDataSourceRequest)

+ 19 - 0
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,

+ 4 - 0
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"`