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
5fc255bd
Unverified
Commit
5fc255bd
authored
Apr 16, 2020
by
Carl Bergquist
Committed by
GitHub
Apr 16, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Linting fixes for provisoning (#23600)
parent
6e313e7d
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
90 additions
and
88 deletions
+90
-88
.circleci/config.yml
+2
-1
pkg/api/dashboard.go
+2
-2
pkg/api/dashboard_test.go
+1
-1
pkg/services/dashboards/dashboard_service.go
+7
-6
pkg/services/provisioning/dashboards/config_reader.go
+12
-12
pkg/services/provisioning/dashboards/config_reader_test.go
+5
-5
pkg/services/provisioning/dashboards/dashboard.go
+3
-3
pkg/services/provisioning/dashboards/file_reader.go
+9
-9
pkg/services/provisioning/dashboards/file_reader_linux_test.go
+2
-2
pkg/services/provisioning/dashboards/file_reader_test.go
+15
-15
pkg/services/provisioning/dashboards/types.go
+32
-32
No files found.
.circleci/config.yml
View file @
5fc255bd
...
@@ -731,8 +731,9 @@ jobs:
...
@@ -731,8 +731,9 @@ jobs:
golangci-lint run -v -j 4 --config scripts/go/configs/ci/.golangci.yml -E unconvert -E unused \
golangci-lint run -v -j 4 --config scripts/go/configs/ci/.golangci.yml -E unconvert -E unused \
-E varcheck -E goconst -E errcheck -E staticcheck ./pkg/...
-E varcheck -E goconst -E errcheck -E staticcheck ./pkg/...
./scripts/go/bin/revive -formatter stylish -config ./scripts/go/configs/revive.toml ./pkg/...
./scripts/go/bin/revive -formatter stylish -config ./scripts/go/configs/revive.toml ./pkg/...
./scripts/go/bin/revive
-formatter stylish
./pkg/services/alerting/...
./scripts/go/bin/revive ./pkg/services/alerting/...
./scripts/go/bin/revive -formatter stylish ./pkg/services/provisioning/datasources/...
./scripts/go/bin/revive -formatter stylish ./pkg/services/provisioning/datasources/...
./scripts/go/bin/revive -formatter stylish ./pkg/services/provisioning/dashboards/...
./scripts/go/bin/gosec -quiet -exclude=G104,G107,G108,G201,G202,G204,G301,G304,G401,G402,G501 \
./scripts/go/bin/gosec -quiet -exclude=G104,G107,G108,G201,G202,G204,G301,G304,G401,G402,G501 \
-conf=./scripts/go/configs/gosec.json ./pkg/...
-conf=./scripts/go/configs/gosec.json ./pkg/...
...
...
pkg/api/dashboard.go
View file @
5fc255bd
...
@@ -107,7 +107,7 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) Response {
...
@@ -107,7 +107,7 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) Response {
meta
.
FolderUrl
=
query
.
Result
.
GetUrl
()
meta
.
FolderUrl
=
query
.
Result
.
GetUrl
()
}
}
provisioningData
,
err
:=
dashboards
.
NewProvisioningService
()
.
GetProvisionedDashboardDataByDashboardI
d
(
dash
.
Id
)
provisioningData
,
err
:=
dashboards
.
NewProvisioningService
()
.
GetProvisionedDashboardDataByDashboardI
D
(
dash
.
Id
)
if
err
!=
nil
{
if
err
!=
nil
{
return
Error
(
500
,
"Error while checking if dashboard is provisioned"
,
err
)
return
Error
(
500
,
"Error while checking if dashboard is provisioned"
,
err
)
}
}
...
@@ -225,7 +225,7 @@ func (hs *HTTPServer) PostDashboard(c *models.ReqContext, cmd models.SaveDashboa
...
@@ -225,7 +225,7 @@ func (hs *HTTPServer) PostDashboard(c *models.ReqContext, cmd models.SaveDashboa
}
}
}
}
provisioningData
,
err
:=
dashboards
.
NewProvisioningService
()
.
GetProvisionedDashboardDataByDashboardI
d
(
dash
.
Id
)
provisioningData
,
err
:=
dashboards
.
NewProvisioningService
()
.
GetProvisionedDashboardDataByDashboardI
D
(
dash
.
Id
)
if
err
!=
nil
{
if
err
!=
nil
{
return
Error
(
500
,
"Error while checking if dashboard is provisioned"
,
err
)
return
Error
(
500
,
"Error while checking if dashboard is provisioned"
,
err
)
}
}
...
...
pkg/api/dashboard_test.go
View file @
5fc255bd
...
@@ -1196,7 +1196,7 @@ func (m mockDashboardProvisioningService) GetProvisionedDashboardData(name strin
...
@@ -1196,7 +1196,7 @@ func (m mockDashboardProvisioningService) GetProvisionedDashboardData(name strin
panic
(
"implement me"
)
panic
(
"implement me"
)
}
}
func
(
mock
mockDashboardProvisioningService
)
GetProvisionedDashboardDataByDashboardI
d
(
dashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
func
(
mock
mockDashboardProvisioningService
)
GetProvisionedDashboardDataByDashboardI
D
(
dashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
return
&
models
.
DashboardProvisioning
{},
nil
return
&
models
.
DashboardProvisioning
{},
nil
}
}
...
...
pkg/services/dashboards/dashboard_service.go
View file @
5fc255bd
package
dashboards
package
dashboards
import
(
import
(
"github.com/grafana/grafana/pkg/components/gtime"
"github.com/grafana/grafana/pkg/setting"
"strings"
"strings"
"time"
"time"
"github.com/grafana/grafana/pkg/components/gtime"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/models"
...
@@ -26,7 +27,7 @@ type DashboardProvisioningService interface {
...
@@ -26,7 +27,7 @@ type DashboardProvisioningService interface {
SaveProvisionedDashboard
(
dto
*
SaveDashboardDTO
,
provisioning
*
models
.
DashboardProvisioning
)
(
*
models
.
Dashboard
,
error
)
SaveProvisionedDashboard
(
dto
*
SaveDashboardDTO
,
provisioning
*
models
.
DashboardProvisioning
)
(
*
models
.
Dashboard
,
error
)
SaveFolderForProvisionedDashboards
(
*
SaveDashboardDTO
)
(
*
models
.
Dashboard
,
error
)
SaveFolderForProvisionedDashboards
(
*
SaveDashboardDTO
)
(
*
models
.
Dashboard
,
error
)
GetProvisionedDashboardData
(
name
string
)
([]
*
models
.
DashboardProvisioning
,
error
)
GetProvisionedDashboardData
(
name
string
)
([]
*
models
.
DashboardProvisioning
,
error
)
GetProvisionedDashboardDataByDashboardI
d
(
d
ashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
GetProvisionedDashboardDataByDashboardI
D
(
D
ashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
UnprovisionDashboard
(
dashboardId
int64
)
error
UnprovisionDashboard
(
dashboardId
int64
)
error
DeleteProvisionedDashboard
(
dashboardId
int64
,
orgId
int64
)
error
DeleteProvisionedDashboard
(
dashboardId
int64
,
orgId
int64
)
error
}
}
...
@@ -70,7 +71,7 @@ func (dr *dashboardServiceImpl) GetProvisionedDashboardData(name string) ([]*mod
...
@@ -70,7 +71,7 @@ func (dr *dashboardServiceImpl) GetProvisionedDashboardData(name string) ([]*mod
return
cmd
.
Result
,
nil
return
cmd
.
Result
,
nil
}
}
func
(
dr
*
dashboardServiceImpl
)
GetProvisionedDashboardDataByDashboardI
d
(
dashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
func
(
dr
*
dashboardServiceImpl
)
GetProvisionedDashboardDataByDashboardI
D
(
dashboardId
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
cmd
:=
&
models
.
GetProvisionedDashboardDataByIdQuery
{
DashboardId
:
dashboardId
}
cmd
:=
&
models
.
GetProvisionedDashboardDataByIdQuery
{
DashboardId
:
dashboardId
}
err
:=
bus
.
Dispatch
(
cmd
)
err
:=
bus
.
Dispatch
(
cmd
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -142,7 +143,7 @@ func (dr *dashboardServiceImpl) buildSaveDashboardCommand(dto *SaveDashboardDTO,
...
@@ -142,7 +143,7 @@ func (dr *dashboardServiceImpl) buildSaveDashboardCommand(dto *SaveDashboardDTO,
}
}
if
validateProvisionedDashboard
{
if
validateProvisionedDashboard
{
provisionedData
,
err
:=
dr
.
GetProvisionedDashboardDataByDashboardI
d
(
dash
.
Id
)
provisionedData
,
err
:=
dr
.
GetProvisionedDashboardDataByDashboardI
D
(
dash
.
Id
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -308,7 +309,7 @@ func (dr *dashboardServiceImpl) DeleteProvisionedDashboard(dashboardId int64, or
...
@@ -308,7 +309,7 @@ func (dr *dashboardServiceImpl) DeleteProvisionedDashboard(dashboardId int64, or
func
(
dr
*
dashboardServiceImpl
)
deleteDashboard
(
dashboardId
int64
,
orgId
int64
,
validateProvisionedDashboard
bool
)
error
{
func
(
dr
*
dashboardServiceImpl
)
deleteDashboard
(
dashboardId
int64
,
orgId
int64
,
validateProvisionedDashboard
bool
)
error
{
if
validateProvisionedDashboard
{
if
validateProvisionedDashboard
{
provisionedData
,
err
:=
dr
.
GetProvisionedDashboardDataByDashboardI
d
(
dashboardId
)
provisionedData
,
err
:=
dr
.
GetProvisionedDashboardDataByDashboardI
D
(
dashboardId
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errutil
.
Wrap
(
"failed to check if dashboard is provisioned"
,
err
)
return
errutil
.
Wrap
(
"failed to check if dashboard is provisioned"
,
err
)
}
}
...
...
pkg/services/provisioning/dashboards/config_reader.go
View file @
5fc255bd
...
@@ -16,14 +16,14 @@ type configReader struct {
...
@@ -16,14 +16,14 @@ type configReader struct {
log
log
.
Logger
log
log
.
Logger
}
}
func
(
cr
*
configReader
)
parseConfigs
(
file
os
.
FileInfo
)
([]
*
DashboardsAsC
onfig
,
error
)
{
func
(
cr
*
configReader
)
parseConfigs
(
file
os
.
FileInfo
)
([]
*
c
onfig
,
error
)
{
filename
,
_
:=
filepath
.
Abs
(
filepath
.
Join
(
cr
.
path
,
file
.
Name
()))
filename
,
_
:=
filepath
.
Abs
(
filepath
.
Join
(
cr
.
path
,
file
.
Name
()))
yamlFile
,
err
:=
ioutil
.
ReadFile
(
filename
)
yamlFile
,
err
:=
ioutil
.
ReadFile
(
filename
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
apiVersion
:=
&
ConfigVersion
{
Api
Version
:
0
}
apiVersion
:=
&
configVersion
{
API
Version
:
0
}
// We ignore the error here because it errors out for version 0 which does not have apiVersion
// We ignore the error here because it errors out for version 0 which does not have apiVersion
// specified (so 0 is default). This can also error in case the apiVersion is not an integer but at the moment
// specified (so 0 is default). This can also error in case the apiVersion is not an integer but at the moment
...
@@ -32,8 +32,8 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
...
@@ -32,8 +32,8 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
// integer > max version?).
// integer > max version?).
_
=
yaml
.
Unmarshal
(
yamlFile
,
&
apiVersion
)
_
=
yaml
.
Unmarshal
(
yamlFile
,
&
apiVersion
)
if
apiVersion
.
A
pi
Version
>
0
{
if
apiVersion
.
A
PI
Version
>
0
{
v1
:=
&
DashboardAsC
onfigV1
{}
v1
:=
&
c
onfigV1
{}
err
:=
yaml
.
Unmarshal
(
yamlFile
,
&
v1
)
err
:=
yaml
.
Unmarshal
(
yamlFile
,
&
v1
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -43,7 +43,7 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
...
@@ -43,7 +43,7 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
return
v1
.
mapToDashboardsAsConfig
()
return
v1
.
mapToDashboardsAsConfig
()
}
}
}
else
{
}
else
{
var
v0
[]
*
DashboardsAsC
onfigV0
var
v0
[]
*
c
onfigV0
err
:=
yaml
.
Unmarshal
(
yamlFile
,
&
v0
)
err
:=
yaml
.
Unmarshal
(
yamlFile
,
&
v0
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -55,11 +55,11 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
...
@@ -55,11 +55,11 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
}
}
}
}
return
[]
*
DashboardsAsC
onfig
{},
nil
return
[]
*
c
onfig
{},
nil
}
}
func
(
cr
*
configReader
)
readConfig
()
([]
*
DashboardsAsC
onfig
,
error
)
{
func
(
cr
*
configReader
)
readConfig
()
([]
*
c
onfig
,
error
)
{
var
dashboards
[]
*
DashboardsAsC
onfig
var
dashboards
[]
*
c
onfig
files
,
err
:=
ioutil
.
ReadDir
(
cr
.
path
)
files
,
err
:=
ioutil
.
ReadDir
(
cr
.
path
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -84,15 +84,15 @@ func (cr *configReader) readConfig() ([]*DashboardsAsConfig, error) {
...
@@ -84,15 +84,15 @@ func (cr *configReader) readConfig() ([]*DashboardsAsConfig, error) {
uidUsage
:=
map
[
string
]
uint8
{}
uidUsage
:=
map
[
string
]
uint8
{}
for
_
,
dashboard
:=
range
dashboards
{
for
_
,
dashboard
:=
range
dashboards
{
if
dashboard
.
OrgI
d
==
0
{
if
dashboard
.
OrgI
D
==
0
{
dashboard
.
OrgI
d
=
1
dashboard
.
OrgI
D
=
1
}
}
if
dashboard
.
UpdateIntervalSeconds
==
0
{
if
dashboard
.
UpdateIntervalSeconds
==
0
{
dashboard
.
UpdateIntervalSeconds
=
10
dashboard
.
UpdateIntervalSeconds
=
10
}
}
if
len
(
dashboard
.
FolderU
id
)
>
0
{
if
len
(
dashboard
.
FolderU
ID
)
>
0
{
uidUsage
[
dashboard
.
FolderU
id
]
++
uidUsage
[
dashboard
.
FolderU
ID
]
++
}
}
}
}
...
...
pkg/services/provisioning/dashboards/config_reader_test.go
View file @
5fc255bd
...
@@ -59,7 +59,7 @@ func TestDashboardsAsConfig(t *testing.T) {
...
@@ -59,7 +59,7 @@ func TestDashboardsAsConfig(t *testing.T) {
})
})
})
})
}
}
func
validateDashboardAsConfig
(
t
*
testing
.
T
,
cfg
[]
*
DashboardsAsC
onfig
)
{
func
validateDashboardAsConfig
(
t
*
testing
.
T
,
cfg
[]
*
c
onfig
)
{
t
.
Helper
()
t
.
Helper
()
So
(
len
(
cfg
),
ShouldEqual
,
2
)
So
(
len
(
cfg
),
ShouldEqual
,
2
)
...
@@ -67,9 +67,9 @@ func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
...
@@ -67,9 +67,9 @@ func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
ds
:=
cfg
[
0
]
ds
:=
cfg
[
0
]
So
(
ds
.
Name
,
ShouldEqual
,
"general dashboards"
)
So
(
ds
.
Name
,
ShouldEqual
,
"general dashboards"
)
So
(
ds
.
Type
,
ShouldEqual
,
"file"
)
So
(
ds
.
Type
,
ShouldEqual
,
"file"
)
So
(
ds
.
OrgI
d
,
ShouldEqual
,
2
)
So
(
ds
.
OrgI
D
,
ShouldEqual
,
2
)
So
(
ds
.
Folder
,
ShouldEqual
,
"developers"
)
So
(
ds
.
Folder
,
ShouldEqual
,
"developers"
)
So
(
ds
.
FolderU
id
,
ShouldEqual
,
"xyz"
)
So
(
ds
.
FolderU
ID
,
ShouldEqual
,
"xyz"
)
So
(
ds
.
Editable
,
ShouldBeTrue
)
So
(
ds
.
Editable
,
ShouldBeTrue
)
So
(
len
(
ds
.
Options
),
ShouldEqual
,
1
)
So
(
len
(
ds
.
Options
),
ShouldEqual
,
1
)
So
(
ds
.
Options
[
"path"
],
ShouldEqual
,
"/var/lib/grafana/dashboards"
)
So
(
ds
.
Options
[
"path"
],
ShouldEqual
,
"/var/lib/grafana/dashboards"
)
...
@@ -79,9 +79,9 @@ func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
...
@@ -79,9 +79,9 @@ func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
ds2
:=
cfg
[
1
]
ds2
:=
cfg
[
1
]
So
(
ds2
.
Name
,
ShouldEqual
,
"default"
)
So
(
ds2
.
Name
,
ShouldEqual
,
"default"
)
So
(
ds2
.
Type
,
ShouldEqual
,
"file"
)
So
(
ds2
.
Type
,
ShouldEqual
,
"file"
)
So
(
ds2
.
OrgI
d
,
ShouldEqual
,
1
)
So
(
ds2
.
OrgI
D
,
ShouldEqual
,
1
)
So
(
ds2
.
Folder
,
ShouldEqual
,
""
)
So
(
ds2
.
Folder
,
ShouldEqual
,
""
)
So
(
ds2
.
FolderU
id
,
ShouldEqual
,
""
)
So
(
ds2
.
FolderU
ID
,
ShouldEqual
,
""
)
So
(
ds2
.
Editable
,
ShouldBeFalse
)
So
(
ds2
.
Editable
,
ShouldBeFalse
)
So
(
len
(
ds2
.
Options
),
ShouldEqual
,
1
)
So
(
len
(
ds2
.
Options
),
ShouldEqual
,
1
)
So
(
ds2
.
Options
[
"path"
],
ShouldEqual
,
"/var/lib/grafana/dashboards"
)
So
(
ds2
.
Options
[
"path"
],
ShouldEqual
,
"/var/lib/grafana/dashboards"
)
...
...
pkg/services/provisioning/dashboards/dashboard.go
View file @
5fc255bd
...
@@ -25,7 +25,7 @@ type DashboardProvisionerFactory func(string) (DashboardProvisioner, error)
...
@@ -25,7 +25,7 @@ type DashboardProvisionerFactory func(string) (DashboardProvisioner, error)
type
Provisioner
struct
{
type
Provisioner
struct
{
log
log
.
Logger
log
log
.
Logger
fileReaders
[]
*
FileReader
fileReaders
[]
*
FileReader
configs
[]
*
DashboardsAsC
onfig
configs
[]
*
c
onfig
}
}
// New returns a new DashboardProvisioner
// New returns a new DashboardProvisioner
...
@@ -94,13 +94,13 @@ func (provider *Provisioner) GetProvisionerResolvedPath(name string) string {
...
@@ -94,13 +94,13 @@ func (provider *Provisioner) GetProvisionerResolvedPath(name string) string {
func
(
provider
*
Provisioner
)
GetAllowUIUpdatesFromConfig
(
name
string
)
bool
{
func
(
provider
*
Provisioner
)
GetAllowUIUpdatesFromConfig
(
name
string
)
bool
{
for
_
,
config
:=
range
provider
.
configs
{
for
_
,
config
:=
range
provider
.
configs
{
if
config
.
Name
==
name
{
if
config
.
Name
==
name
{
return
config
.
AllowU
i
Updates
return
config
.
AllowU
I
Updates
}
}
}
}
return
false
return
false
}
}
func
getFileReaders
(
configs
[]
*
DashboardsAsC
onfig
,
logger
log
.
Logger
)
([]
*
FileReader
,
error
)
{
func
getFileReaders
(
configs
[]
*
c
onfig
,
logger
log
.
Logger
)
([]
*
FileReader
,
error
)
{
var
readers
[]
*
FileReader
var
readers
[]
*
FileReader
for
_
,
config
:=
range
configs
{
for
_
,
config
:=
range
configs
{
...
...
pkg/services/provisioning/dashboards/file_reader.go
View file @
5fc255bd
...
@@ -29,14 +29,14 @@ var (
...
@@ -29,14 +29,14 @@ var (
// insert/update dashboards to the Grafana database using
// insert/update dashboards to the Grafana database using
// `dashboards.DashboardProvisioningService`
// `dashboards.DashboardProvisioningService`
type
FileReader
struct
{
type
FileReader
struct
{
Cfg
*
DashboardsAsC
onfig
Cfg
*
c
onfig
Path
string
Path
string
log
log
.
Logger
log
log
.
Logger
dashboardProvisioningService
dashboards
.
DashboardProvisioningService
dashboardProvisioningService
dashboards
.
DashboardProvisioningService
}
}
// NewDashboardFileReader returns a new filereader based on `
DashboardsAsC
onfig`
// NewDashboardFileReader returns a new filereader based on `
c
onfig`
func
NewDashboardFileReader
(
cfg
*
DashboardsAsC
onfig
,
log
log
.
Logger
)
(
*
FileReader
,
error
)
{
func
NewDashboardFileReader
(
cfg
*
c
onfig
,
log
log
.
Logger
)
(
*
FileReader
,
error
)
{
var
path
string
var
path
string
path
,
ok
:=
cfg
.
Options
[
"path"
]
.
(
string
)
path
,
ok
:=
cfg
.
Options
[
"path"
]
.
(
string
)
if
!
ok
{
if
!
ok
{
...
@@ -139,7 +139,7 @@ func (fr *FileReader) handleMissingDashboardFiles(provisionedDashboardRefs map[s
...
@@ -139,7 +139,7 @@ func (fr *FileReader) handleMissingDashboardFiles(provisionedDashboardRefs map[s
// delete dashboard that are missing json file
// delete dashboard that are missing json file
for
_
,
dashboardID
:=
range
dashboardToDelete
{
for
_
,
dashboardID
:=
range
dashboardToDelete
{
fr
.
log
.
Debug
(
"deleting provisioned dashboard. missing on disk"
,
"id"
,
dashboardID
)
fr
.
log
.
Debug
(
"deleting provisioned dashboard. missing on disk"
,
"id"
,
dashboardID
)
err
:=
fr
.
dashboardProvisioningService
.
DeleteProvisionedDashboard
(
dashboardID
,
fr
.
Cfg
.
OrgI
d
)
err
:=
fr
.
dashboardProvisioningService
.
DeleteProvisionedDashboard
(
dashboardID
,
fr
.
Cfg
.
OrgI
D
)
if
err
!=
nil
{
if
err
!=
nil
{
fr
.
log
.
Error
(
"failed to delete dashboard"
,
"id"
,
dashboardID
,
"error"
,
err
)
fr
.
log
.
Error
(
"failed to delete dashboard"
,
"id"
,
dashboardID
,
"error"
,
err
)
}
}
...
@@ -212,12 +212,12 @@ func getProvisionedDashboardByPath(service dashboards.DashboardProvisioningServi
...
@@ -212,12 +212,12 @@ func getProvisionedDashboardByPath(service dashboards.DashboardProvisioningServi
return
byPath
,
nil
return
byPath
,
nil
}
}
func
getOrCreateFolderID
(
cfg
*
DashboardsAsC
onfig
,
service
dashboards
.
DashboardProvisioningService
)
(
int64
,
error
)
{
func
getOrCreateFolderID
(
cfg
*
c
onfig
,
service
dashboards
.
DashboardProvisioningService
)
(
int64
,
error
)
{
if
cfg
.
Folder
==
""
{
if
cfg
.
Folder
==
""
{
return
0
,
ErrFolderNameMissing
return
0
,
ErrFolderNameMissing
}
}
cmd
:=
&
models
.
GetDashboardQuery
{
Slug
:
models
.
SlugifyTitle
(
cfg
.
Folder
),
OrgId
:
cfg
.
OrgI
d
}
cmd
:=
&
models
.
GetDashboardQuery
{
Slug
:
models
.
SlugifyTitle
(
cfg
.
Folder
),
OrgId
:
cfg
.
OrgI
D
}
err
:=
bus
.
Dispatch
(
cmd
)
err
:=
bus
.
Dispatch
(
cmd
)
if
err
!=
nil
&&
err
!=
models
.
ErrDashboardNotFound
{
if
err
!=
nil
&&
err
!=
models
.
ErrDashboardNotFound
{
...
@@ -230,9 +230,9 @@ func getOrCreateFolderID(cfg *DashboardsAsConfig, service dashboards.DashboardPr
...
@@ -230,9 +230,9 @@ func getOrCreateFolderID(cfg *DashboardsAsConfig, service dashboards.DashboardPr
dash
.
Dashboard
=
models
.
NewDashboardFolder
(
cfg
.
Folder
)
dash
.
Dashboard
=
models
.
NewDashboardFolder
(
cfg
.
Folder
)
dash
.
Dashboard
.
IsFolder
=
true
dash
.
Dashboard
.
IsFolder
=
true
dash
.
Overwrite
=
true
dash
.
Overwrite
=
true
dash
.
OrgId
=
cfg
.
OrgI
d
dash
.
OrgId
=
cfg
.
OrgI
D
// set dashboard folderUid if given
// set dashboard folderUid if given
dash
.
Dashboard
.
SetUid
(
cfg
.
FolderU
id
)
dash
.
Dashboard
.
SetUid
(
cfg
.
FolderU
ID
)
dbDash
,
err
:=
service
.
SaveFolderForProvisionedDashboards
(
dash
)
dbDash
,
err
:=
service
.
SaveFolderForProvisionedDashboards
(
dash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
0
,
err
return
0
,
err
...
@@ -321,7 +321,7 @@ func (fr *FileReader) readDashboardFromFile(path string, lastModified time.Time,
...
@@ -321,7 +321,7 @@ func (fr *FileReader) readDashboardFromFile(path string, lastModified time.Time,
return
nil
,
err
return
nil
,
err
}
}
dash
,
err
:=
createDashboardJ
son
(
data
,
lastModified
,
fr
.
Cfg
,
folderID
)
dash
,
err
:=
createDashboardJ
SON
(
data
,
lastModified
,
fr
.
Cfg
,
folderID
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
pkg/services/provisioning/dashboards/file_reader_linux_test.go
View file @
5fc255bd
...
@@ -14,10 +14,10 @@ var (
...
@@ -14,10 +14,10 @@ var (
)
)
func
TestProvsionedSymlinkedFolder
(
t
*
testing
.
T
)
{
func
TestProvsionedSymlinkedFolder
(
t
*
testing
.
T
)
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
""
,
Folder
:
""
,
Options
:
map
[
string
]
interface
{}{
"path"
:
symlinkedFolder
},
Options
:
map
[
string
]
interface
{}{
"path"
:
symlinkedFolder
},
}
}
...
...
pkg/services/provisioning/dashboards/file_reader_test.go
View file @
5fc255bd
...
@@ -30,10 +30,10 @@ var (
...
@@ -30,10 +30,10 @@ var (
func
TestCreatingNewDashboardFileReader
(
t
*
testing
.
T
)
{
func
TestCreatingNewDashboardFileReader
(
t
*
testing
.
T
)
{
Convey
(
"creating new dashboard file reader"
,
t
,
func
()
{
Convey
(
"creating new dashboard file reader"
,
t
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
""
,
Folder
:
""
,
Options
:
map
[
string
]
interface
{}{},
Options
:
map
[
string
]
interface
{}{},
}
}
...
@@ -88,10 +88,10 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -88,10 +88,10 @@ func TestDashboardFileReader(t *testing.T) {
Convey
(
"Reading dashboards from disk"
,
func
()
{
Convey
(
"Reading dashboards from disk"
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
""
,
Folder
:
""
,
Options
:
map
[
string
]
interface
{}{},
Options
:
map
[
string
]
interface
{}{},
}
}
...
@@ -153,10 +153,10 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -153,10 +153,10 @@ func TestDashboardFileReader(t *testing.T) {
})
})
Convey
(
"Invalid configuration should return error"
,
func
()
{
Convey
(
"Invalid configuration should return error"
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
""
,
Folder
:
""
,
}
}
...
@@ -172,8 +172,8 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -172,8 +172,8 @@ func TestDashboardFileReader(t *testing.T) {
})
})
Convey
(
"Two dashboard providers should be able to provisioned the same dashboard without uid"
,
func
()
{
Convey
(
"Two dashboard providers should be able to provisioned the same dashboard without uid"
,
func
()
{
cfg1
:=
&
DashboardsAsConfig
{
Name
:
"1"
,
Type
:
"file"
,
OrgId
:
1
,
Folder
:
"f1"
,
Options
:
map
[
string
]
interface
{}{
"path"
:
containingID
}}
cfg1
:=
&
config
{
Name
:
"1"
,
Type
:
"file"
,
OrgID
:
1
,
Folder
:
"f1"
,
Options
:
map
[
string
]
interface
{}{
"path"
:
containingID
}}
cfg2
:=
&
DashboardsAsConfig
{
Name
:
"2"
,
Type
:
"file"
,
OrgId
:
1
,
Folder
:
"f2"
,
Options
:
map
[
string
]
interface
{}{
"path"
:
containingID
}}
cfg2
:=
&
config
{
Name
:
"2"
,
Type
:
"file"
,
OrgID
:
1
,
Folder
:
"f2"
,
Options
:
map
[
string
]
interface
{}{
"path"
:
containingID
}}
reader1
,
err
:=
NewDashboardFileReader
(
cfg1
,
logger
)
reader1
,
err
:=
NewDashboardFileReader
(
cfg1
,
logger
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
...
@@ -203,10 +203,10 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -203,10 +203,10 @@ func TestDashboardFileReader(t *testing.T) {
})
})
Convey
(
"Should not create new folder if folder name is missing"
,
func
()
{
Convey
(
"Should not create new folder if folder name is missing"
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
""
,
Folder
:
""
,
Options
:
map
[
string
]
interface
{}{
Options
:
map
[
string
]
interface
{}{
"folder"
:
defaultDashboards
,
"folder"
:
defaultDashboards
,
...
@@ -218,10 +218,10 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -218,10 +218,10 @@ func TestDashboardFileReader(t *testing.T) {
})
})
Convey
(
"can get or Create dashboard folder"
,
func
()
{
Convey
(
"can get or Create dashboard folder"
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Folder
:
"TEAM A"
,
Folder
:
"TEAM A"
,
Options
:
map
[
string
]
interface
{}{
Options
:
map
[
string
]
interface
{}{
"folder"
:
defaultDashboards
,
"folder"
:
defaultDashboards
,
...
@@ -255,10 +255,10 @@ func TestDashboardFileReader(t *testing.T) {
...
@@ -255,10 +255,10 @@ func TestDashboardFileReader(t *testing.T) {
})
})
Convey
(
"Given missing dashboard file"
,
func
()
{
Convey
(
"Given missing dashboard file"
,
func
()
{
cfg
:=
&
DashboardsAsC
onfig
{
cfg
:=
&
c
onfig
{
Name
:
"Default"
,
Name
:
"Default"
,
Type
:
"file"
,
Type
:
"file"
,
OrgI
d
:
1
,
OrgI
D
:
1
,
Options
:
map
[
string
]
interface
{}{
Options
:
map
[
string
]
interface
{}{
"folder"
:
unprovision
,
"folder"
:
unprovision
,
},
},
...
@@ -436,7 +436,7 @@ func (s *fakeDashboardProvisioningService) DeleteProvisionedDashboard(dashboardI
...
@@ -436,7 +436,7 @@ func (s *fakeDashboardProvisioningService) DeleteProvisionedDashboard(dashboardI
return
nil
return
nil
}
}
func
(
s
*
fakeDashboardProvisioningService
)
GetProvisionedDashboardDataByDashboardI
d
(
dashboardID
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
func
(
s
*
fakeDashboardProvisioningService
)
GetProvisionedDashboardDataByDashboardI
D
(
dashboardID
int64
)
(
*
models
.
DashboardProvisioning
,
error
)
{
return
nil
,
nil
return
nil
,
nil
}
}
...
...
pkg/services/provisioning/dashboards/types.go
View file @
5fc255bd
...
@@ -10,61 +10,61 @@ import (
...
@@ -10,61 +10,61 @@ import (
"github.com/grafana/grafana/pkg/services/provisioning/values"
"github.com/grafana/grafana/pkg/services/provisioning/values"
)
)
type
DashboardsAsC
onfig
struct
{
type
c
onfig
struct
{
Name
string
Name
string
Type
string
Type
string
OrgI
d
int64
OrgI
D
int64
Folder
string
Folder
string
FolderU
id
string
FolderU
ID
string
Editable
bool
Editable
bool
Options
map
[
string
]
interface
{}
Options
map
[
string
]
interface
{}
DisableDeletion
bool
DisableDeletion
bool
UpdateIntervalSeconds
int64
UpdateIntervalSeconds
int64
AllowU
i
Updates
bool
AllowU
I
Updates
bool
}
}
type
DashboardsAsC
onfigV0
struct
{
type
c
onfigV0
struct
{
Name
string
`json:"name" yaml:"name"`
Name
string
`json:"name" yaml:"name"`
Type
string
`json:"type" yaml:"type"`
Type
string
`json:"type" yaml:"type"`
OrgI
d
int64
`json:"org_id" yaml:"org_id"`
OrgI
D
int64
`json:"org_id" yaml:"org_id"`
Folder
string
`json:"folder" yaml:"folder"`
Folder
string
`json:"folder" yaml:"folder"`
FolderU
id
string
`json:"folderUid" yaml:"folderUid"`
FolderU
ID
string
`json:"folderUid" yaml:"folderUid"`
Editable
bool
`json:"editable" yaml:"editable"`
Editable
bool
`json:"editable" yaml:"editable"`
Options
map
[
string
]
interface
{}
`json:"options" yaml:"options"`
Options
map
[
string
]
interface
{}
`json:"options" yaml:"options"`
DisableDeletion
bool
`json:"disableDeletion" yaml:"disableDeletion"`
DisableDeletion
bool
`json:"disableDeletion" yaml:"disableDeletion"`
UpdateIntervalSeconds
int64
`json:"updateIntervalSeconds" yaml:"updateIntervalSeconds"`
UpdateIntervalSeconds
int64
`json:"updateIntervalSeconds" yaml:"updateIntervalSeconds"`
AllowU
i
Updates
bool
`json:"allowUiUpdates" yaml:"allowUiUpdates"`
AllowU
I
Updates
bool
`json:"allowUiUpdates" yaml:"allowUiUpdates"`
}
}
type
C
onfigVersion
struct
{
type
c
onfigVersion
struct
{
A
pi
Version
int64
`json:"apiVersion" yaml:"apiVersion"`
A
PI
Version
int64
`json:"apiVersion" yaml:"apiVersion"`
}
}
type
DashboardAsC
onfigV1
struct
{
type
c
onfigV1
struct
{
Providers
[]
*
DashboardProviderC
onfigs
`json:"providers" yaml:"providers"`
Providers
[]
*
c
onfigs
`json:"providers" yaml:"providers"`
}
}
type
DashboardProviderC
onfigs
struct
{
type
c
onfigs
struct
{
Name
values
.
StringValue
`json:"name" yaml:"name"`
Name
values
.
StringValue
`json:"name" yaml:"name"`
Type
values
.
StringValue
`json:"type" yaml:"type"`
Type
values
.
StringValue
`json:"type" yaml:"type"`
OrgI
d
values
.
Int64Value
`json:"orgId" yaml:"orgId"`
OrgI
D
values
.
Int64Value
`json:"orgId" yaml:"orgId"`
Folder
values
.
StringValue
`json:"folder" yaml:"folder"`
Folder
values
.
StringValue
`json:"folder" yaml:"folder"`
FolderU
id
values
.
StringValue
`json:"folderUid" yaml:"folderUid"`
FolderU
ID
values
.
StringValue
`json:"folderUid" yaml:"folderUid"`
Editable
values
.
BoolValue
`json:"editable" yaml:"editable"`
Editable
values
.
BoolValue
`json:"editable" yaml:"editable"`
Options
values
.
JSONValue
`json:"options" yaml:"options"`
Options
values
.
JSONValue
`json:"options" yaml:"options"`
DisableDeletion
values
.
BoolValue
`json:"disableDeletion" yaml:"disableDeletion"`
DisableDeletion
values
.
BoolValue
`json:"disableDeletion" yaml:"disableDeletion"`
UpdateIntervalSeconds
values
.
Int64Value
`json:"updateIntervalSeconds" yaml:"updateIntervalSeconds"`
UpdateIntervalSeconds
values
.
Int64Value
`json:"updateIntervalSeconds" yaml:"updateIntervalSeconds"`
AllowU
i
Updates
values
.
BoolValue
`json:"allowUiUpdates" yaml:"allowUiUpdates"`
AllowU
I
Updates
values
.
BoolValue
`json:"allowUiUpdates" yaml:"allowUiUpdates"`
}
}
func
createDashboardJ
son
(
data
*
simplejson
.
Json
,
lastModified
time
.
Time
,
cfg
*
DashboardsAsConfig
,
folderId
int64
)
(
*
dashboards
.
SaveDashboardDTO
,
error
)
{
func
createDashboardJ
SON
(
data
*
simplejson
.
Json
,
lastModified
time
.
Time
,
cfg
*
config
,
folderID
int64
)
(
*
dashboards
.
SaveDashboardDTO
,
error
)
{
dash
:=
&
dashboards
.
SaveDashboardDTO
{}
dash
:=
&
dashboards
.
SaveDashboardDTO
{}
dash
.
Dashboard
=
models
.
NewDashboardFromJson
(
data
)
dash
.
Dashboard
=
models
.
NewDashboardFromJson
(
data
)
dash
.
UpdatedAt
=
lastModified
dash
.
UpdatedAt
=
lastModified
dash
.
Overwrite
=
true
dash
.
Overwrite
=
true
dash
.
OrgId
=
cfg
.
OrgI
d
dash
.
OrgId
=
cfg
.
OrgI
D
dash
.
Dashboard
.
OrgId
=
cfg
.
OrgI
d
dash
.
Dashboard
.
OrgId
=
cfg
.
OrgI
D
dash
.
Dashboard
.
FolderId
=
folderI
d
dash
.
Dashboard
.
FolderId
=
folderI
D
if
dash
.
Dashboard
.
Title
==
""
{
if
dash
.
Dashboard
.
Title
==
""
{
return
nil
,
models
.
ErrDashboardTitleEmpty
return
nil
,
models
.
ErrDashboardTitleEmpty
...
@@ -73,8 +73,8 @@ func createDashboardJson(data *simplejson.Json, lastModified time.Time, cfg *Das
...
@@ -73,8 +73,8 @@ func createDashboardJson(data *simplejson.Json, lastModified time.Time, cfg *Das
return
dash
,
nil
return
dash
,
nil
}
}
func
mapV0ToDashboardsAsConfig
(
v0
[]
*
DashboardsAsConfigV0
)
([]
*
DashboardsAsC
onfig
,
error
)
{
func
mapV0ToDashboardsAsConfig
(
v0
[]
*
configV0
)
([]
*
c
onfig
,
error
)
{
var
r
[]
*
DashboardsAsC
onfig
var
r
[]
*
c
onfig
seen
:=
make
(
map
[
string
]
bool
)
seen
:=
make
(
map
[
string
]
bool
)
for
_
,
v
:=
range
v0
{
for
_
,
v
:=
range
v0
{
...
@@ -83,25 +83,25 @@ func mapV0ToDashboardsAsConfig(v0 []*DashboardsAsConfigV0) ([]*DashboardsAsConfi
...
@@ -83,25 +83,25 @@ func mapV0ToDashboardsAsConfig(v0 []*DashboardsAsConfigV0) ([]*DashboardsAsConfi
}
}
seen
[
v
.
Name
]
=
true
seen
[
v
.
Name
]
=
true
r
=
append
(
r
,
&
DashboardsAsC
onfig
{
r
=
append
(
r
,
&
c
onfig
{
Name
:
v
.
Name
,
Name
:
v
.
Name
,
Type
:
v
.
Type
,
Type
:
v
.
Type
,
OrgI
d
:
v
.
OrgId
,
OrgI
D
:
v
.
OrgID
,
Folder
:
v
.
Folder
,
Folder
:
v
.
Folder
,
FolderU
id
:
v
.
FolderUid
,
FolderU
ID
:
v
.
FolderUID
,
Editable
:
v
.
Editable
,
Editable
:
v
.
Editable
,
Options
:
v
.
Options
,
Options
:
v
.
Options
,
DisableDeletion
:
v
.
DisableDeletion
,
DisableDeletion
:
v
.
DisableDeletion
,
UpdateIntervalSeconds
:
v
.
UpdateIntervalSeconds
,
UpdateIntervalSeconds
:
v
.
UpdateIntervalSeconds
,
AllowU
iUpdates
:
v
.
AllowUi
Updates
,
AllowU
IUpdates
:
v
.
AllowUI
Updates
,
})
})
}
}
return
r
,
nil
return
r
,
nil
}
}
func
(
dc
*
DashboardAsConfigV1
)
mapToDashboardsAsConfig
()
([]
*
DashboardsAsC
onfig
,
error
)
{
func
(
dc
*
configV1
)
mapToDashboardsAsConfig
()
([]
*
c
onfig
,
error
)
{
var
r
[]
*
DashboardsAsC
onfig
var
r
[]
*
c
onfig
seen
:=
make
(
map
[
string
]
bool
)
seen
:=
make
(
map
[
string
]
bool
)
for
_
,
v
:=
range
dc
.
Providers
{
for
_
,
v
:=
range
dc
.
Providers
{
...
@@ -110,17 +110,17 @@ func (dc *DashboardAsConfigV1) mapToDashboardsAsConfig() ([]*DashboardsAsConfig,
...
@@ -110,17 +110,17 @@ func (dc *DashboardAsConfigV1) mapToDashboardsAsConfig() ([]*DashboardsAsConfig,
}
}
seen
[
v
.
Name
.
Value
()]
=
true
seen
[
v
.
Name
.
Value
()]
=
true
r
=
append
(
r
,
&
DashboardsAsC
onfig
{
r
=
append
(
r
,
&
c
onfig
{
Name
:
v
.
Name
.
Value
(),
Name
:
v
.
Name
.
Value
(),
Type
:
v
.
Type
.
Value
(),
Type
:
v
.
Type
.
Value
(),
OrgI
d
:
v
.
OrgId
.
Value
(),
OrgI
D
:
v
.
OrgID
.
Value
(),
Folder
:
v
.
Folder
.
Value
(),
Folder
:
v
.
Folder
.
Value
(),
FolderU
id
:
v
.
FolderUid
.
Value
(),
FolderU
ID
:
v
.
FolderUID
.
Value
(),
Editable
:
v
.
Editable
.
Value
(),
Editable
:
v
.
Editable
.
Value
(),
Options
:
v
.
Options
.
Value
(),
Options
:
v
.
Options
.
Value
(),
DisableDeletion
:
v
.
DisableDeletion
.
Value
(),
DisableDeletion
:
v
.
DisableDeletion
.
Value
(),
UpdateIntervalSeconds
:
v
.
UpdateIntervalSeconds
.
Value
(),
UpdateIntervalSeconds
:
v
.
UpdateIntervalSeconds
.
Value
(),
AllowU
iUpdates
:
v
.
AllowUi
Updates
.
Value
(),
AllowU
IUpdates
:
v
.
AllowUI
Updates
.
Value
(),
})
})
}
}
...
...
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