diff --git a/docs/sources/reference/http_api.md b/docs/sources/reference/http_api.md index 5ffd03c4111..70431565741 100644 --- a/docs/sources/reference/http_api.md +++ b/docs/sources/reference/http_api.md @@ -70,15 +70,13 @@ Creates a new dashboard or updates an existing dashboard. "schemaVersion": 6, "version": 0 }, - "overwrite": false, - "userId:": 3 + "overwrite": false } JSON Body schema: - **dashboard** – The complete dashboard model, id = null to create a new dashboard. - **overwrite** – Set to true if you want to overwrite existing dashboard with newer version or with same dashboard title. -- **userId** - Set userId if you want to record who created or updated a dashboard. **Example Response**: diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 8bcb7fc6b74..cc635a108e3 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -49,7 +49,7 @@ func GetDashboard(c *middleware.Context) { dash := query.Result - // Finding the last creator and updater of the dashboard + // Finding creator and last updater of the dashboard updater, creator := "Anonymous", "Anonymous" if dash.UpdatedBy > 0 { updater = getUserLogin(dash.UpdatedBy) @@ -58,19 +58,26 @@ func GetDashboard(c *middleware.Context) { creator = getUserLogin(dash.CreatedBy) } + // Finding total panels and queries on the dashboard + totalRows, totalPanels, totalQueries := getTotalRowsPanelsAndQueries(dash.Data) + dto := dtos.DashboardFullWithMeta{ Dashboard: dash.Data, Meta: dtos.DashboardMeta{ - IsStarred: isStarred, - Slug: slug, - Type: m.DashTypeDB, - CanStar: c.IsSignedIn, - CanSave: c.OrgRole == m.ROLE_ADMIN || c.OrgRole == m.ROLE_EDITOR, - CanEdit: canEditDashboard(c.OrgRole), - Created: dash.Created, - Updated: dash.Updated, - UpdatedBy: updater, - CreatedBy: creator, + IsStarred: isStarred, + Slug: slug, + Type: m.DashTypeDB, + CanStar: c.IsSignedIn, + CanSave: c.OrgRole == m.ROLE_ADMIN || c.OrgRole == m.ROLE_EDITOR, + CanEdit: canEditDashboard(c.OrgRole), + Created: dash.Created, + Updated: dash.Updated, + UpdatedBy: updater, + CreatedBy: creator, + TotalRows: totalRows, + TotalPanels: totalPanels, + TotalQueries: totalQueries, + Version: dash.Version, }, } @@ -88,6 +95,26 @@ func getUserLogin(userId int64) string { } } +func getTotalRowsPanelsAndQueries(data map[string]interface{}) (int, int, int) { + totalRows, totalPanels, totalQueries := 0, 0, 0 + if rows, rowsOk := data["rows"]; rowsOk { + totalRows = len(rows.([]interface{})) + if totalRows > 0 { + for _, rowElement := range rows.([]interface{}) { + if panels, panelsOk := rowElement.(map[string]interface{})["panels"]; panelsOk { + totalPanels += len(panels.([]interface{})) + for _, panelElement := range panels.([]interface{}) { + if targets, targetsOk := panelElement.(map[string]interface{})["targets"]; targetsOk { + totalQueries += len(targets.([]interface{})) + } + } + } + } + } + } + return totalRows, totalPanels, totalQueries +} + func DeleteDashboard(c *middleware.Context) { slug := c.Params(":slug") diff --git a/pkg/api/dtos/models.go b/pkg/api/dtos/models.go index 4617f89d3c9..5fe23b4a53e 100644 --- a/pkg/api/dtos/models.go +++ b/pkg/api/dtos/models.go @@ -43,10 +43,10 @@ type DashboardMeta struct { Updated time.Time `json:"updated"` UpdatedBy string `json:"updatedBy"` CreatedBy string `json:"createdBy"` - TotalRows int64 `json:"totalRows"` - TotalPanels int64 `json:"totalPanels"` - TotalQueries int64 `json:"totalQueries"` - Version int `json:"version"` + TotalRows int `json:"totalRows"` + TotalPanels int `json:"totalPanels"` + TotalQueries int `json:"totalQueries"` + Version int `json:"version"` } type DashboardFullWithMeta struct {