playlist_play.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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/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. Title: item.Title,
  47. Uri: item.Uri,
  48. Order: dashboardTagOrder[tag],
  49. })
  50. }
  51. }
  52. }
  53. return result
  54. }
  55. func LoadPlaylistDashboards(orgID int64, signedInUser *m.SignedInUser, playlistID int64) (dtos.PlaylistDashboardsSlice, error) {
  56. playlistItems, _ := LoadPlaylistItems(playlistID)
  57. dashboardByIDs := make([]int64, 0)
  58. dashboardByTag := make([]string, 0)
  59. dashboardIDOrder := make(map[int64]int)
  60. dashboardTagOrder := make(map[string]int)
  61. for _, i := range playlistItems {
  62. if i.Type == "dashboard_by_id" {
  63. dashboardID, _ := strconv.ParseInt(i.Value, 10, 64)
  64. dashboardByIDs = append(dashboardByIDs, dashboardID)
  65. dashboardIDOrder[dashboardID] = i.Order
  66. }
  67. if i.Type == "dashboard_by_tag" {
  68. dashboardByTag = append(dashboardByTag, i.Value)
  69. dashboardTagOrder[i.Value] = i.Order
  70. }
  71. }
  72. result := make(dtos.PlaylistDashboardsSlice, 0)
  73. var k, _ = populateDashboardsByID(dashboardByIDs, dashboardIDOrder)
  74. result = append(result, k...)
  75. result = append(result, populateDashboardsByTag(orgID, signedInUser, dashboardByTag, dashboardTagOrder)...)
  76. sort.Sort(result)
  77. return result, nil
  78. }