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
a982dd17
Commit
a982dd17
authored
Oct 28, 2014
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ScriptedDashboard: using grafana services in scripted dashboard
parent
4b79a5e9
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
190 additions
and
5 deletions
+190
-5
'
+84
-0
src/app/dashboards/scripted_gen_and_save.js
+95
-0
src/app/routes/dashboard-from-script.js
+11
-5
No files found.
'
0 → 100644
View file @
a982dd17
/* global _ */
/*
* Complex scripted dashboard
* This script generates a dashboard object that Grafana can load. It also takes a number of user
* supplied URL parameters (int ARGS variable)
*
* Return a dashboard object, or a function
*
* For async scripts, return a function, this function must take a single callback function as argument,
* call this callback function with the dashboard object (look at scripted_async.js for an example)
*/
'use strict';
// accessable variables in this scope
var window, document, ARGS, $, jQuery, moment, kbn, services, _;
// default datasource
var datasource = services.datasourceSrv.default;
// get datasource used for saving dashboards
var dashboardDB = services.datasourceSrv.getGrafanaDB();
var targets = [];
function getTargets(path) {
return datasource.metricFindQuery(path + '.*').then(function(result) {
if (!result) {
return null;
}
if (targets.length === 10) {
return null;
}
var promises = _.map(result, function(metric) {
if (metric.expandable) {
return getTargets(path + "." + metric.text);
}
else {
targets.push(path + '.' + metric.text);
}
return null;
});
return services.$q.when(promises);
});
}
function createDashboard(target, index) {
// Intialize a skeleton with nothing but a rows array and service object
var dashboard = { rows : [] };
dashboard.title = 'Scripted dash ' + index;
dashboard.time = {
from: "now-6h",
to: "now"
};
dashboard.rows.push({
title: 'Chart',
height: '300px',
panels: [
{
title: 'Events',
type: 'graph',
span: 12,
targets: [ {target: target} ]
}
]
});
}
return function(callback) {
getTargets('apps').then(function(results) {
console.log('targets: ', targets);
_.each(targets, function(target, index) {
var dashboard = createDashboard(target);
});
});
};
src/app/dashboards/scripted_gen_and_save.js
0 → 100644
View file @
a982dd17
/* global _ */
/*
* Complex scripted dashboard
* This script generates a dashboard object that Grafana can load. It also takes a number of user
* supplied URL parameters (int ARGS variable)
*
* Return a dashboard object, or a function
*
* For async scripts, return a function, this function must take a single callback function as argument,
* call this callback function with the dashboard object (look at scripted_async.js for an example)
*/
'use strict'
;
// accessable variables in this scope
var
window
,
document
,
ARGS
,
$
,
jQuery
,
moment
,
kbn
,
services
,
_
;
// default datasource
var
datasource
=
services
.
datasourceSrv
.
default
;
// get datasource used for saving dashboards
var
dashboardDB
=
services
.
datasourceSrv
.
getGrafanaDB
();
var
targets
=
[];
function
getTargets
(
path
)
{
return
datasource
.
metricFindQuery
(
path
+
'.*'
).
then
(
function
(
result
)
{
if
(
!
result
)
{
return
null
;
}
if
(
targets
.
length
===
10
)
{
return
null
;
}
var
promises
=
_
.
map
(
result
,
function
(
metric
)
{
if
(
metric
.
expandable
)
{
return
getTargets
(
path
+
"."
+
metric
.
text
);
}
else
{
targets
.
push
(
path
+
'.'
+
metric
.
text
);
}
return
null
;
});
return
services
.
$q
.
all
(
promises
);
});
}
function
createDashboard
(
target
,
index
)
{
// Intialize a skeleton with nothing but a rows array and service object
var
dashboard
=
{
rows
:
[]
};
dashboard
.
title
=
'Scripted dash '
+
index
;
dashboard
.
time
=
{
from
:
"now-6h"
,
to
:
"now"
};
dashboard
.
rows
.
push
({
title
:
'Chart'
,
height
:
'300px'
,
panels
:
[
{
title
:
'Events'
,
type
:
'graph'
,
span
:
12
,
targets
:
[
{
target
:
target
}
]
}
]
});
return
dashboard
;
}
function
saveDashboard
(
dashboard
)
{
var
model
=
services
.
dashboardSrv
.
create
(
dashboard
);
dashboardDB
.
saveDashboard
(
model
);
}
return
function
(
callback
)
{
getTargets
(
'apps'
).
then
(
function
()
{
console
.
log
(
'targets: '
,
targets
);
_
.
each
(
targets
,
function
(
target
,
index
)
{
var
dashboard
=
createDashboard
(
target
,
index
);
saveDashboard
(
dashboard
);
if
(
index
===
targets
.
length
-
1
)
{
callback
(
dashboard
);
}
});
});
};
src/app/routes/dashboard-from-script.js
View file @
a982dd17
...
...
@@ -20,18 +20,24 @@ function (angular, $, config, _, kbn, moment) {
});
});
module
.
controller
(
'DashFromScriptProvider'
,
function
(
$scope
,
$rootScope
,
$http
,
$routeParams
,
alertSrv
,
$q
)
{
module
.
controller
(
'DashFromScriptProvider'
,
function
(
$scope
,
$rootScope
,
$http
,
$routeParams
,
$q
,
dashboardSrv
,
datasourceSrv
,
$timeout
)
{
var
execute_script
=
function
(
result
)
{
var
services
=
{
dashboardSrv
:
dashboardSrv
,
datasourceSrv
:
datasourceSrv
,
$q
:
$q
,
};
/*jshint -W054 */
var
script_func
=
new
Function
(
'ARGS'
,
'kbn'
,
'_'
,
'moment'
,
'window'
,
'document'
,
'$'
,
'jQuery'
,
result
.
data
);
var
script_result
=
script_func
(
$routeParams
,
kbn
,
_
,
moment
,
window
,
document
,
$
,
$
);
var
script_func
=
new
Function
(
'ARGS'
,
'kbn'
,
'_'
,
'moment'
,
'window'
,
'document'
,
'$'
,
'jQuery'
,
'services'
,
result
.
data
);
var
script_result
=
script_func
(
$routeParams
,
kbn
,
_
,
moment
,
window
,
document
,
$
,
$
,
services
);
// Handle async dashboard scripts
if
(
_
.
isFunction
(
script_result
))
{
var
deferred
=
$q
.
defer
();
script_result
(
function
(
dashboard
)
{
$
rootScope
.
$apply
(
function
()
{
$
timeout
(
function
()
{
deferred
.
resolve
({
data
:
dashboard
});
});
});
...
...
@@ -48,7 +54,7 @@ function (angular, $, config, _, kbn, moment) {
.
then
(
execute_script
)
.
then
(
null
,
function
(
err
)
{
console
.
log
(
'Script dashboard error '
+
err
);
alertSrv
.
set
(
'Error'
,
"Could not load <i>scripts/"
+
file
+
"</i>. Please make sure it exists and returns a valid dashboard"
,
'error'
);
$scope
.
appEvent
(
'alert-error'
,
[
"Script Error"
,
"Please make sure it exists and returns a valid dashboard"
]
);
return
false
;
});
};
...
...
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