mirror of
https://github.com/grafana/grafana.git
synced 2025-02-11 08:05:43 -06:00
96 lines
2.7 KiB
JavaScript
96 lines
2.7 KiB
JavaScript
define([
|
|
'angular',
|
|
'lodash',
|
|
'app/core/utils/kbn'
|
|
],
|
|
function (angular, _, kbn) {
|
|
'use strict';
|
|
|
|
var module = angular.module('grafana.controllers');
|
|
|
|
module.controller('GraphiteImportCtrl', function($scope, datasourceSrv, dashboardSrv, $location) {
|
|
$scope.options = {};
|
|
|
|
$scope.init = function() {
|
|
$scope.datasources = [];
|
|
_.each(datasourceSrv.getAll(), function(ds) {
|
|
if (ds.type === 'graphite') {
|
|
$scope.options.sourceName = ds.name;
|
|
$scope.datasources.push(ds.name);
|
|
}
|
|
});
|
|
};
|
|
|
|
$scope.listAll = function() {
|
|
datasourceSrv.get($scope.options.sourceName).then(function(datasource) {
|
|
$scope.datasource = datasource;
|
|
$scope.datasource.listDashboards('').then(function(results) {
|
|
$scope.dashboards = results;
|
|
}, function(err) {
|
|
var message = err.message || err.statusText || 'Error';
|
|
$scope.appEvent('alert-error', ['Failed to load dashboard list from graphite', message]);
|
|
});
|
|
});
|
|
};
|
|
|
|
$scope.import = function(dashName) {
|
|
$scope.datasource.loadDashboard(dashName).then(function(results) {
|
|
if (!results.data || !results.data.state) {
|
|
throw { message: 'no dashboard state received from graphite' };
|
|
}
|
|
|
|
graphiteToGrafanaTranslator(results.data.state, $scope.datasource.name);
|
|
}, function(err) {
|
|
var message = err.message || err.statusText || 'Error';
|
|
$scope.appEvent('alert-error', ['Failed to load dashboard from graphite', message]);
|
|
});
|
|
};
|
|
|
|
function graphiteToGrafanaTranslator(state, datasource) {
|
|
var graphsPerRow = 2;
|
|
var rowHeight = 300;
|
|
var rowTemplate;
|
|
var currentRow;
|
|
var panel;
|
|
|
|
rowTemplate = {
|
|
title: '',
|
|
panels: [],
|
|
height: rowHeight
|
|
};
|
|
|
|
currentRow = angular.copy(rowTemplate);
|
|
|
|
var newDashboard = dashboardSrv.create({});
|
|
newDashboard.rows = [];
|
|
newDashboard.title = state.name;
|
|
newDashboard.rows.push(currentRow);
|
|
|
|
_.each(state.graphs, function(graph, index) {
|
|
if (currentRow.panels.length === graphsPerRow) {
|
|
currentRow = angular.copy(rowTemplate);
|
|
newDashboard.rows.push(currentRow);
|
|
}
|
|
|
|
panel = {
|
|
type: 'graph',
|
|
span: 12 / graphsPerRow,
|
|
title: graph[1].title,
|
|
targets: [],
|
|
datasource: datasource,
|
|
id: index + 1
|
|
};
|
|
|
|
_.each(graph[1].target, function(target) {
|
|
panel.targets.push({ target: target });
|
|
});
|
|
|
|
currentRow.panels.push(panel);
|
|
});
|
|
|
|
window.grafanaImportDashboard = newDashboard;
|
|
$location.path('/dashboard-import/' + kbn.slugifyForUrl(newDashboard.title));
|
|
}
|
|
});
|
|
});
|