The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
grafana/pkg/services/sqlstore/playlist.go

181 lines
3.6 KiB

package sqlstore
import (
"fmt"
"github.com/go-xorm/xorm"
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
)
func init() {
bus.AddHandler("sql", CreatePlaylist)
bus.AddHandler("sql", UpdatePlaylist)
bus.AddHandler("sql", DeletePlaylist)
bus.AddHandler("sql", SearchPlaylists)
bus.AddHandler("sql", GetPlaylist)
bus.AddHandler("sql", GetPlaylistDashboards)
bus.AddHandler("sql", GetPlaylistItem)
}
func CreatePlaylist(query *m.CreatePlaylistQuery) error {
var err error
playlist := m.Playlist{
Title: query.Title,
Timespan: query.Timespan,
OrgId: query.OrgId,
}
_, err = x.Insert(&playlist)
fmt.Printf("%v", playlist.Id)
playlistItems := make([]m.PlaylistItem, 0)
for _, item := range query.Items {
playlistItems = append(playlistItems, m.PlaylistItem{
PlaylistId: playlist.Id,
Type: item.Type,
Value: item.Value,
Order: item.Order,
Title: item.Title,
})
}
_, err = x.Insert(&playlistItems)
query.Result = &playlist
return err
}
func UpdatePlaylist(query *m.UpdatePlaylistQuery) error {
var err error
x.Logger.SetLevel(5)
playlist := m.Playlist{
Id: query.Id,
Title: query.Title,
Timespan: query.Timespan,
}
existingPlaylist := x.Where("id = ?", query.Id).Find(m.Playlist{})
if existingPlaylist == nil {
return m.ErrPlaylistNotFound
}
query.Result = &m.PlaylistDTO{
Id: playlist.Id,
OrgId: playlist.OrgId,
Title: playlist.Title,
Timespan: playlist.Timespan,
}
_, err = x.Id(query.Id).Cols("id", "title", "timespan").Update(&playlist)
if err != nil {
return err
}
rawSql := "DELETE FROM playlist_item WHERE playlist_id = ?"
_, err = x.Exec(rawSql, query.Id)
if err != nil {
return err
}
playlistItems := make([]m.PlaylistItem, 0)
for _, item := range query.Items {
playlistItems = append(playlistItems, m.PlaylistItem{
PlaylistId: playlist.Id,
Type: item.Type,
Value: item.Value,
Order: item.Order,
Title: item.Title,
})
}
_, err = x.Insert(&playlistItems)
return err
}
func GetPlaylist(query *m.GetPlaylistByIdQuery) error {
if query.Id == 0 {
return m.ErrCommandValidationFailed
}
playlist := m.Playlist{}
_, err := x.Id(query.Id).Get(&playlist)
query.Result = &playlist
return err
}
func DeletePlaylist(query *m.DeletePlaylistQuery) error {
if query.Id == 0 {
return m.ErrCommandValidationFailed
}
return inTransaction(func(sess *xorm.Session) error {
var rawPlaylistSql = "DELETE FROM playlist WHERE id = ?"
_, err := sess.Exec(rawPlaylistSql, query.Id)
if err != nil {
return err
}
var rawItemSql = "DELETE FROM playlist_item WHERE playlist_id = ?"
_, err2 := sess.Exec(rawItemSql, query.Id)
return err2
})
}
func SearchPlaylists(query *m.PlaylistQuery) error {
var playlists = make(m.Playlists, 0)
sess := x.Limit(query.Limit)
if query.Title != "" {
sess.Where("title LIKE ?", query.Title)
}
sess.Where("org_id = ?", query.OrgId)
err := sess.Find(&playlists)
query.Result = playlists
return err
}
func GetPlaylistItem(query *m.GetPlaylistItemsByIdQuery) error {
if query.PlaylistId == 0 {
return m.ErrCommandValidationFailed
}
var playlistItems = make([]m.PlaylistItem, 0)
err := x.Where("playlist_id=?", query.PlaylistId).Find(&playlistItems)
query.Result = &playlistItems
return err
}
func GetPlaylistDashboards(query *m.GetPlaylistDashboardsQuery) error {
if len(query.DashboardIds) == 0 {
return m.ErrCommandValidationFailed
}
var dashboards = make(m.PlaylistDashboards, 0)
err := x.In("id", query.DashboardIds).Find(&dashboards)
query.Result = &dashboards
if err != nil {
return err
}
return nil
}