mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(plugins): more work on plugin dashboard install, #4298
This commit is contained in:
parent
2de439bd1e
commit
fc54c01f01
@ -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 {
|
|||||||
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 (
|
|||||||
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
|
|||||||
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) {
|
|||||||
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([
|
|||||||
'./timeSrv',
|
'./timeSrv',
|
||||||
'./unsavedChangesSrv',
|
'./unsavedChangesSrv',
|
||||||
'./timepicker/timepicker',
|
'./timepicker/timepicker',
|
||||||
'./import_list/import_list',
|
|
||||||
'./graphiteImportCtrl',
|
'./graphiteImportCtrl',
|
||||||
'./dynamicDashboardSrv',
|
'./dynamicDashboardSrv',
|
||||||
'./importCtrl',
|
'./importCtrl',
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
define([
|
|
||||||
'./list_ctrl',
|
|
||||||
'./edit_ctrl',
|
|
||||||
], function () {});
|
|
@ -4,5 +4,4 @@ define([
|
|||||||
'./userInviteCtrl',
|
'./userInviteCtrl',
|
||||||
'./orgApiKeysCtrl',
|
'./orgApiKeysCtrl',
|
||||||
'./orgDetailsCtrl',
|
'./orgDetailsCtrl',
|
||||||
'../datasources/all',
|
|
||||||
], function () {});
|
], function () {});
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
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);
|
|||||||
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'
|
||||||
};
|
};
|
||||||
});
|
});
|
37
public/app/features/plugins/import_list/import_list.html
Normal file
37
public/app/features/plugins/import_list/import_list.html
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<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';
|
|||||||
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 {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
coreModule.directive('dashboardImportList', dashboardImportList);
|
coreModule.directive('dashboardImportList', dashboardImportList);
|
||||||
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"title": "Carbon stats",
|
"title": "Carbon Cache Stats",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user