playlist_play.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. if len(dashboardByTag) > 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. }
  54. return result
  55. }
  56. func LoadPlaylistDashboards(orgId int64, signedInUser *m.SignedInUser, playlistId int64) (dtos.PlaylistDashboardsSlice, error) {
  57. playlistItems, _ := LoadPlaylistItems(playlistId)
  58. dashboardByIds := make([]int64, 0)
  59. dashboardByTag := make([]string, 0)
  60. dashboardIdOrder := make(map[int64]int)
  61. dashboardTagOrder := make(map[string]int)
  62. for _, i := range playlistItems {
  63. if i.Type == "dashboard_by_id" {
  64. dashboardId, _ := strconv.ParseInt(i.Value, 10, 64)
  65. dashboardByIds = append(dashboardByIds, dashboardId)
  66. dashboardIdOrder[dashboardId] = i.Order
  67. }
  68. if i.Type == "dashboard_by_tag" {
  69. dashboardByTag = append(dashboardByTag, i.Value)
  70. dashboardTagOrder[i.Value] = i.Order
  71. }
  72. }
  73. result := make(dtos.PlaylistDashboardsSlice, 0)
  74. var k, _ = populateDashboardsById(dashboardByIds, dashboardIdOrder)
  75. result = append(result, k...)
  76. result = append(result, populateDashboardsByTag(orgId, signedInUser, dashboardByTag, dashboardTagOrder)...)
  77. sort.Sort(result)
  78. return result, nil
  79. }