2018-01-23 05:28:56 -06:00
|
|
|
package sqlstore
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
|
|
"github.com/grafana/grafana/pkg/models"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
bus.AddHandler("sql", GetProvisionedDashboardDataQuery)
|
|
|
|
bus.AddHandler("sql", SaveProvisionedDashboard)
|
2018-02-27 11:51:04 -06:00
|
|
|
bus.AddHandler("sql", GetProvisionedDataByDashboardId)
|
2019-04-10 06:29:10 -05:00
|
|
|
bus.AddHandler("sql", UnprovisionDashboard)
|
2018-01-23 05:28:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
type DashboardExtras struct {
|
|
|
|
Id int64
|
|
|
|
DashboardId int64
|
|
|
|
Key string
|
|
|
|
Value string
|
|
|
|
}
|
|
|
|
|
2019-04-30 06:32:18 -05:00
|
|
|
func GetProvisionedDataByDashboardId(cmd *models.GetProvisionedDashboardDataByIdQuery) error {
|
2018-02-27 11:51:04 -06:00
|
|
|
result := &models.DashboardProvisioning{}
|
|
|
|
|
2018-03-27 08:12:47 -05:00
|
|
|
exist, err := x.Where("dashboard_id = ?", cmd.DashboardId).Get(result)
|
2018-02-27 11:51:04 -06:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2019-04-30 06:32:18 -05:00
|
|
|
if exist {
|
|
|
|
cmd.Result = result
|
|
|
|
}
|
2018-02-27 11:51:04 -06:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2018-01-23 05:28:56 -06:00
|
|
|
func SaveProvisionedDashboard(cmd *models.SaveProvisionedDashboardCommand) error {
|
|
|
|
return inTransaction(func(sess *DBSession) error {
|
|
|
|
err := saveDashboard(sess, cmd.DashboardCmd)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd.Result = cmd.DashboardCmd.Result
|
2018-02-14 08:28:30 -06:00
|
|
|
if cmd.DashboardProvisioning.Updated == 0 {
|
|
|
|
cmd.DashboardProvisioning.Updated = cmd.Result.Updated.Unix()
|
2018-02-09 08:23:38 -06:00
|
|
|
}
|
2018-01-23 13:22:04 -06:00
|
|
|
|
2019-04-10 06:29:10 -05:00
|
|
|
return saveProvisionedData(sess, cmd.DashboardProvisioning, cmd.Result)
|
2018-01-23 05:28:56 -06:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2019-04-10 06:29:10 -05:00
|
|
|
func saveProvisionedData(sess *DBSession, cmd *models.DashboardProvisioning, dashboard *models.Dashboard) error {
|
2018-01-23 13:22:04 -06:00
|
|
|
result := &models.DashboardProvisioning{}
|
2018-01-23 05:28:56 -06:00
|
|
|
|
2019-01-11 07:40:49 -06:00
|
|
|
exist, err := sess.Where("dashboard_id=? AND name = ?", dashboard.Id, cmd.Name).Get(result)
|
2018-01-23 05:28:56 -06:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2018-01-23 13:22:04 -06:00
|
|
|
cmd.Id = result.Id
|
|
|
|
cmd.DashboardId = dashboard.Id
|
2018-01-23 05:28:56 -06:00
|
|
|
|
|
|
|
if exist {
|
2018-01-23 13:22:04 -06:00
|
|
|
_, err = sess.ID(result.Id).Update(cmd)
|
2018-01-23 05:28:56 -06:00
|
|
|
} else {
|
|
|
|
_, err = sess.Insert(cmd)
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetProvisionedDashboardDataQuery(cmd *models.GetProvisionedDashboardDataQuery) error {
|
|
|
|
var result []*models.DashboardProvisioning
|
|
|
|
|
|
|
|
if err := x.Where("name = ?", cmd.Name).Find(&result); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd.Result = result
|
|
|
|
return nil
|
|
|
|
}
|
2019-04-10 06:29:10 -05:00
|
|
|
|
|
|
|
// UnprovisionDashboard removes row in dashboard_provisioning for the dashboard making it seem as if manually created.
|
|
|
|
// The dashboard will still have `created_by = -1` to see it was not created by any particular user.
|
|
|
|
func UnprovisionDashboard(cmd *models.UnprovisionDashboardCommand) error {
|
|
|
|
if _, err := x.Where("dashboard_id = ?", cmd.Id).Delete(&models.DashboardProvisioning{}); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|