annotation.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package sqlstore
  2. import (
  3. "bytes"
  4. "fmt"
  5. "strings"
  6. "github.com/grafana/grafana/pkg/services/annotations"
  7. )
  8. type SqlAnnotationRepo struct {
  9. }
  10. func (r *SqlAnnotationRepo) Save(item *annotations.Item) error {
  11. return inTransaction(func(sess *DBSession) error {
  12. if _, err := sess.Table("annotation").Insert(item); err != nil {
  13. return err
  14. }
  15. return nil
  16. })
  17. }
  18. func (r *SqlAnnotationRepo) Update(item *annotations.Item) error {
  19. return inTransaction(func(sess *DBSession) error {
  20. if _, err := sess.Table("annotation").Id(item.Id).Update(item); err != nil {
  21. return err
  22. }
  23. return nil
  24. })
  25. }
  26. func (r *SqlAnnotationRepo) Find(query *annotations.ItemQuery) ([]*annotations.Item, error) {
  27. var sql bytes.Buffer
  28. params := make([]interface{}, 0)
  29. sql.WriteString(`SELECT *
  30. from annotation
  31. `)
  32. sql.WriteString(`WHERE org_id = ?`)
  33. params = append(params, query.OrgId)
  34. if query.AlertId != 0 {
  35. sql.WriteString(` AND alert_id = ?`)
  36. params = append(params, query.AlertId)
  37. }
  38. if query.AlertId != 0 {
  39. sql.WriteString(` AND alert_id = ?`)
  40. params = append(params, query.AlertId)
  41. }
  42. if query.DashboardId != 0 {
  43. sql.WriteString(` AND dashboard_id = ?`)
  44. params = append(params, query.DashboardId)
  45. }
  46. if query.PanelId != 0 {
  47. sql.WriteString(` AND panel_id = ?`)
  48. params = append(params, query.PanelId)
  49. }
  50. if query.From > 0 && query.To > 0 {
  51. sql.WriteString(` AND epoch BETWEEN ? AND ?`)
  52. params = append(params, query.From, query.To)
  53. }
  54. if query.Type != "" {
  55. sql.WriteString(` AND type = ?`)
  56. params = append(params, string(query.Type))
  57. }
  58. if len(query.NewState) > 0 {
  59. sql.WriteString(` AND new_state IN (?` + strings.Repeat(",?", len(query.NewState)-1) + ")")
  60. for _, v := range query.NewState {
  61. params = append(params, v)
  62. }
  63. }
  64. if query.Limit == 0 {
  65. query.Limit = 10
  66. }
  67. sql.WriteString(fmt.Sprintf(" ORDER BY epoch DESC LIMIT %v", query.Limit))
  68. items := make([]*annotations.Item, 0)
  69. if err := x.Sql(sql.String(), params...).Find(&items); err != nil {
  70. return nil, err
  71. }
  72. return items, nil
  73. }
  74. func (r *SqlAnnotationRepo) Delete(params *annotations.DeleteParams) error {
  75. return inTransaction(func(sess *DBSession) error {
  76. sql := "DELETE FROM annotation WHERE dashboard_id = ? AND panel_id = ?"
  77. _, err := sess.Exec(sql, params.DashboardId, params.PanelId)
  78. if err != nil {
  79. return err
  80. }
  81. return nil
  82. })
  83. }