Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
ad3d15e2
Commit
ad3d15e2
authored
Feb 02, 2015
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Worked on dashboard starring and unstarring, renamed favorite model to star
parent
706481b1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
148 additions
and
35 deletions
+148
-35
grafana
+1
-1
pkg/api/api.go
+2
-2
pkg/api/dashboard.go
+21
-2
pkg/api/dtos/models.go
+6
-2
pkg/api/stars.go
+18
-8
pkg/models/star.go
+16
-5
pkg/services/sqlstore/migrations.go
+6
-6
pkg/services/sqlstore/star.go
+36
-9
pkg/services/sqlstore/stars_test.go
+42
-0
No files found.
grafana
@
1e3970c6
Subproject commit
66d9c4f1afb689eb2a1640561a06cb166e28c062
Subproject commit
1e3970c6e56af810047ab815acd7fd5e681b5139
pkg/api/api.go
View file @
ad3d15e2
...
@@ -45,8 +45,8 @@ func Register(r *macaron.Macaron) {
...
@@ -45,8 +45,8 @@ func Register(r *macaron.Macaron) {
r
.
Put
(
"/"
,
bind
(
m
.
UpdateUserCommand
{}),
UpdateUser
)
r
.
Put
(
"/"
,
bind
(
m
.
UpdateUserCommand
{}),
UpdateUser
)
r
.
Post
(
"/using/:id"
,
SetUsingAccount
)
r
.
Post
(
"/using/:id"
,
SetUsingAccount
)
r
.
Get
(
"/accounts"
,
GetUserAccounts
)
r
.
Get
(
"/accounts"
,
GetUserAccounts
)
r
.
Post
(
"/
favorites/dashboard/:id"
,
AddAsFavorite
)
r
.
Post
(
"/
stars/dashboard/:id"
,
StarDashboard
)
r
.
Delete
(
"/
favorites/dashboard/:id"
,
RemoveAsFavorite
)
r
.
Delete
(
"/
stars/dashboard/:id"
,
UnstarDashboard
)
})
})
// account
// account
...
...
pkg/api/dashboard.go
View file @
ad3d15e2
...
@@ -8,6 +8,19 @@ import (
...
@@ -8,6 +8,19 @@ import (
"github.com/torkelo/grafana-pro/pkg/util"
"github.com/torkelo/grafana-pro/pkg/util"
)
)
func
isDasboardStarredByUser
(
c
*
middleware
.
Context
,
dashId
int64
)
(
bool
,
error
)
{
if
!
c
.
IsSignedIn
{
return
false
,
nil
}
query
:=
m
.
IsStarredByUserQuery
{
UserId
:
c
.
UserId
,
DashboardId
:
dashId
}
if
err
:=
bus
.
Dispatch
(
&
query
);
err
!=
nil
{
return
false
,
err
}
return
query
.
Result
,
nil
}
func
GetDashboard
(
c
*
middleware
.
Context
)
{
func
GetDashboard
(
c
*
middleware
.
Context
)
{
slug
:=
c
.
Params
(
":slug"
)
slug
:=
c
.
Params
(
":slug"
)
...
@@ -18,10 +31,16 @@ func GetDashboard(c *middleware.Context) {
...
@@ -18,10 +31,16 @@ func GetDashboard(c *middleware.Context) {
return
return
}
}
isStarred
,
err
:=
isDasboardStarredByUser
(
c
,
query
.
Result
.
Id
)
if
err
!=
nil
{
c
.
JsonApiErr
(
500
,
"Error while checking if dashboard was starred by user"
,
err
)
return
}
dash
:=
query
.
Result
dash
:=
query
.
Result
dto
:=
dtos
.
Dashboard
{
dto
:=
dtos
.
Dashboard
{
IsFavorite
:
false
,
Model
:
dash
.
Data
,
Dashboard
:
dash
.
Data
,
Meta
:
dtos
.
DashboardMeta
{
IsStarred
:
isStarred
}
,
}
}
c
.
JSON
(
200
,
dto
)
c
.
JSON
(
200
,
dto
)
...
...
pkg/api/dtos/models.go
View file @
ad3d15e2
...
@@ -25,9 +25,13 @@ type CurrentUser struct {
...
@@ -25,9 +25,13 @@ type CurrentUser struct {
GravatarUrl
string
`json:"gravatarUrl"`
GravatarUrl
string
`json:"gravatarUrl"`
}
}
type
DashboardMeta
struct
{
IsStarred
bool
`json:"isStarred"`
}
type
Dashboard
struct
{
type
Dashboard
struct
{
IsFavorite
bool
`json:"isFavorite
"`
Meta
DashboardMeta
`json:"meta
"`
Dashboard
map
[
string
]
interface
{}
`json:"dashboard
"`
Model
map
[
string
]
interface
{}
`json:"model
"`
}
}
type
DataSource
struct
{
type
DataSource
struct
{
...
...
pkg/api/
favorite
.go
→
pkg/api/
stars
.go
View file @
ad3d15e2
...
@@ -6,30 +6,40 @@ import (
...
@@ -6,30 +6,40 @@ import (
m
"github.com/torkelo/grafana-pro/pkg/models"
m
"github.com/torkelo/grafana-pro/pkg/models"
)
)
func
AddAsFavorite
(
c
*
middleware
.
Context
)
{
func
StarDashboard
(
c
*
middleware
.
Context
)
{
var
cmd
=
m
.
AddAsFavorite
Command
{
var
cmd
=
m
.
StarDashboard
Command
{
UserId
:
c
.
UserId
,
UserId
:
c
.
UserId
,
DashboardId
:
c
.
ParamsInt64
(
":id"
),
DashboardId
:
c
.
ParamsInt64
(
":id"
),
}
}
if
cmd
.
DashboardId
<=
0
{
c
.
JsonApiErr
(
400
,
"Missing dashboard id"
,
nil
)
return
}
if
err
:=
bus
.
Dispatch
(
&
cmd
);
err
!=
nil
{
if
err
:=
bus
.
Dispatch
(
&
cmd
);
err
!=
nil
{
c
.
JsonApiErr
(
500
,
"Failed to
add favorite
"
,
err
)
c
.
JsonApiErr
(
500
,
"Failed to
star dashboard
"
,
err
)
return
return
}
}
c
.
JsonOK
(
"Dashboard
marked as favorite
"
)
c
.
JsonOK
(
"Dashboard
starred!
"
)
}
}
func
RemoveAsFavorite
(
c
*
middleware
.
Context
)
{
func
UnstarDashboard
(
c
*
middleware
.
Context
)
{
var
cmd
=
m
.
RemoveAsFavorite
Command
{
var
cmd
=
m
.
UnstarDashboard
Command
{
UserId
:
c
.
UserId
,
UserId
:
c
.
UserId
,
DashboardId
:
c
.
ParamsInt64
(
":id"
),
DashboardId
:
c
.
ParamsInt64
(
":id"
),
}
}
if
cmd
.
DashboardId
<=
0
{
c
.
JsonApiErr
(
400
,
"Missing dashboard id"
,
nil
)
return
}
if
err
:=
bus
.
Dispatch
(
&
cmd
);
err
!=
nil
{
if
err
:=
bus
.
Dispatch
(
&
cmd
);
err
!=
nil
{
c
.
JsonApiErr
(
500
,
"Failed to
remove favorite
"
,
err
)
c
.
JsonApiErr
(
500
,
"Failed to
unstar dashboard
"
,
err
)
return
return
}
}
c
.
JsonOK
(
"
Favorite remov
ed"
)
c
.
JsonOK
(
"
Dashboard unstarr
ed"
)
}
}
pkg/models/
favorite
.go
→
pkg/models/
star
.go
View file @
ad3d15e2
package
models
package
models
type
Favorite
struct
{
import
"errors"
var
ErrCommandValidationFailed
=
errors
.
New
(
"Command missing required fields"
)
type
Star
struct
{
Id
int64
Id
int64
UserId
int64
UserId
int64
DashboardId
int64
DashboardId
int64
...
@@ -9,12 +13,12 @@ type Favorite struct {
...
@@ -9,12 +13,12 @@ type Favorite struct {
// ----------------------
// ----------------------
// COMMANDS
// COMMANDS
type
AddAsFavorite
Command
struct
{
type
StarDashboard
Command
struct
{
UserId
int64
UserId
int64
DashboardId
int64
DashboardId
int64
}
}
type
RemoveAsFavorite
Command
struct
{
type
UnstarDashboard
Command
struct
{
UserId
int64
UserId
int64
DashboardId
int64
DashboardId
int64
}
}
...
@@ -22,8 +26,15 @@ type RemoveAsFavoriteCommand struct {
...
@@ -22,8 +26,15 @@ type RemoveAsFavoriteCommand struct {
// ---------------------
// ---------------------
// QUERIES
// QUERIES
type
GetUser
Favorite
sQuery
struct
{
type
GetUser
Star
sQuery
struct
{
UserId
int64
UserId
int64
Result
[]
Favorite
Result
[]
Star
}
type
IsStarredByUserQuery
struct
{
UserId
int64
DashboardId
int64
Result
bool
}
}
pkg/services/sqlstore/migrations.go
View file @
ad3d15e2
...
@@ -10,7 +10,7 @@ import . "github.com/torkelo/grafana-pro/pkg/services/sqlstore/migrator"
...
@@ -10,7 +10,7 @@ import . "github.com/torkelo/grafana-pro/pkg/services/sqlstore/migrator"
func
addMigrations
(
mg
*
Migrator
)
{
func
addMigrations
(
mg
*
Migrator
)
{
addMigrationLogMigrations
(
mg
)
addMigrationLogMigrations
(
mg
)
addUserMigrations
(
mg
)
addUserMigrations
(
mg
)
add
Favorites
Migrations
(
mg
)
add
Star
Migrations
(
mg
)
addAccountMigrations
(
mg
)
addAccountMigrations
(
mg
)
addDashboardMigration
(
mg
)
addDashboardMigration
(
mg
)
addDataSourceMigration
(
mg
)
addDataSourceMigration
(
mg
)
...
@@ -55,16 +55,16 @@ func addUserMigrations(mg *Migrator) {
...
@@ -55,16 +55,16 @@ func addUserMigrations(mg *Migrator) {
Table
(
"user"
)
.
Column
(
&
Column
{
Name
:
"rands"
,
Type
:
DB_NVarchar
,
Length
:
255
,
Nullable
:
true
}))
Table
(
"user"
)
.
Column
(
&
Column
{
Name
:
"rands"
,
Type
:
DB_NVarchar
,
Length
:
255
,
Nullable
:
true
}))
}
}
func
add
Favorites
Migrations
(
mg
*
Migrator
)
{
func
add
Star
Migrations
(
mg
*
Migrator
)
{
mg
.
AddMigration
(
"create
favorite
table"
,
new
(
AddTableMigration
)
.
mg
.
AddMigration
(
"create
star
table"
,
new
(
AddTableMigration
)
.
Name
(
"
favorite
"
)
.
WithColumns
(
Name
(
"
star
"
)
.
WithColumns
(
&
Column
{
Name
:
"id"
,
Type
:
DB_BigInt
,
IsPrimaryKey
:
true
,
IsAutoIncrement
:
true
},
&
Column
{
Name
:
"id"
,
Type
:
DB_BigInt
,
IsPrimaryKey
:
true
,
IsAutoIncrement
:
true
},
&
Column
{
Name
:
"user_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
&
Column
{
Name
:
"user_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
&
Column
{
Name
:
"dashboard_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
&
Column
{
Name
:
"dashboard_id"
,
Type
:
DB_BigInt
,
Nullable
:
false
},
))
))
mg
.
AddMigration
(
"add unique index
favorite
.user_id_dashboard_id"
,
new
(
AddIndexMigration
)
.
mg
.
AddMigration
(
"add unique index
star
.user_id_dashboard_id"
,
new
(
AddIndexMigration
)
.
Table
(
"
favorite
"
)
.
Columns
(
"user_id"
,
"dashboard_id"
)
.
Unique
())
Table
(
"
star
"
)
.
Columns
(
"user_id"
,
"dashboard_id"
)
.
Unique
())
}
}
func
addAccountMigrations
(
mg
*
Migrator
)
{
func
addAccountMigrations
(
mg
*
Migrator
)
{
...
...
pkg/services/sqlstore/
favorite
.go
→
pkg/services/sqlstore/
star
.go
View file @
ad3d15e2
package
sqlstore
package
sqlstore
import
(
import
(
"strconv"
"github.com/go-xorm/xorm"
"github.com/go-xorm/xorm"
"github.com/torkelo/grafana-pro/pkg/bus"
"github.com/torkelo/grafana-pro/pkg/bus"
...
@@ -8,15 +10,36 @@ import (
...
@@ -8,15 +10,36 @@ import (
)
)
func
init
()
{
func
init
()
{
bus
.
AddHandler
(
"sql"
,
AddAsFavorite
)
bus
.
AddHandler
(
"sql"
,
StarDashboard
)
bus
.
AddHandler
(
"sql"
,
RemoveAsFavorite
)
bus
.
AddHandler
(
"sql"
,
UnstarDashboard
)
bus
.
AddHandler
(
"sql"
,
GetUserFavorites
)
bus
.
AddHandler
(
"sql"
,
GetUserStars
)
bus
.
AddHandler
(
"sql"
,
IsStarredByUser
)
}
}
func
AddAsFavorite
(
cmd
*
m
.
AddAsFavoriteCommand
)
error
{
func
IsStarredByUser
(
query
*
m
.
IsStarredByUserQuery
)
error
{
rawSql
:=
"SELECT 1 from star where user_id=? and dashboard_id=?"
results
,
err
:=
x
.
Query
(
rawSql
,
query
.
UserId
,
query
.
DashboardId
)
if
err
!=
nil
{
return
err
}
if
len
(
results
)
==
0
{
return
nil
}
query
.
Result
,
_
=
strconv
.
ParseBool
(
string
(
results
[
0
][
"1"
]))
return
nil
}
func
StarDashboard
(
cmd
*
m
.
StarDashboardCommand
)
error
{
if
cmd
.
DashboardId
==
0
||
cmd
.
UserId
==
0
{
return
m
.
ErrCommandValidationFailed
}
return
inTransaction
(
func
(
sess
*
xorm
.
Session
)
error
{
return
inTransaction
(
func
(
sess
*
xorm
.
Session
)
error
{
entity
:=
m
.
Favorite
{
entity
:=
m
.
Star
{
UserId
:
cmd
.
UserId
,
UserId
:
cmd
.
UserId
,
DashboardId
:
cmd
.
DashboardId
,
DashboardId
:
cmd
.
DashboardId
,
}
}
...
@@ -26,16 +49,20 @@ func AddAsFavorite(cmd *m.AddAsFavoriteCommand) error {
...
@@ -26,16 +49,20 @@ func AddAsFavorite(cmd *m.AddAsFavoriteCommand) error {
})
})
}
}
func
RemoveAsFavorite
(
cmd
*
m
.
RemoveAsFavoriteCommand
)
error
{
func
UnstarDashboard
(
cmd
*
m
.
UnstarDashboardCommand
)
error
{
if
cmd
.
DashboardId
==
0
||
cmd
.
UserId
==
0
{
return
m
.
ErrCommandValidationFailed
}
return
inTransaction
(
func
(
sess
*
xorm
.
Session
)
error
{
return
inTransaction
(
func
(
sess
*
xorm
.
Session
)
error
{
var
rawSql
=
"DELETE FROM
favorite
WHERE user_id=? and dashboard_id=?"
var
rawSql
=
"DELETE FROM
star
WHERE user_id=? and dashboard_id=?"
_
,
err
:=
sess
.
Exec
(
rawSql
,
cmd
.
UserId
,
cmd
.
DashboardId
)
_
,
err
:=
sess
.
Exec
(
rawSql
,
cmd
.
UserId
,
cmd
.
DashboardId
)
return
err
return
err
})
})
}
}
func
GetUser
Favorites
(
query
*
m
.
GetUserFavorite
sQuery
)
error
{
func
GetUser
Stars
(
query
*
m
.
GetUserStar
sQuery
)
error
{
query
.
Result
=
make
([]
m
.
Favorite
,
0
)
query
.
Result
=
make
([]
m
.
Star
,
0
)
err
:=
x
.
Where
(
"user_id=?"
,
query
.
UserId
)
.
Find
(
&
query
.
Result
)
err
:=
x
.
Where
(
"user_id=?"
,
query
.
UserId
)
.
Find
(
&
query
.
Result
)
return
err
return
err
}
}
pkg/services/sqlstore/stars_test.go
0 → 100644
View file @
ad3d15e2
package
sqlstore
import
(
"testing"
.
"github.com/smartystreets/goconvey/convey"
m
"github.com/torkelo/grafana-pro/pkg/models"
)
func
TestUserStarsDataAccess
(
t
*
testing
.
T
)
{
Convey
(
"Testing User Stars Data Access"
,
t
,
func
()
{
InitTestDB
(
t
)
Convey
(
"Given saved star"
,
func
()
{
cmd
:=
m
.
StarDashboardCommand
{
DashboardId
:
10
,
UserId
:
12
,
}
err
:=
StarDashboard
(
&
cmd
)
So
(
err
,
ShouldBeNil
)
Convey
(
"IsStarredByUser should return true when starred"
,
func
()
{
query
:=
m
.
IsStarredByUserQuery
{
UserId
:
12
,
DashboardId
:
10
}
err
:=
IsStarredByUser
(
&
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeTrue
)
})
Convey
(
"IsStarredByUser should return false when not starred"
,
func
()
{
query
:=
m
.
IsStarredByUserQuery
{
UserId
:
12
,
DashboardId
:
12
}
err
:=
IsStarredByUser
(
&
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeFalse
)
})
})
})
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment