From 13820b1358151380dc30561c212212fe0076d8c1 Mon Sep 17 00:00:00 2001 From: Shu Muto Date: Wed, 14 Dec 2016 17:48:40 +0900 Subject: [PATCH] Add pools panel into admin dashboard This patch adds storage pools panel into admin dashboard. This provides only list view. Actions will be provided in the next patch. Change-Id: Ia8cb1a0718001292ef078850d5e0433c88c9a0f2 Partial-Implements: blueprint support-pool --- zaqar_ui/content/pools/__init__.py | 0 zaqar_ui/content/pools/panel.py | 22 ++++ zaqar_ui/content/pools/urls.py | 19 +++ .../enabled/_2510_admin_messaging_group.py | 24 ++++ zaqar_ui/enabled/_2520_admin_pools.py | 22 ++++ .../static/dashboard/admin/pools/drawer.html | 5 + .../static/dashboard/admin/pools/panel.html | 4 + .../dashboard/admin/pools/pools.module.js | 120 ++++++++++++++++++ .../dashboard/admin/pools/pools.service.js | 49 +++++++ 9 files changed, 265 insertions(+) create mode 100644 zaqar_ui/content/pools/__init__.py create mode 100644 zaqar_ui/content/pools/panel.py create mode 100644 zaqar_ui/content/pools/urls.py create mode 100644 zaqar_ui/enabled/_2510_admin_messaging_group.py create mode 100644 zaqar_ui/enabled/_2520_admin_pools.py create mode 100644 zaqar_ui/static/dashboard/admin/pools/drawer.html create mode 100644 zaqar_ui/static/dashboard/admin/pools/panel.html create mode 100644 zaqar_ui/static/dashboard/admin/pools/pools.module.js create mode 100644 zaqar_ui/static/dashboard/admin/pools/pools.service.js diff --git a/zaqar_ui/content/pools/__init__.py b/zaqar_ui/content/pools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/zaqar_ui/content/pools/panel.py b/zaqar_ui/content/pools/panel.py new file mode 100644 index 0000000..7349553 --- /dev/null +++ b/zaqar_ui/content/pools/panel.py @@ -0,0 +1,22 @@ +# Copyright 2015 IBM Corp. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from django.utils.translation import ugettext_lazy as _ + +import horizon + + +class Pools(horizon.Panel): + name = _("Pools") + slug = "pools" diff --git a/zaqar_ui/content/pools/urls.py b/zaqar_ui/content/pools/urls.py new file mode 100644 index 0000000..7c99e65 --- /dev/null +++ b/zaqar_ui/content/pools/urls.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from django.conf import urls +from horizon.browsers import views + + +urlpatterns = [ + urls.url(r'^$', views.AngularIndexView.as_view(), name='index'), +] diff --git a/zaqar_ui/enabled/_2510_admin_messaging_group.py b/zaqar_ui/enabled/_2510_admin_messaging_group.py new file mode 100644 index 0000000..5cda518 --- /dev/null +++ b/zaqar_ui/enabled/_2510_admin_messaging_group.py @@ -0,0 +1,24 @@ +# Copyright 2015 IBM Corp. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from django.utils.translation import ugettext_lazy as _ + +# The slug of the panel group to be added to HORIZON_CONFIG. Required. +PANEL_GROUP = 'messaging' + +# The display name of the PANEL_GROUP. Required. +PANEL_GROUP_NAME = _('Messaging') + +# The slug of the dashboard the PANEL_GROUP associated with. Required. +PANEL_GROUP_DASHBOARD = 'admin' diff --git a/zaqar_ui/enabled/_2520_admin_pools.py b/zaqar_ui/enabled/_2520_admin_pools.py new file mode 100644 index 0000000..384f355 --- /dev/null +++ b/zaqar_ui/enabled/_2520_admin_pools.py @@ -0,0 +1,22 @@ +# Copyright 2015 IBM Corp. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +PANEL = 'pools' +PANEL_GROUP = 'messaging' +PANEL_DASHBOARD = 'admin' + +ADD_PANEL = ('zaqar_ui.content.pools.panel.Pools') +ADD_ANGULAR_MODULES = ['horizon.dashboard.admin.pools'] + +AUTO_DISCOVER_STATIC_FILES = True diff --git a/zaqar_ui/static/dashboard/admin/pools/drawer.html b/zaqar_ui/static/dashboard/admin/pools/drawer.html new file mode 100644 index 0000000..fe6617c --- /dev/null +++ b/zaqar_ui/static/dashboard/admin/pools/drawer.html @@ -0,0 +1,5 @@ + + diff --git a/zaqar_ui/static/dashboard/admin/pools/panel.html b/zaqar_ui/static/dashboard/admin/pools/panel.html new file mode 100644 index 0000000..c3c2528 --- /dev/null +++ b/zaqar_ui/static/dashboard/admin/pools/panel.html @@ -0,0 +1,4 @@ + + + + diff --git a/zaqar_ui/static/dashboard/admin/pools/pools.module.js b/zaqar_ui/static/dashboard/admin/pools/pools.module.js new file mode 100644 index 0000000..3045d58 --- /dev/null +++ b/zaqar_ui/static/dashboard/admin/pools/pools.module.js @@ -0,0 +1,120 @@ +/* + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function () { + 'use strict'; + + /** + * @ngdoc overview + * @name horizon.dashboard.admin.pools + * @description Pools module for messaging. + */ + + angular + .module('horizon.dashboard.admin.pools', [ + 'ngRoute' + ]) + .constant('horizon.dashboard.admin.pools.resourceType', 'OS::Zaqar::Pools') + .run(run) + .config(config); + + run.$inject = [ + 'horizon.app.core.openstack-service-api.zaqar', + 'horizon.dashboard.admin.pools.basePath', + 'horizon.dashboard.admin.pools.resourceType', + 'horizon.dashboard.admin.pools.service', + 'horizon.framework.conf.resource-type-registry.service' + ]; + + function run(zaqar, basePath, resourceType, poolsService, registry) { + registry.getResourceType(resourceType) + .setNames(gettext('Pool'), gettext('Pools')) + .setSummaryTemplateUrl(basePath + 'drawer.html') + .setProperties(poolProperties()) + .setListFunction(poolsService.getPoolsPromise) + .tableColumns + .append({ + id: 'name', + priority: 1, + sortDefault: true + }) + .append({ + id: 'group', + priority: 1 + }) + .append({ + id: 'weight', + priority: 1 + }) + .append({ + id: 'uri', + priority: 2 + }); + // for magic-search + registry.getResourceType(resourceType).filterFacets + .append({ + label: gettext('Name'), + name: 'name', + singleton: true + }) + .append({ + label: gettext('Group'), + name: 'group', + singleton: true + }) + .append({ + label: gettext('Weight'), + name: 'weight', + singleton: true + }) + .append({ + label: gettext('URI'), + name: 'uri', + singleton: true + }); + } + + function poolProperties() { + return { + name: { label: gettext('Name'), filters: [] }, + group: { label: gettext('Group'), filters: ['noName'] }, + weight: { label: gettext('Weight'), filters: ['noValue'] }, + uri: { label: gettext('URI'), filters: ['noValue'] }, + options: { label: gettext('Options'), filters: ['noValue'] } + }; + } + + config.$inject = [ + '$provide', + '$windowProvider', + '$routeProvider' + ]; + + /** + * @ndoc config + * @name horizon.dashboard.admin.pools.basePath + * @param {Object} $provide + * @param {Object} $windowProvider + * @param {Object} $routeProvider + * @returns {undefined} Returns nothing + * @description Base path for the pools panel + */ + function config($provide, $windowProvider, $routeProvider) { + var path = $windowProvider.$get().STATIC_URL + 'dashboard/admin/pools/'; + $provide.constant('horizon.dashboard.admin.pools.basePath', path); + + $routeProvider.when('/admin/pools', { + templateUrl: path + 'panel.html' + }); + } +}()); diff --git a/zaqar_ui/static/dashboard/admin/pools/pools.service.js b/zaqar_ui/static/dashboard/admin/pools/pools.service.js new file mode 100644 index 0000000..32dfaf7 --- /dev/null +++ b/zaqar_ui/static/dashboard/admin/pools/pools.service.js @@ -0,0 +1,49 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function() { + "use strict"; + + angular + .module('horizon.dashboard.admin.pools') + .factory('horizon.dashboard.admin.pools.service', poolsService); + + poolsService.$inject = [ + 'horizon.app.core.openstack-service-api.zaqar' + ]; + + /* + * @ngdoc factory + * @name horizon.dashboard.admin.pools.service + * + * @description + * This service provides functions that are used through + * the Pools features. + */ + function poolsService(zaqar) { + return { + getPoolsPromise: getPoolsPromise + }; + + /* + * @ngdoc function + * @name getPoolsPromise + * @description + * Given filter/query parameters, returns a promise for the matching + * pools. This is used in displaying lists of Pools. + */ + function getPoolsPromise(params) { + return zaqar.getPools(params); + } + } +})();