mirror of
https://github.com/grafana/grafana.git
synced 2025-01-06 14:13:11 -06:00
33359aee6c
I also did some mild file renaming to try and get the dashboards package closer in line with the sqlstore split design doc.
98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
"strconv"
|
|
|
|
"github.com/grafana/grafana/pkg/api/dtos"
|
|
_ "github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/services/search"
|
|
)
|
|
|
|
func (hs *HTTPServer) populateDashboardsByID(ctx context.Context, dashboardByIDs []int64, dashboardIDOrder map[int64]int) (dtos.PlaylistDashboardsSlice, error) {
|
|
result := make(dtos.PlaylistDashboardsSlice, 0)
|
|
|
|
if len(dashboardByIDs) > 0 {
|
|
dashboardQuery := models.GetDashboardsQuery{DashboardIds: dashboardByIDs}
|
|
if err := hs.dashboardService.GetDashboards(ctx, &dashboardQuery); err != nil {
|
|
return result, err
|
|
}
|
|
|
|
for _, item := range dashboardQuery.Result {
|
|
result = append(result, dtos.PlaylistDashboard{
|
|
Id: item.Id,
|
|
Slug: item.Slug,
|
|
Title: item.Title,
|
|
Uri: "db/" + item.Slug,
|
|
Url: models.GetDashboardUrl(item.Uid, item.Slug),
|
|
Order: dashboardIDOrder[item.Id],
|
|
})
|
|
}
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func (hs *HTTPServer) populateDashboardsByTag(ctx context.Context, orgID int64, signedInUser *models.SignedInUser, dashboardByTag []string, dashboardTagOrder map[string]int) dtos.PlaylistDashboardsSlice {
|
|
result := make(dtos.PlaylistDashboardsSlice, 0)
|
|
|
|
for _, tag := range dashboardByTag {
|
|
searchQuery := search.Query{
|
|
Title: "",
|
|
Tags: []string{tag},
|
|
SignedInUser: signedInUser,
|
|
Limit: 100,
|
|
IsStarred: false,
|
|
OrgId: orgID,
|
|
}
|
|
|
|
if err := hs.SearchService.SearchHandler(ctx, &searchQuery); err == nil {
|
|
for _, item := range searchQuery.Result {
|
|
result = append(result, dtos.PlaylistDashboard{
|
|
Id: item.ID,
|
|
Slug: item.Slug,
|
|
Title: item.Title,
|
|
Uri: item.URI,
|
|
Url: item.URL,
|
|
Order: dashboardTagOrder[tag],
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (hs *HTTPServer) LoadPlaylistDashboards(ctx context.Context, orgID int64, signedInUser *models.SignedInUser, playlistID int64) (dtos.PlaylistDashboardsSlice, error) {
|
|
playlistItems, _ := hs.LoadPlaylistItems(ctx, playlistID)
|
|
|
|
dashboardByIDs := make([]int64, 0)
|
|
dashboardByTag := make([]string, 0)
|
|
dashboardIDOrder := make(map[int64]int)
|
|
dashboardTagOrder := make(map[string]int)
|
|
|
|
for _, i := range playlistItems {
|
|
if i.Type == "dashboard_by_id" {
|
|
dashboardID, _ := strconv.ParseInt(i.Value, 10, 64)
|
|
dashboardByIDs = append(dashboardByIDs, dashboardID)
|
|
dashboardIDOrder[dashboardID] = i.Order
|
|
}
|
|
|
|
if i.Type == "dashboard_by_tag" {
|
|
dashboardByTag = append(dashboardByTag, i.Value)
|
|
dashboardTagOrder[i.Value] = i.Order
|
|
}
|
|
}
|
|
|
|
result := make(dtos.PlaylistDashboardsSlice, 0)
|
|
|
|
var k, _ = hs.populateDashboardsByID(ctx, dashboardByIDs, dashboardIDOrder)
|
|
result = append(result, k...)
|
|
result = append(result, hs.populateDashboardsByTag(ctx, orgID, signedInUser, dashboardByTag, dashboardTagOrder)...)
|
|
|
|
sort.Sort(result)
|
|
return result, nil
|
|
}
|