Просмотр исходного кода

Progres on move to sql from rethinkdb

Torkel Ödegaard 11 лет назад
Родитель
Сommit
eb2c078898

+ 1 - 1
grafana

@@ -1 +1 @@
-Subproject commit 2423f470ef62145c26e74511121eac01e554c363
+Subproject commit 4b5eadf7b59898e6622a75e0a57081103dd78b2a

+ 1 - 2
pkg/cmd/web.go

@@ -17,7 +17,6 @@ import (
 	"github.com/torkelo/grafana-pro/pkg/routes"
 	"github.com/torkelo/grafana-pro/pkg/routes"
 	"github.com/torkelo/grafana-pro/pkg/setting"
 	"github.com/torkelo/grafana-pro/pkg/setting"
 	"github.com/torkelo/grafana-pro/pkg/social"
 	"github.com/torkelo/grafana-pro/pkg/social"
-	"github.com/torkelo/grafana-pro/pkg/stores/rethink"
 	"github.com/torkelo/grafana-pro/pkg/stores/sqlstore"
 	"github.com/torkelo/grafana-pro/pkg/stores/sqlstore"
 )
 )
 
 
@@ -66,7 +65,7 @@ func mapStatic(m *macaron.Macaron, dir string, prefix string) {
 func runWeb(*cli.Context) {
 func runWeb(*cli.Context) {
 	setting.NewConfigContext()
 	setting.NewConfigContext()
 	setting.InitServices()
 	setting.InitServices()
-	rethink.Init()
+	sqlstore.Init()
 	social.NewOAuthService()
 	social.NewOAuthService()
 
 
 	// init database
 	// init database

+ 2 - 2
pkg/middleware/auth.go

@@ -9,7 +9,7 @@ import (
 	"github.com/torkelo/grafana-pro/pkg/models"
 	"github.com/torkelo/grafana-pro/pkg/models"
 )
 )
 
 
-func authGetRequestAccountId(c *Context, sess session.Store) (int, error) {
+func authGetRequestAccountId(c *Context, sess session.Store) (int64, error) {
 	accountId := sess.Get("accountId")
 	accountId := sess.Get("accountId")
 
 
 	urlQuery := c.Req.URL.Query()
 	urlQuery := c.Req.URL.Query()
@@ -23,7 +23,7 @@ func authGetRequestAccountId(c *Context, sess session.Store) (int, error) {
 		return -1, errors.New("Auth: session account id not found")
 		return -1, errors.New("Auth: session account id not found")
 	}
 	}
 
 
-	return accountId.(int), nil
+	return accountId.(int64), nil
 }
 }
 
 
 func authDenied(c *Context) {
 func authDenied(c *Context) {

+ 1 - 1
pkg/middleware/middleware.go

@@ -21,7 +21,7 @@ type Context struct {
 	IsSigned bool
 	IsSigned bool
 }
 }
 
 
-func (c *Context) GetAccountId() int {
+func (c *Context) GetAccountId() int64 {
 	return c.Account.Id
 	return c.Account.Id
 }
 }
 
 

+ 16 - 16
pkg/models/account.go

@@ -9,8 +9,8 @@ var (
 	CreateAccount       func(acccount *Account) error
 	CreateAccount       func(acccount *Account) error
 	UpdateAccount       func(acccount *Account) error
 	UpdateAccount       func(acccount *Account) error
 	GetAccountByLogin   func(emailOrName string) (*Account, error)
 	GetAccountByLogin   func(emailOrName string) (*Account, error)
-	GetAccount          func(accountId int) (*Account, error)
-	GetOtherAccountsFor func(accountId int) ([]*OtherAccount, error)
+	GetAccount          func(accountId int64) (*Account, error)
+	GetOtherAccountsFor func(accountId int64) ([]*OtherAccount, error)
 )
 )
 
 
 // Typed errors
 // Typed errors
@@ -19,7 +19,7 @@ var (
 )
 )
 
 
 type CollaboratorLink struct {
 type CollaboratorLink struct {
-	AccountId  int
+	AccountId  int64
 	Role       string
 	Role       string
 	Email      string
 	Email      string
 	ModifiedOn time.Time
 	ModifiedOn time.Time
@@ -33,20 +33,20 @@ type OtherAccount struct {
 }
 }
 
 
 type Account struct {
 type Account struct {
-	Id              int `gorethink:"id"`
-	Version         int
-	Login           string
-	Email           string
-	AccountName     string
+	Id              int64
+	Login           string `xorm:"UNIQUE NOT NULL"`
+	Email           string `xorm:"UNIQUE NOT NULL"`
+	Name            string `xorm:"UNIQUE NOT NULL"`
+	FullName        string
 	Password        string
 	Password        string
-	Name            string
+	IsAdmin         bool
+	Salt            string `xorm:"VARCHAR(10)"`
 	Company         string
 	Company         string
 	NextDashboardId int
 	NextDashboardId int
-	UsingAccountId  int
-	Collaborators   []CollaboratorLink
-	CreatedOn       time.Time
-	ModifiedOn      time.Time
-	LastLoginOn     time.Time
+	UsingAccountId  int64
+	Collaborators   []CollaboratorLink `xorm:"-"`
+	Created         time.Time          `xorm:"CREATED"`
+	Updated         time.Time          `xorm:"UPDATED"`
 }
 }
 
 
 func (account *Account) AddCollaborator(newCollaborator *Account) error {
 func (account *Account) AddCollaborator(newCollaborator *Account) error {
@@ -67,7 +67,7 @@ func (account *Account) AddCollaborator(newCollaborator *Account) error {
 	return nil
 	return nil
 }
 }
 
 
-func (account *Account) RemoveCollaborator(accountId int) {
+func (account *Account) RemoveCollaborator(accountId int64) {
 	list := account.Collaborators
 	list := account.Collaborators
 	for i, collaborator := range list {
 	for i, collaborator := range list {
 		if collaborator.AccountId == accountId {
 		if collaborator.AccountId == accountId {
@@ -77,7 +77,7 @@ func (account *Account) RemoveCollaborator(accountId int) {
 	}
 	}
 }
 }
 
 
-func (account *Account) HasCollaborator(accountId int) bool {
+func (account *Account) HasCollaborator(accountId int64) bool {
 	for _, collaborator := range account.Collaborators {
 	for _, collaborator := range account.Collaborators {
 		if collaborator.AccountId == accountId {
 		if collaborator.AccountId == accountId {
 			return true
 			return true

+ 16 - 13
pkg/models/dashboards.go

@@ -2,6 +2,7 @@ package models
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
+	"errors"
 	"io"
 	"io"
 	"regexp"
 	"regexp"
 	"strings"
 	"strings"
@@ -9,19 +10,24 @@ import (
 )
 )
 
 
 var (
 var (
-	GetDashboard    func(slug string, accountId int) (*Dashboard, error)
+	GetDashboard    func(slug string, accountId int64) (*Dashboard, error)
 	SaveDashboard   func(dash *Dashboard) error
 	SaveDashboard   func(dash *Dashboard) error
-	DeleteDashboard func(slug string, accountId int) error
-	SearchQuery     func(query string, acccountId int) ([]*SearchResult, error)
+	DeleteDashboard func(slug string, accountId int64) error
+	SearchQuery     func(query string, acccountId int64) ([]*SearchResult, error)
+)
+
+// Typed errors
+var (
+	ErrDashboardNotFound = errors.New("Account not found")
 )
 )
 
 
 type Dashboard struct {
 type Dashboard struct {
-	Id                   string `gorethink:"id,omitempty"`
-	Slug                 string
-	AccountId            int
-	LastModifiedByUserId string
-	LastModifiedByDate   time.Time
-	CreatedDate          time.Time
+	Id        int64
+	Slug      string `xorm:"index(IX_AccountIdSlug)"`
+	AccountId int64  `xorm:"index(IX_AccountIdSlug)"`
+
+	Created time.Time `xorm:"CREATED"`
+	Updated time.Time `xorm:"UPDATED"`
 
 
 	Title string
 	Title string
 	Tags  []string
 	Tags  []string
@@ -36,10 +42,7 @@ type SearchResult struct {
 
 
 func NewDashboard(title string) *Dashboard {
 func NewDashboard(title string) *Dashboard {
 	dash := &Dashboard{}
 	dash := &Dashboard{}
-	dash.Id = ""
-	dash.LastModifiedByDate = time.Now()
-	dash.CreatedDate = time.Now()
-	dash.LastModifiedByUserId = "123"
+	dash.Id = 0
 	dash.Data = make(map[string]interface{})
 	dash.Data = make(map[string]interface{})
 	dash.Data["title"] = title
 	dash.Data["title"] = title
 	dash.Title = title
 	dash.Title = title

+ 1 - 1
pkg/routes/api/api_dashboard.go

@@ -69,7 +69,7 @@ func PostDashboard(c *middleware.Context) {
 	dashboard.UpdateSlug()
 	dashboard.UpdateSlug()
 
 
 	if dashboard.Data["id"] != nil {
 	if dashboard.Data["id"] != nil {
-		dashboard.Id = dashboard.Data["id"].(string)
+		dashboard.Id = int64(dashboard.Data["id"].(float64))
 	}
 	}
 
 
 	err := models.SaveDashboard(dashboard)
 	err := models.SaveDashboard(dashboard)

+ 1 - 1
pkg/routes/api/api_render.go

@@ -12,7 +12,7 @@ import (
 func RenderToPng(c *middleware.Context) {
 func RenderToPng(c *middleware.Context) {
 	accountId := c.GetAccountId()
 	accountId := c.GetAccountId()
 	queryReader := utils.NewUrlQueryReader(c.Req.URL)
 	queryReader := utils.NewUrlQueryReader(c.Req.URL)
-	queryParams := "?render&accountId=" + strconv.Itoa(accountId) + "&" + c.Req.URL.RawQuery
+	queryParams := "?render&accountId=" + strconv.FormatInt(accountId, 10) + "&" + c.Req.URL.RawQuery
 
 
 	renderOpts := &renderer.RenderOpts{
 	renderOpts := &renderer.RenderOpts{
 		Url:    c.Params("*") + queryParams,
 		Url:    c.Params("*") + queryParams,

+ 0 - 3
pkg/routes/index.go

@@ -6,7 +6,6 @@ import (
 	"github.com/torkelo/grafana-pro/pkg/routes/api"
 	"github.com/torkelo/grafana-pro/pkg/routes/api"
 	"github.com/torkelo/grafana-pro/pkg/routes/apimodel"
 	"github.com/torkelo/grafana-pro/pkg/routes/apimodel"
 	"github.com/torkelo/grafana-pro/pkg/routes/login"
 	"github.com/torkelo/grafana-pro/pkg/routes/login"
-	"github.com/torkelo/grafana-pro/pkg/stores/sqlstore"
 )
 )
 
 
 func Register(m *macaron.Macaron) {
 func Register(m *macaron.Macaron) {
@@ -33,8 +32,6 @@ func Register(m *macaron.Macaron) {
 }
 }
 
 
 func Index(ctx *middleware.Context) {
 func Index(ctx *middleware.Context) {
-	sqlstore.GetAccounts()
-
 	ctx.Data["User"] = apimodel.NewCurrentUserDto(ctx.UserAccount)
 	ctx.Data["User"] = apimodel.NewCurrentUserDto(ctx.UserAccount)
 	ctx.HTML(200, "index")
 	ctx.HTML(200, "index")
 }
 }

+ 2 - 0
pkg/routes/login/login_oauth.go

@@ -63,6 +63,8 @@ func OAuthLogin(ctx *middleware.Context) {
 			ctx.Handle(500, "Failed to create account", err)
 			ctx.Handle(500, "Failed to create account", err)
 			return
 			return
 		}
 		}
+	} else if err != nil {
+		ctx.Handle(500, "Unexpected error", err)
 	}
 	}
 
 
 	// login
 	// login

+ 10 - 8
pkg/stores/sqlstore/sqlstore.go

@@ -6,9 +6,11 @@ import (
 	"path"
 	"path"
 	"strings"
 	"strings"
 
 
+	"github.com/torkelo/grafana-pro/pkg/models"
+	"github.com/torkelo/grafana-pro/pkg/setting"
+
 	"github.com/go-xorm/xorm"
 	"github.com/go-xorm/xorm"
 	_ "github.com/mattn/go-sqlite3"
 	_ "github.com/mattn/go-sqlite3"
-	"github.com/torkelo/grafana-pro/pkg/setting"
 )
 )
 
 
 var (
 var (
@@ -24,14 +26,14 @@ var (
 	UseSQLite3 bool
 	UseSQLite3 bool
 )
 )
 
 
-type AccountDto struct {
-	Id     int64
-	Email  string `xorm:"UNIQUE NOT NULL"`
-	Passwd string `xorm:"NOT NULL"`
-}
+func Init() {
+	tables = append(tables, new(models.Account), new(models.Dashboard))
 
 
-func init() {
-	tables = append(tables, new(AccountDto))
+	models.CreateAccount = CreateAccount
+	models.GetAccount = GetAccount
+	models.GetAccountByLogin = GetAccountByLogin
+	models.GetDashboard = GetDashboard
+	models.SaveDashboard = SaveDashboard
 }
 }
 
 
 func LoadModelsConfig() {
 func LoadModelsConfig() {

+ 29 - 14
pkg/stores/sqlstore/sqlstore_accounts.go

@@ -1,8 +1,10 @@
 package sqlstore
 package sqlstore
 
 
-import "github.com/torkelo/grafana-pro/pkg/log"
+import (
+	"github.com/torkelo/grafana-pro/pkg/models"
+)
 
 
-func SaveAccount() error {
+func CreateAccount(account *models.Account) error {
 	var err error
 	var err error
 
 
 	sess := x.NewSession()
 	sess := x.NewSession()
@@ -12,12 +14,7 @@ func SaveAccount() error {
 		return err
 		return err
 	}
 	}
 
 
-	u := &AccountDto{
-		Email:  "asdasdas",
-		Passwd: "MyPassWd",
-	}
-
-	if _, err = sess.Insert(u); err != nil {
+	if _, err = sess.Insert(account); err != nil {
 		sess.Rollback()
 		sess.Rollback()
 		return err
 		return err
 	} else if err = sess.Commit(); err != nil {
 	} else if err = sess.Commit(); err != nil {
@@ -27,14 +24,32 @@ func SaveAccount() error {
 	return nil
 	return nil
 }
 }
 
 
-func GetAccounts() {
-	var resp = make([]*AccountDto, 1)
-	err := x.Find(&resp)
+func GetAccount(id int64) (*models.Account, error) {
+	var err error
+
+	account := &models.Account{Id: id}
+	has, err := x.Get(account)
+
 	if err != nil {
 	if err != nil {
-		log.Error(4, "Error", err)
+		return nil, err
+	} else if has == false {
+		return nil, models.ErrAccountNotFound
 	}
 	}
 
 
-	for _, i := range resp {
-		log.Info("Item %v", i)
+	return account, nil
+}
+
+func GetAccountByLogin(emailOrLogin string) (*models.Account, error) {
+	var err error
+
+	account := &models.Account{Login: emailOrLogin}
+	has, err := x.Get(account)
+
+	if err != nil {
+		return nil, err
+	} else if has == false {
+		return nil, models.ErrAccountNotFound
 	}
 	}
+
+	return account, nil
 }
 }

+ 38 - 0
pkg/stores/sqlstore/sqlstore_dashboards.go

@@ -0,0 +1,38 @@
+package sqlstore
+
+import (
+	"github.com/torkelo/grafana-pro/pkg/models"
+)
+
+func SaveDashboard(dash *models.Dashboard) error {
+	var err error
+
+	sess := x.NewSession()
+	defer sess.Close()
+
+	if err = sess.Begin(); err != nil {
+		return err
+	}
+
+	if _, err = sess.Insert(dash); err != nil {
+		sess.Rollback()
+		return err
+	} else if err = sess.Commit(); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func GetDashboard(slug string, accountId int64) (*models.Dashboard, error) {
+
+	dashboard := models.Dashboard{Slug: slug, AccountId: accountId}
+	has, err := x.Get(&dashboard)
+	if err != nil {
+		return nil, err
+	} else if has == false {
+		return nil, models.ErrDashboardNotFound
+	}
+
+	return &dashboard, nil
+}