playlist_play.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. Order: dashboardIDOrder[item.Id],
  25. })
  26. }
  27. }
  28. return result, nil
  29. }
  30. func populateDashboardsByTag(orgID int64, signedInUser *m.SignedInUser, dashboardByTag []string, dashboardTagOrder map[string]int) dtos.PlaylistDashboardsSlice {
  31. result := make(dtos.PlaylistDashboardsSlice, 0)
  32. for _, tag := range dashboardByTag {
  33. searchQuery := search.Query{
  34. Title: "",
  35. Tags: []string{tag},
  36. SignedInUser: signedInUser,
  37. Limit: 100,
  38. IsStarred: false,
  39. OrgId: orgID,
  40. }
  41. if err := bus.Dispatch(&searchQuery); err == nil {
  42. for _, item := range searchQuery.Result {
  43. result = append(result, dtos.PlaylistDashboard{
  44. Id: item.Id,
  45. Title: item.Title,
  46. Uri: item.Uri,
  47. Order: dashboardTagOrder[tag],
  48. })
  49. }
  50. }
  51. }
  52. return result
  53. }
  54. func LoadPlaylistDashboards(orgID int64, signedInUser *m.SignedInUser, playlistID int64) (dtos.PlaylistDashboardsSlice, error) {
  55. playlistItems, _ := LoadPlaylistItems(playlistID)
  56. dashboardByIDs := make([]int64, 0)
  57. dashboardByTag := make([]string, 0)
  58. dashboardIDOrder := make(map[int64]int)
  59. dashboardTagOrder := make(map[string]int)
  60. for _, i := range playlistItems {
  61. if i.Type == "dashboard_by_id" {
  62. dashboardID, _ := strconv.ParseInt(i.Value, 10, 64)
  63. dashboardByIDs = append(dashboardByIDs, dashboardID)
  64. dashboardIDOrder[dashboardID] = i.Order
  65. }
  66. if i.Type == "dashboard_by_tag" {
  67. dashboardByTag = append(dashboardByTag, i.Value)
  68. dashboardTagOrder[i.Value] = i.Order
  69. }
  70. }
  71. result := make(dtos.PlaylistDashboardsSlice, 0)
  72. var k, _ = populateDashboardsByID(dashboardByIDs, dashboardIDOrder)
  73. result = append(result, k...)
  74. result = append(result, populateDashboardsByTag(orgID, signedInUser, dashboardByTag, dashboardTagOrder)...)
  75. sort.Sort(result)
  76. return result, nil
  77. }