2016-08-01 03:07:00 -05:00
|
|
|
package sqlstore
|
|
|
|
|
|
|
|
import (
|
2016-08-30 02:32:56 -05:00
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
|
2016-08-01 03:07:00 -05:00
|
|
|
"github.com/go-xorm/xorm"
|
|
|
|
"github.com/grafana/grafana/pkg/services/annotations"
|
|
|
|
)
|
|
|
|
|
|
|
|
type SqlAnnotationRepo struct {
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *SqlAnnotationRepo) Save(item *annotations.Item) error {
|
|
|
|
return inTransaction(func(sess *xorm.Session) error {
|
|
|
|
|
|
|
|
if _, err := sess.Table("annotation").Insert(item); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
})
|
2016-08-30 02:32:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r *SqlAnnotationRepo) Find(query *annotations.ItemQuery) ([]*annotations.Item, error) {
|
|
|
|
var sql bytes.Buffer
|
|
|
|
params := make([]interface{}, 0)
|
|
|
|
|
|
|
|
sql.WriteString(`SELECT *
|
|
|
|
from annotation
|
|
|
|
`)
|
|
|
|
|
|
|
|
sql.WriteString(`WHERE org_id = ?`)
|
|
|
|
params = append(params, query.OrgId)
|
|
|
|
|
|
|
|
if query.AlertId != 0 {
|
|
|
|
sql.WriteString(` AND alert_id = ?`)
|
|
|
|
params = append(params, query.AlertId)
|
|
|
|
}
|
|
|
|
|
2016-09-09 04:30:55 -05:00
|
|
|
if query.AlertId != 0 {
|
|
|
|
sql.WriteString(` AND alert_id = ?`)
|
|
|
|
params = append(params, query.AlertId)
|
|
|
|
}
|
|
|
|
|
|
|
|
if query.DashboardId != 0 {
|
|
|
|
sql.WriteString(` AND dashboard_id = ?`)
|
|
|
|
params = append(params, query.DashboardId)
|
|
|
|
}
|
|
|
|
|
|
|
|
if query.PanelId != 0 {
|
|
|
|
sql.WriteString(` AND panel_id = ?`)
|
|
|
|
params = append(params, query.PanelId)
|
|
|
|
}
|
|
|
|
|
2016-09-13 09:13:41 -05:00
|
|
|
if query.From > 0 && query.To > 0 {
|
|
|
|
sql.WriteString(` AND epoch BETWEEN ? AND ?`)
|
|
|
|
params = append(params, query.From, query.To)
|
|
|
|
}
|
2016-09-08 04:25:45 -05:00
|
|
|
|
2016-08-30 02:32:56 -05:00
|
|
|
if query.Type != "" {
|
|
|
|
sql.WriteString(` AND type = ?`)
|
|
|
|
params = append(params, string(query.Type))
|
|
|
|
}
|
|
|
|
|
|
|
|
if query.Limit == 0 {
|
|
|
|
query.Limit = 10
|
|
|
|
}
|
|
|
|
|
2016-09-08 04:25:45 -05:00
|
|
|
sql.WriteString(fmt.Sprintf("ORDER BY epoch DESC LIMIT %v", query.Limit))
|
2016-08-30 02:32:56 -05:00
|
|
|
|
|
|
|
items := make([]*annotations.Item, 0)
|
|
|
|
if err := x.Sql(sql.String(), params...).Find(&items); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2016-08-01 03:07:00 -05:00
|
|
|
|
2016-08-30 02:32:56 -05:00
|
|
|
return items, nil
|
2016-08-01 03:07:00 -05:00
|
|
|
}
|