define([ 'angular', 'app', 'underscore' ], function (angular, app, _) { 'use strict'; var module = angular.module('kibana.controllers'); module.controller('GraphiteImportCtrl', function($scope, $rootScope, $timeout, graphiteSrv, dashboard) { $scope.init = function() { console.log('hej!'); }; $scope.listAll = function(query) { delete $scope.error; graphiteSrv.listDashboards(query) .then(function(results) { $scope.dashboards = results; }) .then(null, function(err) { $scope.error = err.message || 'Error while fetching list of dashboards'; }); }; $scope.import = function(dashName) { delete $scope.error; graphiteSrv.loadDashboard(dashName) .then(function(results) { if (!results.data || !results.data.state) { throw { message: 'no dashboard state received from graphite' }; } graphiteToGrafanaTranslator(results.data.state); }) .then(null, function(err) { $scope.error = err.message || 'Failed to import dashboard'; }); }; function graphiteToGrafanaTranslator(state) { var graphsPerRow = 2; var rowHeight = 300; var rowTemplate; var currentRow; var panel; rowTemplate = { title: '', panels: [], height: rowHeight }; currentRow = angular.copy(rowTemplate); var newDashboard = angular.copy(dashboard.current); newDashboard.rows = []; newDashboard.title = state.name; newDashboard.rows.push(currentRow); _.each(state.graphs, function(graph) { if (currentRow.panels.length === graphsPerRow) { currentRow = angular.copy(rowTemplate); newDashboard.rows.push(currentRow); } panel = { type: 'graphite', span: 12 / graphsPerRow, title: graph[1].title, targets: [] }; _.each(graph[1].target, function(target) { panel.targets.push({ target: target }); }); currentRow.panels.push(panel); }); dashboard.dash_load(newDashboard); } }); });