importCtrl.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. define([
  2. 'angular',
  3. 'lodash',
  4. ],
  5. function (angular, _) {
  6. 'use strict';
  7. var module = angular.module('grafana.controllers');
  8. module.controller('DashboardImportCtrl', function($scope, $http, backendSrv, datasourceSrv) {
  9. $scope.init = function() {
  10. $scope.datasources = [];
  11. $scope.sourceName = 'grafana';
  12. $scope.destName = 'grafana';
  13. $scope.imported = [];
  14. $scope.dashboards = [];
  15. $scope.infoText = '';
  16. $scope.importing = false;
  17. _.each(datasourceSrv.getAll(), function(ds, key) {
  18. if (ds.type === 'influxdb_08' || ds.type === 'elasticsearch') {
  19. $scope.sourceName = key;
  20. $scope.datasources.push(key);
  21. }
  22. });
  23. };
  24. $scope.startImport = function() {
  25. datasourceSrv.get($scope.sourceName).then(function(ds) {
  26. $scope.dashboardSource = ds;
  27. $scope.dashboardSource.searchDashboards('title:').then(function(results) {
  28. $scope.dashboards = results.dashboards;
  29. if ($scope.dashboards.length === 0) {
  30. $scope.infoText = 'No dashboards found';
  31. return;
  32. }
  33. $scope.importing = true;
  34. $scope.imported = [];
  35. $scope.next();
  36. }, function(err) {
  37. var resp = err.message || err.statusText || 'Unknown error';
  38. var message = "Failed to load dashboards from selected data source, response from server was: " + resp;
  39. $scope.appEvent('alert-error', ['Import failed', message]);
  40. });
  41. });
  42. };
  43. $scope.next = function() {
  44. if ($scope.dashboards.length === 0) {
  45. $scope.infoText = "Done! Imported " + $scope.imported.length + " dashboards";
  46. }
  47. var dash = $scope.dashboards.shift();
  48. if (!dash.title) {
  49. console.log(dash);
  50. return;
  51. }
  52. var infoObj = {name: dash.title, info: 'Importing...'};
  53. $scope.imported.push(infoObj);
  54. $scope.infoText = "Importing " + $scope.imported.length + '/' + ($scope.imported.length + $scope.dashboards.length);
  55. $scope.dashboardSource.getDashboard(dash.id).then(function(loadedDash) {
  56. backendSrv.saveDashboard(loadedDash).then(function() {
  57. infoObj.info = "Done!";
  58. $scope.next();
  59. }, function(err) {
  60. err.isHandled = true;
  61. infoObj.info = "Error: " + (err.data || { message: 'Unknown' }).message;
  62. $scope.next();
  63. });
  64. });
  65. };
  66. $scope.init();
  67. });
  68. });