Commit fc54c01f by Torkel Ödegaard

feat(plugins): more work on plugin dashboard install, #4298

parent 2de439bd
...@@ -27,7 +27,8 @@ type PluginListItem struct { ...@@ -27,7 +27,8 @@ type PluginListItem struct {
} }
type InstallPluginDashboardCmd struct { type InstallPluginDashboardCmd struct {
PluginId string `json:"pluginId"` PluginId string `json:"pluginId"`
Path string `json:"path"` Path string `json:"path"`
Inputs map[string]interface{} `json:"inputs"` Reinstall bool `json:"reinstall"`
Inputs map[string]interface{} `json:"inputs"`
} }
...@@ -48,8 +48,9 @@ func InstallPluginDashboard(cmd *InstallPluginDashboardCommand) error { ...@@ -48,8 +48,9 @@ func InstallPluginDashboard(cmd *InstallPluginDashboardCommand) error {
Title: dashboard.Title, Title: dashboard.Title,
Path: cmd.Path, Path: cmd.Path,
Revision: dashboard.GetString("revision", "1.0"), Revision: dashboard.GetString("revision", "1.0"),
InstalledURI: "db/" + saveCmd.Result.Slug, InstalledUri: "db/" + saveCmd.Result.Slug,
InstalledRevision: dashboard.GetString("revision", "1.0"), InstalledRevision: dashboard.GetString("revision", "1.0"),
Installed: true,
} }
return nil return nil
......
...@@ -12,7 +12,8 @@ import ( ...@@ -12,7 +12,8 @@ import (
type PluginDashboardInfoDTO struct { type PluginDashboardInfoDTO struct {
PluginId string `json:"pluginId"` PluginId string `json:"pluginId"`
Title string `json:"title"` Title string `json:"title"`
InstalledURI string `json:"installedURI"` Installed bool `json:"installed"`
InstalledUri string `json:"installedUri"`
InstalledRevision string `json:"installedRevision"` InstalledRevision string `json:"installedRevision"`
Revision string `json:"revision"` Revision string `json:"revision"`
Description string `json:"description"` Description string `json:"description"`
...@@ -83,7 +84,8 @@ func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*Pl ...@@ -83,7 +84,8 @@ func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*Pl
return nil, err return nil, err
} }
} else { } else {
res.InstalledURI = "db/" + query.Result.Slug res.Installed = true
res.InstalledUri = "db/" + query.Result.Slug
res.InstalledRevision = query.Result.GetString("revision", "1.0") res.InstalledRevision = query.Result.GetString("revision", "1.0")
} }
......
...@@ -52,19 +52,19 @@ function setupAngularRoutes($routeProvider, $locationProvider) { ...@@ -52,19 +52,19 @@ function setupAngularRoutes($routeProvider, $locationProvider) {
templateUrl: 'public/app/features/datasources/partials/list.html', templateUrl: 'public/app/features/datasources/partials/list.html',
controller : 'DataSourcesCtrl', controller : 'DataSourcesCtrl',
controllerAs: 'ctrl', controllerAs: 'ctrl',
resolve: loadOrgBundle, resolve: loadPluginsBundle,
}) })
.when('/datasources/edit/:id', { .when('/datasources/edit/:id', {
templateUrl: 'public/app/features/datasources/partials/edit.html', templateUrl: 'public/app/features/datasources/partials/edit.html',
controller : 'DataSourceEditCtrl', controller : 'DataSourceEditCtrl',
controllerAs: 'ctrl', controllerAs: 'ctrl',
resolve: loadOrgBundle, resolve: loadPluginsBundle,
}) })
.when('/datasources/new', { .when('/datasources/new', {
templateUrl: 'public/app/features/datasources/partials/edit.html', templateUrl: 'public/app/features/datasources/partials/edit.html',
controller : 'DataSourceEditCtrl', controller : 'DataSourceEditCtrl',
controllerAs: 'ctrl', controllerAs: 'ctrl',
resolve: loadOrgBundle, resolve: loadPluginsBundle,
}) })
.when('/org', { .when('/org', {
templateUrl: 'public/app/features/org/partials/orgDetails.html', templateUrl: 'public/app/features/org/partials/orgDetails.html',
......
...@@ -13,7 +13,6 @@ define([ ...@@ -13,7 +13,6 @@ define([
'./timeSrv', './timeSrv',
'./unsavedChangesSrv', './unsavedChangesSrv',
'./timepicker/timepicker', './timepicker/timepicker',
'./import_list/import_list',
'./graphiteImportCtrl', './graphiteImportCtrl',
'./dynamicDashboardSrv', './dynamicDashboardSrv',
'./importCtrl', './importCtrl',
......
define([
'./list_ctrl',
'./edit_ctrl',
], function () {});
...@@ -4,5 +4,4 @@ define([ ...@@ -4,5 +4,4 @@ define([
'./userInviteCtrl', './userInviteCtrl',
'./orgApiKeysCtrl', './orgApiKeysCtrl',
'./orgDetailsCtrl', './orgDetailsCtrl',
'../datasources/all',
], function () {}); ], function () {});
import './edit_ctrl'; import './plugin_edit_ctrl';
import './page_ctrl'; import './plugin_page_ctrl';
import './list_ctrl'; import './plugin_list_ctrl';
import './import_list/import_list';
import './ds_edit_ctrl';
import './ds_list_ctrl';
...@@ -140,6 +140,6 @@ coreModule.controller('DataSourceEditCtrl', DataSourceEditCtrl); ...@@ -140,6 +140,6 @@ coreModule.controller('DataSourceEditCtrl', DataSourceEditCtrl);
coreModule.directive('datasourceHttpSettings', function() { coreModule.directive('datasourceHttpSettings', function() {
return { return {
scope: {current: "="}, scope: {current: "="},
templateUrl: 'public/app/features/datasources/partials/http_settings.html' templateUrl: 'public/app/features/plugins/partials/ds_http_settings.html'
}; };
}); });
<div class="gf-form-group" ng-if="ctrl.dashboards.length">
<table class="filter-table">
<tbody>
<tr ng-repeat="dash in ctrl.dashboards">
<td class="width-1">
<i class="icon-gf icon-gf-dashboard"></i>
</td>
<td>
<a href="dashboard/{{dash.installedUri}}" ng-show="dash.installed">
{{dash.title}}
</a>
<span ng-show="!dash.installed">
{{dash.title}}
</span>
</td>
<td>
v{{dash.revision}}
</td>
<td ng-if="dash.installed">
Installed v{{dash.installedRevision}}
</td>
<td style="text-align: right">
<button class="btn btn-secondary" ng-click="ctrl.import(dash, false)" ng-show="!dash.installed">
Install
</button>
<button class="btn btn-secondary" ng-click="ctrl.import(dash, true)" ng-show="dash.installed">
Re-Install
</button>
<button class="btn btn-danger" ng-click="ctrl.remove(dash)" ng-show="dash.installed">
Un-install
</button>
</td>
</tr>
</tbody>
</table>
</div>
...@@ -4,9 +4,6 @@ import angular from 'angular'; ...@@ -4,9 +4,6 @@ import angular from 'angular';
import _ from 'lodash'; import _ from 'lodash';
import coreModule from 'app/core/core_module'; import coreModule from 'app/core/core_module';
class DashboardScriptLoader {
}
export class DashImportListCtrl { export class DashImportListCtrl {
dashboards: any[]; dashboards: any[];
plugin: any; plugin: any;
...@@ -19,50 +16,32 @@ export class DashImportListCtrl { ...@@ -19,50 +16,32 @@ export class DashImportListCtrl {
}); });
} }
import(dash) { import(dash, reinstall) {
var installCmd = { var installCmd = {
pluginId: this.plugin.id, pluginId: this.plugin.id,
path: dash.path, path: dash.path,
reinstall: reinstall,
inputs: {} inputs: {}
}; };
this.backendSrv.post(`/api/plugins/dashboards/install`, installCmd).then(res => { this.backendSrv.post(`/api/plugins/dashboards/install`, installCmd).then(res => {
console.log(res); this.$rootScope.appEvent('alert-success', ['Dashboard Installed', dash.title]);
_.extend(dash, res);
}); });
} }
remove(dash) {
this.backendSrv.delete('/api/dashboards/' + dash.installedUri).then(() => {
this.$rootScope.appEvent('alert-success', ['Dashboard Deleted', dash.title]);
dash.installed = false;
});
}
} }
var template = `
<div class="gf-form-group" ng-if="ctrl.dashboards.length">
<table class="filter-table">
<tbody>
<tr ng-repeat="dash in ctrl.dashboards">
<td class="width-1">
<i class="icon-gf icon-gf-dashboard"></i>
</td>
<td>
{{dash.title}}
</td>
<td>
{{dash.revision}}
</td>
<td>
{{dash.installedRevision}}
</td>
<td class="width-2">
<button class="btn btn-secondary" ng-click="ctrl.import(dash)">Install</button>
</td>
</tr>
</tbody>
</table>
</div>
`;
export function dashboardImportList() { export function dashboardImportList() {
return { return {
restrict: 'E', restrict: 'E',
template: template, templateUrl: 'public/app/features/plugins/import_list/import_list.html',
controller: DashImportListCtrl, controller: DashImportListCtrl,
bindToController: true, bindToController: true,
controllerAs: 'ctrl', controllerAs: 'ctrl',
...@@ -72,7 +51,6 @@ export function dashboardImportList() { ...@@ -72,7 +51,6 @@ export function dashboardImportList() {
}; };
} }
coreModule.directive('dashboardImportList', dashboardImportList); coreModule.directive('dashboardImportList', dashboardImportList);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
} }
}, },
"title": "Carbon stats", "title": "Carbon Cache Stats",
"version": 1, "version": 1,
"rows": [ "rows": [
{ {
......
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
"id": "graphite", "id": "graphite",
"includes": [ "includes": [
{"type": "dashboard", "name": "Carbon Overview", "path": "dashboards/carbon_stats.json"}, {"type": "dashboard", "name": "Carbon Cache Stats", "path": "dashboards/carbon_stats.json"}
{"type": "dashboard", "name": "Carbon Agent Details", "path": "dashboards/carbon_stats.json"}
], ],
"metrics": true, "metrics": true,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment