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
7896836d
Unverified
Commit
7896836d
authored
Aug 18, 2020
by
Arve Knudsen
Committed by
GitHub
Aug 18, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Chore: Reduce TSDB Go code complexity (#26401)
* tsdb: Make code less complex
parent
6145bf77
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
197 additions
and
141 deletions
+197
-141
pkg/tsdb/cloudmonitoring/cloudmonitoring.go
+34
-29
pkg/tsdb/cloudmonitoring/types.go
+6
-4
pkg/tsdb/elasticsearch/time_series_query.go
+28
-20
pkg/tsdb/sqleng/sql_engine.go
+129
-88
No files found.
pkg/tsdb/cloudmonitoring/cloudmonitoring.go
View file @
7896836d
...
...
@@ -502,11 +502,43 @@ func (e *CloudMonitoringExecutor) unmarshalResponse(res *http.Response) (cloudMo
return
data
,
nil
}
func
handleDistributionSeries
(
series
timeSeries
,
defaultMetricName
string
,
seriesLabels
map
[
string
]
string
,
query
*
cloudMonitoringQuery
,
queryRes
*
tsdb
.
QueryResult
)
{
points
:=
make
([]
tsdb
.
TimePoint
,
0
)
for
i
:=
len
(
series
.
Points
)
-
1
;
i
>=
0
;
i
--
{
point
:=
series
.
Points
[
i
]
value
:=
point
.
Value
.
DoubleValue
if
series
.
ValueType
==
"INT64"
{
parsedValue
,
err
:=
strconv
.
ParseFloat
(
point
.
Value
.
IntValue
,
64
)
if
err
==
nil
{
value
=
parsedValue
}
}
if
series
.
ValueType
==
"BOOL"
{
if
point
.
Value
.
BoolValue
{
value
=
1
}
else
{
value
=
0
}
}
points
=
append
(
points
,
tsdb
.
NewTimePoint
(
null
.
FloatFrom
(
value
),
float64
((
point
.
Interval
.
EndTime
)
.
Unix
())
*
1000
))
}
metricName
:=
formatLegendKeys
(
series
.
Metric
.
Type
,
defaultMetricName
,
seriesLabels
,
nil
,
query
)
queryRes
.
Series
=
append
(
queryRes
.
Series
,
&
tsdb
.
TimeSeries
{
Name
:
metricName
,
Points
:
points
,
})
}
func
(
e
*
CloudMonitoringExecutor
)
parseResponse
(
queryRes
*
tsdb
.
QueryResult
,
data
cloudMonitoringResponse
,
query
*
cloudMonitoringQuery
)
error
{
labels
:=
make
(
map
[
string
]
map
[
string
]
bool
)
for
_
,
series
:=
range
data
.
TimeSeries
{
points
:=
make
([]
tsdb
.
TimePoint
,
0
)
seriesLabels
:=
make
(
map
[
string
]
string
)
defaultMetricName
:=
series
.
Metric
.
Type
labels
[
"resource.type"
]
=
map
[
string
]
bool
{
series
.
Resource
.
Type
:
true
}
...
...
@@ -566,34 +598,7 @@ func (e *CloudMonitoringExecutor) parseResponse(queryRes *tsdb.QueryResult, data
// reverse the order to be ascending
if
series
.
ValueType
!=
"DISTRIBUTION"
{
for
i
:=
len
(
series
.
Points
)
-
1
;
i
>=
0
;
i
--
{
point
:=
series
.
Points
[
i
]
value
:=
point
.
Value
.
DoubleValue
if
series
.
ValueType
==
"INT64"
{
parsedValue
,
err
:=
strconv
.
ParseFloat
(
point
.
Value
.
IntValue
,
64
)
if
err
==
nil
{
value
=
parsedValue
}
}
if
series
.
ValueType
==
"BOOL"
{
if
point
.
Value
.
BoolValue
{
value
=
1
}
else
{
value
=
0
}
}
points
=
append
(
points
,
tsdb
.
NewTimePoint
(
null
.
FloatFrom
(
value
),
float64
((
point
.
Interval
.
EndTime
)
.
Unix
())
*
1000
))
}
metricName
:=
formatLegendKeys
(
series
.
Metric
.
Type
,
defaultMetricName
,
seriesLabels
,
nil
,
query
)
queryRes
.
Series
=
append
(
queryRes
.
Series
,
&
tsdb
.
TimeSeries
{
Name
:
metricName
,
Points
:
points
,
})
handleDistributionSeries
(
series
,
defaultMetricName
,
seriesLabels
,
query
,
queryRes
)
}
else
{
buckets
:=
make
(
map
[
int
]
*
tsdb
.
TimeSeries
)
...
...
pkg/tsdb/cloudmonitoring/types.go
View file @
7896836d
...
...
@@ -65,7 +65,11 @@ type (
}
cloudMonitoringResponse
struct
{
TimeSeries
[]
struct
{
TimeSeries
[]
timeSeries
`json:"timeSeries"`
}
)
type
timeSeries
struct
{
Metric
struct
{
Labels
map
[
string
]
string
`json:"labels"`
Type
string
`json:"type"`
...
...
@@ -105,6 +109,4 @@ type (
}
`json:"distributionValue"`
}
`json:"value"`
}
`json:"points"`
}
`json:"timeSeries"`
}
)
}
pkg/tsdb/elasticsearch/time_series_query.go
View file @
7896836d
...
...
@@ -24,9 +24,6 @@ var newTimeSeriesQuery = func(client es.Client, tsdbQuery *tsdb.TsdbQuery, inter
}
func
(
e
*
timeSeriesQuery
)
execute
()
(
*
tsdb
.
Response
,
error
)
{
result
:=
&
tsdb
.
Response
{}
result
.
Results
=
make
(
map
[
string
]
*
tsdb
.
QueryResult
)
tsQueryParser
:=
newTimeSeriesQueryParser
()
queries
,
err
:=
tsQueryParser
.
parse
(
e
.
tsdbQuery
)
if
err
!=
nil
{
...
...
@@ -37,12 +34,35 @@ func (e *timeSeriesQuery) execute() (*tsdb.Response, error) {
from
:=
fmt
.
Sprintf
(
"%d"
,
e
.
tsdbQuery
.
TimeRange
.
GetFromAsMsEpoch
())
to
:=
fmt
.
Sprintf
(
"%d"
,
e
.
tsdbQuery
.
TimeRange
.
GetToAsMsEpoch
())
result
:=
&
tsdb
.
Response
{
Results
:
make
(
map
[
string
]
*
tsdb
.
QueryResult
),
}
for
_
,
q
:=
range
queries
{
minInterval
,
err
:=
e
.
client
.
GetMinInterval
(
q
.
Interval
)
if
err
:=
e
.
processQuery
(
q
,
ms
,
from
,
to
,
result
);
err
!=
nil
{
return
nil
,
err
}
}
req
,
err
:=
ms
.
Build
()
if
err
!=
nil
{
return
nil
,
err
}
res
,
err
:=
e
.
client
.
ExecuteMultisearch
(
req
)
if
err
!=
nil
{
return
nil
,
err
}
rp
:=
newResponseParser
(
res
.
Responses
,
queries
,
res
.
DebugInfo
)
return
rp
.
getTimeSeries
()
}
func
(
e
*
timeSeriesQuery
)
processQuery
(
q
*
Query
,
ms
*
es
.
MultiSearchRequestBuilder
,
from
,
to
string
,
result
*
tsdb
.
Response
)
error
{
minInterval
,
err
:=
e
.
client
.
GetMinInterval
(
q
.
Interval
)
if
err
!=
nil
{
return
err
}
interval
:=
e
.
intervalCalculator
.
Calculate
(
e
.
tsdbQuery
.
TimeRange
,
minInterval
)
b
:=
ms
.
Search
(
interval
)
...
...
@@ -61,13 +81,13 @@ func (e *timeSeriesQuery) execute() (*tsdb.Response, error) {
Error
:
fmt
.
Errorf
(
"invalid query, missing metrics and aggregations"
),
ErrorString
:
"invalid query, missing metrics and aggregations"
,
}
continue
return
nil
}
metric
:=
q
.
Metrics
[
0
]
b
.
Size
(
metric
.
Settings
.
Get
(
"size"
)
.
MustInt
(
500
))
b
.
SortDesc
(
"@timestamp"
,
"boolean"
)
b
.
AddDocValueField
(
"@timestamp"
)
continue
return
nil
}
aggBuilder
:=
b
.
Agg
()
...
...
@@ -152,20 +172,8 @@ func (e *timeSeriesQuery) execute() (*tsdb.Response, error) {
})
}
}
}
req
,
err
:=
ms
.
Build
()
if
err
!=
nil
{
return
nil
,
err
}
res
,
err
:=
e
.
client
.
ExecuteMultisearch
(
req
)
if
err
!=
nil
{
return
nil
,
err
}
rp
:=
newResponseParser
(
res
.
Responses
,
queries
,
res
.
DebugInfo
)
return
rp
.
getTimeSeries
()
return
nil
}
func
addDateHistogramAgg
(
aggBuilder
es
.
AggBuilder
,
bucketAgg
*
BucketAgg
,
timeFrom
,
timeTo
string
)
es
.
AggBuilder
{
...
...
pkg/tsdb/sqleng/sql_engine.go
View file @
7896836d
This diff is collapsed.
Click to expand it.
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