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
3ee886d0
Commit
3ee886d0
authored
Apr 18, 2017
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'query-references'
parents
473006e8
85baa501
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
18 deletions
+68
-18
public/app/plugins/datasource/graphite/partials/query.editor.html
+1
-1
public/app/plugins/datasource/graphite/query_ctrl.ts
+47
-17
public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts
+20
-0
No files found.
public/app/plugins/datasource/graphite/partials/query.editor.html
View file @
3ee886d0
<query-editor-row
query-ctrl=
"ctrl"
has-text-edit-mode=
"true"
>
<div
class=
"gf-form"
ng-show=
"ctrl.target.textEditor"
>
<input
type=
"text"
class=
"gf-form-input"
ng-model=
"ctrl.target.target"
spellcheck=
"false"
ng-blur=
"ctrl.
refresh
()"
></input>
<input
type=
"text"
class=
"gf-form-input"
ng-model=
"ctrl.target.target"
spellcheck=
"false"
ng-blur=
"ctrl.
targetTextChanged
()"
></input>
</div>
<div
ng-hide=
"ctrl.target.textEditor"
>
...
...
public/app/plugins/datasource/graphite/query_ctrl.ts
View file @
3ee886d0
...
...
@@ -28,7 +28,6 @@ export class GraphiteQueryCtrl extends QueryCtrl {
}
toggleEditorMode
()
{
this
.
target
.
textEditor
=
!
this
.
target
.
textEditor
;
this
.
parseTarget
();
}
...
...
@@ -55,7 +54,7 @@ export class GraphiteQueryCtrl extends QueryCtrl {
}
try
{
this
.
parseTargeRecursive
(
astNode
,
null
,
0
);
this
.
parseTarge
t
Recursive
(
astNode
,
null
,
0
);
}
catch
(
err
)
{
console
.
log
(
'error parsing target:'
,
err
.
message
);
this
.
error
=
err
.
message
;
...
...
@@ -72,7 +71,7 @@ export class GraphiteQueryCtrl extends QueryCtrl {
func
.
params
[
index
]
=
value
;
}
parseTargeRecursive
(
astNode
,
func
,
index
)
{
parseTarge
t
Recursive
(
astNode
,
func
,
index
)
{
if
(
astNode
===
null
)
{
return
null
;
}
...
...
@@ -81,7 +80,7 @@ export class GraphiteQueryCtrl extends QueryCtrl {
case
'function'
:
var
innerFunc
=
gfunc
.
createFuncInstance
(
astNode
.
name
,
{
withDefaultParams
:
false
});
_
.
each
(
astNode
.
params
,
(
param
,
index
)
=>
{
this
.
parseTargeRecursive
(
param
,
innerFunc
,
index
);
this
.
parseTarge
t
Recursive
(
param
,
innerFunc
,
index
);
});
innerFunc
.
updateText
();
...
...
@@ -209,30 +208,61 @@ export class GraphiteQueryCtrl extends QueryCtrl {
}
targetTextChanged
()
{
this
.
parse
Target
();
this
.
panelCtrl
.
refresh
();
this
.
updateModel
Target
();
this
.
refresh
();
}
updateModelTarget
()
{
// render query
var
metricPath
=
this
.
getSegmentPathUpTo
(
this
.
segments
.
length
);
this
.
target
.
target
=
_
.
reduce
(
this
.
functions
,
this
.
wrapFunction
,
metricPath
);
if
(
!
this
.
target
.
textEditor
)
{
var
metricPath
=
this
.
getSegmentPathUpTo
(
this
.
segments
.
length
);
this
.
target
.
target
=
_
.
reduce
(
this
.
functions
,
this
.
wrapFunction
,
metricPath
);
}
this
.
updateRenderedTarget
(
this
.
target
);
// loop through other queries and update targetFull as needed
for
(
const
target
of
this
.
panelCtrl
.
panel
.
targets
||
[])
{
if
(
target
.
refId
!==
this
.
target
.
refId
)
{
this
.
updateRenderedTarget
(
target
);
}
}
}
updateRenderedTarget
(
target
)
{
// render nested query
var
targetsByRefId
=
_
.
keyBy
(
this
.
panelCtrl
.
panel
.
targets
,
'refId'
);
// no references to self
delete
targetsByRefId
[
target
.
refId
];
var
nestedSeriesRefRegex
=
/
\#([
A-Z
])
/g
;
var
targetWithNestedQueries
=
this
.
target
.
target
.
replace
(
nestedSeriesRefRegex
,
(
match
,
g1
)
=>
{
var
target
=
targetsByRefId
[
g1
];
if
(
!
target
)
{
return
match
;
var
targetWithNestedQueries
=
target
.
target
;
// Keep interpolating until there are no query references
// The reason for the loop is that the referenced query might contain another reference to another query
while
(
targetWithNestedQueries
.
match
(
nestedSeriesRefRegex
))
{
var
updated
=
targetWithNestedQueries
.
replace
(
nestedSeriesRefRegex
,
(
match
,
g1
)
=>
{
var
t
=
targetsByRefId
[
g1
];
if
(
!
t
)
{
return
match
;
}
// no circular references
delete
targetsByRefId
[
g1
];
return
t
.
target
;
});
if
(
updated
===
targetWithNestedQueries
)
{
break
;
}
return
target
.
targetFull
||
target
.
target
;
}
);
targetWithNestedQueries
=
updated
;
}
delete
t
his
.
t
arget
.
targetFull
;
if
(
t
his
.
t
arget
.
target
!==
targetWithNestedQueries
)
{
t
his
.
t
arget
.
targetFull
=
targetWithNestedQueries
;
delete
target
.
targetFull
;
if
(
target
.
target
!==
targetWithNestedQueries
)
{
target
.
targetFull
=
targetWithNestedQueries
;
}
}
...
...
public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts
View file @
3ee886d0
...
...
@@ -186,4 +186,24 @@ describe('GraphiteQueryCtrl', function() {
expect
(
ctx
.
ctrl
.
target
.
targetFull
).
to
.
be
(
'scaleToSeconds(nested.query.count)'
);
});
});
describe
(
'when updating target used in other query'
,
function
()
{
beforeEach
(
function
()
{
ctx
.
ctrl
.
target
.
target
=
'metrics.a.count'
;
ctx
.
ctrl
.
target
.
refId
=
'A'
;
ctx
.
ctrl
.
datasource
.
metricFindQuery
=
sinon
.
stub
().
returns
(
ctx
.
$q
.
when
([{
expandable
:
false
}]));
ctx
.
ctrl
.
parseTarget
();
ctx
.
ctrl
.
panelCtrl
.
panel
.
targets
=
[
ctx
.
ctrl
.
target
,
{
target
:
'sumSeries(#A)'
,
refId
:
'B'
}
];
ctx
.
ctrl
.
updateModelTarget
();
});
it
(
'targetFull of other query should update'
,
function
()
{
expect
(
ctx
.
ctrl
.
panel
.
targets
[
1
].
targetFull
).
to
.
be
(
'sumSeries(metrics.a.count)'
);
});
});
});
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