diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 8fb7242122c..0644f158b4c 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -1,6 +1,8 @@ package api import ( + "errors" + "fmt" "strconv" "github.com/grafana/grafana/pkg/bus" @@ -41,7 +43,7 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro meta, exists := plugins.DataSources[ds.Type] if !exists { - //return nil, errors.New(fmt.Sprintf("Could not find plugin definition for data source: %v", ds.Type)) + return nil, errors.New(fmt.Sprintf("Could not find plugin definition for data source: %v", ds.Type)) } dsMap["meta"] = meta @@ -75,9 +77,14 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro } // add grafana backend data source + grafanaDatasourceMeta, _ := plugins.DataSources["grafana"] datasources["grafana"] = map[string]interface{}{ - "type": "grafana", - "grafanaDB": true, + "type": "grafana", + "meta": grafanaDatasourceMeta, + } + + if defaultDatasource == "" { + defaultDatasource = "grafana" } jsonObj := map[string]interface{}{ diff --git a/src/app/features/all.js b/src/app/features/all.js index 620f8c1bee1..c8ba6214dc9 100644 --- a/src/app/features/all.js +++ b/src/app/features/all.js @@ -2,16 +2,10 @@ define([ './panellinkeditor/module', './annotations/annotationsSrv', './templating/templateSrv', -// './graphite/datasource', -// './influxdb/datasource', -// './influxdb_08/datasource', -// './opentsdb/datasource', -// './elasticsearch/datasource', './dashboard/all', './panel/all', './profile/profileCtrl', './profile/changePasswordCtrl', './org/all', './admin/all', - './grafanaDatasource/datasource', ], function () {}); diff --git a/src/app/features/dashboard/dashboardNavCtrl.js b/src/app/features/dashboard/dashboardNavCtrl.js index bbe22fc0b67..a577749945b 100644 --- a/src/app/features/dashboard/dashboardNavCtrl.js +++ b/src/app/features/dashboard/dashboardNavCtrl.js @@ -6,16 +6,14 @@ define([ 'store', 'filesaver' ], -function (angular, _, moment, config, store) { +function (angular, _, moment) { 'use strict'; var module = angular.module('grafana.controllers'); - module.controller('DashboardNavCtrl', function($scope, $rootScope, alertSrv, $location, playlistSrv, datasourceSrv, timeSrv) { + module.controller('DashboardNavCtrl', function($scope, $rootScope, alertSrv, $location, playlistSrv, backendSrv, timeSrv) { $scope.init = function() { - $scope.db = datasourceSrv.getGrafanaDB(); - $scope.onAppEvent('save-dashboard', $scope.saveDashboard); $scope.onAppEvent('delete-dashboard', $scope.deleteDashboard); @@ -24,16 +22,6 @@ function (angular, _, moment, config, store) { }); }; - $scope.set_default = function() { - store.set('grafanaDashboardDefault', $location.path()); - alertSrv.set('Home Set','This page has been set as your default dashboard','success',5000); - }; - - $scope.purge_default = function() { - store.delete('grafanaDashboardDefault'); - alertSrv.set('Local Default Clear','Your default dashboard has been reset to the default','success', 5000); - }; - $scope.openEditView = function(editview) { var search = _.extend($location.search(), {editview: editview}); $location.search(search); @@ -41,12 +29,12 @@ function (angular, _, moment, config, store) { $scope.starDashboard = function() { if ($scope.dashboardMeta.isStarred) { - $scope.db.unstarDashboard($scope.dashboard.id).then(function() { - $scope.dashboardMeta.isStarred = false; + backendSrv.delete('/api/user/stars/dashboard/' + $scope.dashboard.id).then(function() { + $scope.dashboardMeta.isStarred = true; }); } else { - $scope.db.starDashboard($scope.dashboard.id).then(function() { + backendSrv.post('/api/user/stars/dashboard/' + $scope.dashboard.id).then(function() { $scope.dashboardMeta.isStarred = true; }); } @@ -59,12 +47,6 @@ function (angular, _, moment, config, store) { }); }; - $scope.passwordCache = function(pwd) { - if (!window.sessionStorage) { return null; } - if (!pwd) { return window.sessionStorage["grafanaAdminPassword"]; } - window.sessionStorage["grafanaAdminPassword"] = pwd; - }; - $scope.openSearch = function() { $scope.appEvent('show-dash-search'); }; @@ -75,20 +57,18 @@ function (angular, _, moment, config, store) { $scope.saveDashboard = function() { var clone = angular.copy($scope.dashboard); - $scope.db.saveDashboard(clone) - .then(function(result) { - $scope.appEvent('alert-success', ['Dashboard saved', 'Saved as ' + result.title]); - if (result.url !== $location.path()) { - $location.search({}); - $location.path(result.url); - } + backendSrv.saveDashboard(clone).then(function(data) { + $scope.appEvent('dashboard-saved', $scope.dashboard); - $scope.appEvent('dashboard-saved', $scope.dashboard); + var dashboardUrl = '/dashboard/db/' + data.slug; - }, function(err) { - $scope.appEvent('alert-error', ['Save failed', err]); - }); + if (dashboardUrl !== $location.path()) { + $location.url(dashboardUrl); + } + + $scope.appEvent('alert-success', ['Dashboard saved', 'Saved as ' + clone.title]); + }); }; $scope.deleteDashboard = function() { @@ -102,10 +82,9 @@ function (angular, _, moment, config, store) { }; $scope.deleteDashboardConfirmed = function() { - $scope.db.deleteDashboard($scope.dashboardMeta.slug).then(function() { + backendSrv.delete('/api/dashboards/db/' + $scope.dashboardMeta.slug).then(function() { $scope.appEvent('alert-success', ['Dashboard Deleted', $scope.dashboard.title + ' has been deleted']); - }, function(err) { - $scope.appEvent('alert-error', ['Deleted failed', err]); + $location.url('/'); }); }; @@ -149,21 +128,6 @@ function (angular, _, moment, config, store) { $scope.appEvent('show-json-editor', { object: $scope.dashboard }); }; - $scope.openSaveDropdown = function() { - $scope.isFavorite = playlistSrv.isCurrentFavorite($scope.dashboard); - $scope.saveDropdownOpened = true; - }; - - $scope.markAsFavorite = function() { - playlistSrv.markAsFavorite($scope.dashboard); - $scope.isFavorite = true; - }; - - $scope.removeAsFavorite = function() { - playlistSrv.removeAsFavorite($scope.dashboard); - $scope.isFavorite = false; - }; - $scope.stopPlaylist = function() { playlistSrv.stop(1); }; diff --git a/src/app/features/dashboard/importCtrl.js b/src/app/features/dashboard/importCtrl.js index 8b3612ea70e..641a02e776f 100644 --- a/src/app/features/dashboard/importCtrl.js +++ b/src/app/features/dashboard/importCtrl.js @@ -18,35 +18,33 @@ function (angular, _) { $scope.infoText = ''; $scope.importing = false; - _.each(datasourceSrv.getAll(), function(ds) { - if (ds.type === 'influxdb' || ds.type === 'elasticsearch') { - $scope.sourceName = ds.name; - $scope.datasources.push(ds.name); - } else if (ds.type === 'grafana') { - $scope.datasources.push(ds.name); + _.each(datasourceSrv.getAll(), function(ds, key) { + if (ds.type === 'influxdb_08' || ds.type === 'elasticsearch') { + $scope.sourceName = key; + $scope.datasources.push(key); } }); }; $scope.startImport = function() { - $scope.sourceDs = datasourceSrv.get($scope.sourceName); - $scope.destDs = datasourceSrv.get($scope.destName); + datasourceSrv.get($scope.sourceName).then(function(ds) { + $scope.dashboardSource = ds; + $scope.dashboardSource.searchDashboards('title:').then(function(results) { + $scope.dashboards = results.dashboards; - $scope.sourceDs.searchDashboards('title:').then(function(results) { - $scope.dashboards = results.dashboards; + if ($scope.dashboards.length === 0) { + $scope.infoText = 'No dashboards found'; + return; + } - if ($scope.dashboards.length === 0) { - $scope.infoText = 'No dashboards found'; - return; - } - - $scope.importing = true; - $scope.imported = []; - $scope.next(); - }, function(err) { - var resp = err.message || err.statusText || 'Unknown error'; - var message = "Failed to load dashboards from selected data source, response from server was: " + resp; - $scope.appEvent('alert-error', ['Import failed', message]); + $scope.importing = true; + $scope.imported = []; + $scope.next(); + }, function(err) { + var resp = err.message || err.statusText || 'Unknown error'; + var message = "Failed to load dashboards from selected data source, response from server was: " + resp; + $scope.appEvent('alert-error', ['Import failed', message]); + }); }); }; @@ -65,12 +63,13 @@ function (angular, _) { $scope.imported.push(infoObj); $scope.infoText = "Importing " + $scope.imported.length + '/' + ($scope.imported.length + $scope.dashboards.length); - $scope.sourceDs.getDashboard(dash.id).then(function(loadedDash) { - $scope.destDs.saveDashboard(loadedDash).then(function() { + $scope.dashboardSource.getDashboard(dash.id).then(function(loadedDash) { + backendSrv.saveDashboard(loadedDash).then(function() { infoObj.info = "Done!"; $scope.next(); }, function(err) { - infoObj.info = "Error: " + err; + err.isHandled = true; + infoObj.info = "Error: " + (err.data || { message: 'Unknown' }).message; $scope.next(); }); }); diff --git a/src/app/features/dashboard/partials/import.html b/src/app/features/dashboard/partials/import.html index af02069657a..a942297ac59 100644 --- a/src/app/features/dashboard/partials/import.html +++ b/src/app/features/dashboard/partials/import.html @@ -8,7 +8,7 @@