playlist_play.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package api
  2. import (
  3. "sort"
  4. "strconv"
  5. "github.com/grafana/grafana/pkg/api/dtos"
  6. "github.com/grafana/grafana/pkg/bus"
  7. _ "github.com/grafana/grafana/pkg/infra/log"
  8. m "github.com/grafana/grafana/pkg/models"
  9. "github.com/grafana/grafana/pkg/services/search"
  10. )
  11. func populateDashboardsByID(dashboardByIDs []int64, dashboardIDOrder map[int64]int) (dtos.PlaylistDashboardsSlice, error) {
  12. result := make(dtos.PlaylistDashboardsSlice, 0)
  13. if len(dashboardByIDs) > 0 {
  14. dashboardQuery := m.GetDashboardsQuery{DashboardIds: dashboardByIDs}
  15. if err := bus.Dispatch(&dashboardQuery); err != nil {
  16. return result, err
  17. }
  18. for _, item := range dashboardQuery.Result {
  19. result = append(result, dtos.PlaylistDashboard{
  20. Id: item.Id,
  21. Slug: item.Slug,
  22. Title: item.Title,
  23. Uri: "db/" + item.Slug,
  24. Url: m.GetDashboardUrl(item.Uid, item.Slug),
  25. Order: dashboardIDOrder[item.Id],
  26. })
  27. }
  28. }
  29. return result, nil
  30. }
  31. func populateDashboardsByTag(orgID int64, signedInUser *m.SignedInUser, dashboardByTag []string, dashboardTagOrder map[string]int) dtos.PlaylistDashboardsSlice {
  32. result := make(dtos.PlaylistDashboardsSlice, 0)
  33. for _, tag := range dashboardByTag {
  34. searchQuery := search.Query{
  35. Title: "",
  36. Tags: []string{tag},
  37. SignedInUser: signedInUser,
  38. Limit: 100,
  39. IsStarred: false,
  40. OrgId: orgID,
  41. }
  42. if err := bus.Dispatch(&searchQuery); err == nil {
  43. for _, item := range searchQuery.Result {
  44. result = append(result, dtos.PlaylistDashboard{
  45. Id: item.Id,
  46. Slug: item.Slug,
  47. Title: item.Title,
  48. Uri: item.Uri,
  49. Url: item.Url,
  50. Order: dashboardTagOrder[tag],
  51. })
  52. }
  53. }
  54. }
  55. return result
  56. }
  57. func LoadPlaylistDashboards(orgID int64, signedInUser *m.SignedInUser, playlistID int64) (dtos.PlaylistDashboardsSlice, error) {
  58. playlistItems, _ := LoadPlaylistItems(playlistID)
  59. dashboardByIDs := make([]int64, 0)
  60. dashboardByTag := make([]string, 0)
  61. dashboardIDOrder := make(map[int64]int)
  62. dashboardTagOrder := make(map[string]int)
  63. for _, i := range playlistItems {
  64. if i.Type == "dashboard_by_id" {
  65. dashboardID, _ := strconv.ParseInt(i.Value, 10, 64)
  66. dashboardByIDs = append(dashboardByIDs, dashboardID)
  67. dashboardIDOrder[dashboardID] = i.Order
  68. }
  69. if i.Type == "dashboard_by_tag" {
  70. dashboardByTag = append(dashboardByTag, i.Value)
  71. dashboardTagOrder[i.Value] = i.Order
  72. }
  73. }
  74. result := make(dtos.PlaylistDashboardsSlice, 0)
  75. var k, _ = populateDashboardsByID(dashboardByIDs, dashboardIDOrder)
  76. result = append(result, k...)
  77. result = append(result, populateDashboardsByTag(orgID, signedInUser, dashboardByTag, dashboardTagOrder)...)
  78. sort.Sort(result)
  79. return result, nil
  80. }