| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /* global _ */
- /*
- * Complex scripted dashboard
- * This script generates a dashboard object that Grafana can load. It also takes a number of user
- * supplied URL parameters (in the 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';
- // accessible 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);
- }
- });
- });
- };
|