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
452c4f5b
Commit
452c4f5b
authored
Feb 10, 2019
by
Daniel Lee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
azuremonitor: add test for dimension filter
parent
b94de101
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
10 deletions
+38
-10
pkg/tsdb/azuremonitor/azuremonitor-datasource.go
+7
-2
pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go
+31
-8
No files found.
pkg/tsdb/azuremonitor/azuremonitor-datasource.go
View file @
452c4f5b
...
@@ -24,11 +24,16 @@ import (
...
@@ -24,11 +24,16 @@ import (
"github.com/grafana/grafana/pkg/tsdb"
"github.com/grafana/grafana/pkg/tsdb"
)
)
// AzureMonitorDatasource calls the Azure Monitor API - one of the four API's supported
type
AzureMonitorDatasource
struct
{
type
AzureMonitorDatasource
struct
{
httpClient
*
http
.
Client
httpClient
*
http
.
Client
dsInfo
*
models
.
DataSource
dsInfo
*
models
.
DataSource
}
}
// executeTimeSeriesQuery does the following:
// 1. build the AzureMonitor url and querystring for each query
// 2. executes each query by calling the Azure Monitor API
// 3. parses the responses for each query into the timeseries format
func
(
e
*
AzureMonitorDatasource
)
executeTimeSeriesQuery
(
ctx
context
.
Context
,
originalQueries
[]
*
tsdb
.
Query
,
timeRange
*
tsdb
.
TimeRange
)
(
*
tsdb
.
Response
,
error
)
{
func
(
e
*
AzureMonitorDatasource
)
executeTimeSeriesQuery
(
ctx
context
.
Context
,
originalQueries
[]
*
tsdb
.
Query
,
timeRange
*
tsdb
.
TimeRange
)
(
*
tsdb
.
Response
,
error
)
{
result
:=
&
tsdb
.
Response
{
result
:=
&
tsdb
.
Response
{
Results
:
make
(
map
[
string
]
*
tsdb
.
QueryResult
),
Results
:
make
(
map
[
string
]
*
tsdb
.
QueryResult
),
...
@@ -95,9 +100,9 @@ func (e *AzureMonitorDatasource) buildQueries(queries []*tsdb.Query, timeRange *
...
@@ -95,9 +100,9 @@ func (e *AzureMonitorDatasource) buildQueries(queries []*tsdb.Query, timeRange *
params
.
Add
(
"aggregation"
,
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"aggregation"
]))
params
.
Add
(
"aggregation"
,
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"aggregation"
]))
params
.
Add
(
"metricnames"
,
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"metricName"
]))
params
.
Add
(
"metricnames"
,
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"metricName"
]))
dimension
:=
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"dimension"
]
)
dimension
:=
strings
.
TrimSpace
(
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"dimension"
])
)
dimensionFilter
:=
strings
.
TrimSpace
(
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"dimensionFilter"
]))
dimensionFilter
:=
strings
.
TrimSpace
(
fmt
.
Sprintf
(
"%v"
,
azureMonitorTarget
[
"dimensionFilter"
]))
if
azureMonitorTarget
[
"dimension"
]
!=
nil
&&
azureMonitorTarget
[
"dimensionFilter"
]
!=
nil
&&
dimensionFilter
!=
""
{
if
azureMonitorTarget
[
"dimension"
]
!=
nil
&&
azureMonitorTarget
[
"dimensionFilter"
]
!=
nil
&&
len
(
dimension
)
>
0
&&
len
(
dimensionFilter
)
>
0
{
params
.
Add
(
"$filter"
,
fmt
.
Sprintf
(
"%s eq '%s'"
,
dimension
,
dimensionFilter
))
params
.
Add
(
"$filter"
,
fmt
.
Sprintf
(
"%s eq '%s'"
,
dimension
,
dimensionFilter
))
}
}
...
...
pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go
View file @
452c4f5b
...
@@ -16,7 +16,7 @@ import (
...
@@ -16,7 +16,7 @@ import (
func
TestAzureMonitorDatasource
(
t
*
testing
.
T
)
{
func
TestAzureMonitorDatasource
(
t
*
testing
.
T
)
{
Convey
(
"AzureMonitorDatasource"
,
t
,
func
()
{
Convey
(
"AzureMonitorDatasource"
,
t
,
func
()
{
executor
:=
&
AzureMonitorDatasource
{}
datasource
:=
&
AzureMonitorDatasource
{}
Convey
(
"Parse queries from frontend and build AzureMonitor API queries"
,
func
()
{
Convey
(
"Parse queries from frontend and build AzureMonitor API queries"
,
func
()
{
fromStart
:=
time
.
Date
(
2018
,
3
,
15
,
13
,
0
,
0
,
0
,
time
.
UTC
)
.
In
(
time
.
Local
)
fromStart
:=
time
.
Date
(
2018
,
3
,
15
,
13
,
0
,
0
,
0
,
time
.
UTC
)
.
In
(
time
.
Local
)
...
@@ -44,7 +44,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -44,7 +44,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
},
},
}
}
Convey
(
"and is a normal query"
,
func
()
{
Convey
(
"and is a normal query"
,
func
()
{
queries
,
err
:=
executor
.
buildQueries
(
tsdbQuery
.
Queries
,
tsdbQuery
.
TimeRange
)
queries
,
err
:=
datasource
.
buildQueries
(
tsdbQuery
.
Queries
,
tsdbQuery
.
TimeRange
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
queries
),
ShouldEqual
,
1
)
So
(
len
(
queries
),
ShouldEqual
,
1
)
...
@@ -59,6 +59,29 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -59,6 +59,29 @@ func TestAzureMonitorDatasource(t *testing.T) {
So
(
queries
[
0
]
.
Params
[
"interval"
][
0
],
ShouldEqual
,
"PT1M"
)
So
(
queries
[
0
]
.
Params
[
"interval"
][
0
],
ShouldEqual
,
"PT1M"
)
So
(
queries
[
0
]
.
Alias
,
ShouldEqual
,
"testalias"
)
So
(
queries
[
0
]
.
Alias
,
ShouldEqual
,
"testalias"
)
})
})
Convey
(
"and has a dimension filter"
,
func
()
{
tsdbQuery
.
Queries
[
0
]
.
Model
=
simplejson
.
NewFromAny
(
map
[
string
]
interface
{}{
"azureMonitor"
:
map
[
string
]
interface
{}{
"timeGrain"
:
"PT1M"
,
"aggregation"
:
"Average"
,
"resourceGroup"
:
"grafanastaging"
,
"resourceName"
:
"grafana"
,
"metricDefinition"
:
"Microsoft.Compute/virtualMachines"
,
"metricName"
:
"Percentage CPU"
,
"alias"
:
"testalias"
,
"queryType"
:
"Azure Monitor"
,
"dimension"
:
"blob"
,
"dimensionFilter"
:
"*"
,
},
})
queries
,
err
:=
datasource
.
buildQueries
(
tsdbQuery
.
Queries
,
tsdbQuery
.
TimeRange
)
So
(
err
,
ShouldBeNil
)
So
(
queries
[
0
]
.
Target
,
ShouldEqual
,
"%24filter=blob+eq+%27%2A%27&aggregation=Average&api-version=2018-01-01&interval=PT1M&metricnames=Percentage+CPU×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z"
)
})
})
})
Convey
(
"Parse AzureMonitor API response in the time series format"
,
func
()
{
Convey
(
"Parse AzureMonitor API response in the time series format"
,
func
()
{
...
@@ -76,7 +99,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -76,7 +99,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Average"
},
"aggregation"
:
{
"Average"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
res
.
Series
),
ShouldEqual
,
1
)
So
(
len
(
res
.
Series
),
ShouldEqual
,
1
)
...
@@ -112,7 +135,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -112,7 +135,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Total"
},
"aggregation"
:
{
"Total"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
8.26
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
8.26
)
...
@@ -132,7 +155,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -132,7 +155,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Maximum"
},
"aggregation"
:
{
"Maximum"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
3.07
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
3.07
)
...
@@ -152,7 +175,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -152,7 +175,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Minimum"
},
"aggregation"
:
{
"Minimum"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
1.51
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
1.51
)
...
@@ -172,7 +195,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -172,7 +195,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Count"
},
"aggregation"
:
{
"Count"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
4
)
So
(
res
.
Series
[
0
]
.
Points
[
0
][
0
]
.
Float64
,
ShouldEqual
,
4
)
...
@@ -192,7 +215,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
...
@@ -192,7 +215,7 @@ func TestAzureMonitorDatasource(t *testing.T) {
"aggregation"
:
{
"Average"
},
"aggregation"
:
{
"Average"
},
},
},
}
}
err
=
executor
.
parseResponse
(
res
,
data
,
query
)
err
=
datasource
.
parseResponse
(
res
,
data
,
query
)
So
(
err
,
ShouldBeNil
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
res
.
Series
),
ShouldEqual
,
3
)
So
(
len
(
res
.
Series
),
ShouldEqual
,
3
)
...
...
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