Public Dashboards: Pubdash panels get data from pubdash api (#50556)

* Public dashboard query API

* Create new API on service for building metric request

* Flesh out testing, implement BuildPublicDashboardMetricRequest

* Test for errors and missing panels

* WIP: Test for multiple datasources

* Refactor tests, add supporting code for multiple datasources

* Gets the panel data from the pubdash query api

* Adds tests to make sure we get the correct api url from retrieving panel data

* Public dashboard query API

* Create new API on service for building metric request

* Flesh out testing, implement BuildPublicDashboardMetricRequest

* Test for errors and missing panels

* WIP: Test for multiple datasources

* Refactor tests, add supporting code for multiple datasources

* Handle queries from multiple datasources

* Replace dashboard time range with pubdash time range settings

* Fix comments from review, build failure

* removes changes to DataSourceWithBackend.ts regarding getting the pubdash panel query url. Going to do this in a new class, PublicDashboardDataSource.ts

* Include pubdash Uid in dashboard meta

* Creates new PublicDashboardDataSource.ts and adds test

* Passes pubdash uid down to PanelQueryRunner.ts to a PublicDashboardDatasource can be chosen when were looking at a public dashboard

* removes comment

* checks for error when unmarshalling json

* Only replace dashboard time settings with pubdash time settings when pubdash time settings exist

* formatting and added comment

Co-authored-by: Jesse Weaver <jesse.weaver@grafana.com>
Co-authored-by: Jeff Levin <jeff@levinology.com>
This commit is contained in:
owensmallwood
2022-06-13 18:03:43 -06:00
committed by GitHub
parent 0371884cdd
commit 1bb2d2599c
13 changed files with 199 additions and 20 deletions

View File

@@ -25,7 +25,16 @@ func (dr *DashboardServiceImpl) GetPublicDashboard(ctx context.Context, dashboar
return nil, models.ErrPublicDashboardNotFound
}
// FIXME maybe insert logic to substitute pdc.TimeSettings into d
// Replace dashboard time range with pubdash time range
if pdc.TimeSettings != "" {
var pdcTimeSettings map[string]interface{}
err = json.Unmarshal([]byte(pdc.TimeSettings), &pdcTimeSettings)
if err != nil {
return nil, err
}
d.Data.Set("time", pdcTimeSettings)
}
return d, nil
}

View File

@@ -36,6 +36,19 @@ func TestGetPublicDashboard(t *testing.T) {
errResp: nil,
dashResp: &models.Dashboard{IsPublic: true},
},
{
name: "puts pubdash time settings into dashboard",
uid: "abc123",
storeResp: &storeResp{
pd: &models.PublicDashboard{TimeSettings: `{"from": "now-8", "to": "now"}`},
d: &models.Dashboard{
IsPublic: true,
Data: simplejson.NewFromAny(map[string]interface{}{"time": map[string]interface{}{"from": "abc", "to": "123"}}),
},
err: nil},
errResp: nil,
dashResp: &models.Dashboard{IsPublic: true, Data: simplejson.NewFromAny(map[string]interface{}{"time": map[string]interface{}{"from": "now-8", "to": "now"}})},
},
{
name: "returns ErrPublicDashboardNotFound when isPublic is false",
uid: "abc123",
@@ -224,6 +237,7 @@ func TestBuildPublicDashboardMetricRequest(t *testing.T) {
pdc.PublicDashboard.Uid,
49,
)
require.ErrorContains(t, err, "Panel not found")
})

View File

@@ -354,6 +354,10 @@ func (dr *DashboardServiceImpl) DeleteDashboard(ctx context.Context, dashboardId
return dr.deleteDashboard(ctx, dashboardId, orgId, true)
}
func (dr *DashboardServiceImpl) GetDashboardByPublicUid(ctx context.Context, dashboardPublicUid string) (*models.Dashboard, error) {
return nil, nil
}
func (dr *DashboardServiceImpl) MakeUserAdmin(ctx context.Context, orgID int64, userID int64, dashboardID int64, setViewAndEditPermissions bool) error {
rtEditor := models.ROLE_EDITOR
rtViewer := models.ROLE_VIEWER

View File

@@ -444,6 +444,10 @@ func (s *dashboardServiceMock) DeleteDashboard(_ context.Context, dashboardId in
return nil
}
func (s *dashboardServiceMock) GetDashboardByPublicUid(ctx context.Context, dashboardPublicUid string) (*models.Dashboard, error) {
return nil, nil
}
type scenarioInput struct {
storedPluginSettings []*pluginsettings.DTO
installedPlugins []plugins.PluginDTO