more work on dashboard snapshots

This commit is contained in:
Torkel Ödegaard
2015-03-21 08:53:16 -04:00
parent a76758255f
commit 964f0861d6
13 changed files with 240 additions and 21 deletions
@@ -0,0 +1,46 @@
package sqlstore
import (
"time"
"github.com/go-xorm/xorm"
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
)
func init() {
bus.AddHandler("sql", CreateDashboardSnapshot)
bus.AddHandler("sql", GetDashboardSnapshot)
}
func CreateDashboardSnapshot(cmd *m.CreateDashboardSnapshotCommand) error {
return inTransaction(func(sess *xorm.Session) error {
snapshot := &m.DashboardSnapshot{
Key: cmd.Key,
Dashboard: cmd.Dashboard,
Expires: time.Unix(0, 0),
Created: time.Now(),
Updated: time.Now(),
}
_, err := sess.Insert(snapshot)
cmd.Result = snapshot
return err
})
}
func GetDashboardSnapshot(query *m.GetDashboardSnapshotQuery) error {
var snapshot m.DashboardSnapshot
has, err := x.Where("key=?", query.Key).Get(&snapshot)
if err != nil {
return err
} else if has == false {
return m.ErrNotFound
}
query.Result = &snapshot
return nil
}
@@ -0,0 +1,37 @@
package sqlstore
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
m "github.com/grafana/grafana/pkg/models"
)
func TestDashboardSnapshotDBAccess(t *testing.T) {
Convey("Testing DashboardSnapshot data access", t, func() {
InitTestDB(t)
Convey("Given saved snaphot", func() {
cmd := m.CreateDashboardSnapshotCommand{
Key: "hej",
Dashboard: map[string]interface{}{
"hello": "mupp",
},
}
err := CreateDashboardSnapshot(&cmd)
So(err, ShouldBeNil)
Convey("Should be able to get snaphot by key", func() {
query := m.GetDashboardSnapshotQuery{Key: "hej"}
err = GetDashboardSnapshot(&query)
So(err, ShouldBeNil)
So(query.Result, ShouldNotBeNil)
So(query.Result.Dashboard["hello"], ShouldEqual, "mupp")
})
})
})
}
@@ -0,0 +1,24 @@
package migrations
import . "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
func addDashboardSnapshotMigrations(mg *Migrator) {
snapshotV3 := Table{
Name: "dashboard_snapshot",
Columns: []*Column{
{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
{Name: "name", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "key", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "dashboard", Type: DB_Text, Nullable: false},
{Name: "expires", Type: DB_DateTime, Nullable: false},
{Name: "created", Type: DB_DateTime, Nullable: false},
{Name: "updated", Type: DB_DateTime, Nullable: false},
},
Indices: []*Index{
{Cols: []string{"key"}, Type: UniqueIndex},
},
}
mg.AddMigration("create dashboard_snapshot table v3", NewAddTableMigration(snapshotV3))
addTableIndicesMigrations(mg, "v3", snapshotV3)
}
@@ -15,6 +15,7 @@ func AddMigrations(mg *Migrator) {
addDashboardMigration(mg)
addDataSourceMigration(mg)
addApiKeyMigrations(mg)
addDashboardSnapshotMigrations(mg)
}
func addMigrationLogMigrations(mg *Migrator) {