From 7aa6a788b88d4b58d20f8640a0f0fda2a99aad2b Mon Sep 17 00:00:00 2001 From: Omer Etrog Date: Wed, 10 Feb 2016 12:14:14 +0200 Subject: [PATCH] vitrage alarms Change-Id: I325862b9c972b92b5a358cb1ba837d419c1d4f9c --- README.rst | 2 +- .../layout/main/alarmList.controller.js | 20 +++++++++ .../alarms/project/layout/main/alarmList.html | 25 +++++++++++ .../alarms/project/layout/main/alarmList.scss | 3 ++ vitragealarms/templates/alarms/index.html | 8 ++-- vitrageclient/api/rest/vitrage.py | 20 +++++++++ vitrageclient/api/vitrage.py | 4 ++ .../openstack-service-api/vitrage.service.js | 14 ++++++- .../components/alarms/alarms.directive.js | 20 ++++++++- .../project/components/alarms/alarms.html | 11 +++++ .../project/components/alarms/alarms.scss | 8 ++++ .../components/sunburst/sunburst.directive.js | 2 +- .../project/layout/main/compute/compute.html | 2 +- .../dashboard/project/layout/main/main.html | 28 ++++++------- .../services/vitrage_topology.service.js | 42 +++++++++++++------ .../static/dashboard/project/vitrage.scss | 3 +- 16 files changed, 174 insertions(+), 38 deletions(-) create mode 100644 vitragealarms/static/alarms/project/layout/main/alarmList.controller.js create mode 100644 vitragealarms/static/alarms/project/layout/main/alarmList.html create mode 100644 vitragealarms/static/alarms/project/layout/main/alarmList.scss diff --git a/README.rst b/README.rst index 02e588e..06e050e 100644 --- a/README.rst +++ b/README.rst @@ -41,7 +41,7 @@ With Horizon git clone https://github.com/openstack/vitrage-dashboard.git - git clone https://github.com/openstack/f.git + git clone https://github.com/openstack/python-vitrageclient.git cd ../horizon diff --git a/vitragealarms/static/alarms/project/layout/main/alarmList.controller.js b/vitragealarms/static/alarms/project/layout/main/alarmList.controller.js new file mode 100644 index 0000000..d609f95 --- /dev/null +++ b/vitragealarms/static/alarms/project/layout/main/alarmList.controller.js @@ -0,0 +1,20 @@ +(function () { + 'use strict'; + + angular + .module('horizon.dashboard.project.vitrage') + .controller('AlarmListController', AlarmListController); + + AlarmListController.$inject = ['$scope', 'vitrageTopologySrv']; + + function AlarmListController($scope, vitrageTopologySrv) { + var alarmList = this; + $scope.STATIC_URL = STATIC_URL; + alarmList.alarms = []; + vitrageTopologySrv.getAlarms('all').then(function(result){ + alarmList.alarms = result.data; + }); + } + +})(); + diff --git a/vitragealarms/static/alarms/project/layout/main/alarmList.html b/vitragealarms/static/alarms/project/layout/main/alarmList.html new file mode 100644 index 0000000..9185e73 --- /dev/null +++ b/vitragealarms/static/alarms/project/layout/main/alarmList.html @@ -0,0 +1,25 @@ +
+
+ + + + + + + + + + + + + + + + + + + + +
{$ 'TimeStamp' | translate $}{$ 'Name' | translate $}{$ 'Severity' | translate $}{$ 'Type' | translate $}{$ 'RCA' | translate $}
{$alarm.update_timestamp | date:"h:mm a"$} {$alarm.name$}{$alarm.severity $}{$alarm.type$}
+
+
\ No newline at end of file diff --git a/vitragealarms/static/alarms/project/layout/main/alarmList.scss b/vitragealarms/static/alarms/project/layout/main/alarmList.scss new file mode 100644 index 0000000..6fdab92 --- /dev/null +++ b/vitragealarms/static/alarms/project/layout/main/alarmList.scss @@ -0,0 +1,3 @@ +.alarm-list { + +} \ No newline at end of file diff --git a/vitragealarms/templates/alarms/index.html b/vitragealarms/templates/alarms/index.html index 1b4aa80..3d82633 100644 --- a/vitragealarms/templates/alarms/index.html +++ b/vitragealarms/templates/alarms/index.html @@ -3,13 +3,13 @@ {% block title %}{% trans "Topology" %}{% endblock %} {% block page_header %} - + {% endblock page_header %} {% block main %} - - - +
+ +
{% endblock %} diff --git a/vitrageclient/api/rest/vitrage.py b/vitrageclient/api/rest/vitrage.py index 31d0538..0ead2e8 100644 --- a/vitrageclient/api/rest/vitrage.py +++ b/vitrageclient/api/rest/vitrage.py @@ -39,3 +39,23 @@ class Topolgy(generic.View): """ return api.vitrage.topology(request) + + +@urls.register +class Alarms(generic.View): + """API for vitrage alarms.""" + + url_regex = r'vitrage/alarms/(?P.+|default)/$' + + @rest_utils.ajax() + def get(self, request, vitrage_id): + """Get a single entity's alarm with the vitrage id. + + The following get alarma may be passed in the GET + + :param vitrage_id the id of the vitrage entity + + The result is a alarms object. + """ + + return api.vitrage.alarms(request, vitrage_id) diff --git a/vitrageclient/api/vitrage.py b/vitrageclient/api/vitrage.py index 1778400..74537d3 100644 --- a/vitrageclient/api/vitrage.py +++ b/vitrageclient/api/vitrage.py @@ -32,3 +32,7 @@ def vitrageclient(request, password=None): def topology(request): return vitrageclient(request).topology.get(graph_type='tree') + + +def alarms(request, vitrage_id='all'): + return vitrageclient(request).alarms.list(vitrage_id=vitrage_id) diff --git a/vitragedashboard/static/app/core/openstack-service-api/vitrage.service.js b/vitragedashboard/static/app/core/openstack-service-api/vitrage.service.js index df8cfca..9c8da1d 100644 --- a/vitragedashboard/static/app/core/openstack-service-api/vitrage.service.js +++ b/vitragedashboard/static/app/core/openstack-service-api/vitrage.service.js @@ -1,4 +1,3 @@ - (function () { 'use strict'; @@ -15,7 +14,8 @@ function vitrageAPI(apiService, toastService) { var service = { - getTopology: getTopology + getTopology: getTopology, + getAlarms: getAlarms }; return service; @@ -29,6 +29,16 @@ }); } + function getAlarms(vitrage_id) { + if (vitrage_id == undefined){ + vitrage_id = 'all'; + } + return apiService.get('/api/vitrage/alarms/'+vitrage_id) + .error(function () { + toastService.add('error', gettext('Unable to fetch the Vitrage Alarms service.')); + }); + } + } }()); diff --git a/vitragedashboard/static/dashboard/project/components/alarms/alarms.directive.js b/vitragedashboard/static/dashboard/project/components/alarms/alarms.directive.js index 3a79ae7..79ee97a 100644 --- a/vitragedashboard/static/dashboard/project/components/alarms/alarms.directive.js +++ b/vitragedashboard/static/dashboard/project/components/alarms/alarms.directive.js @@ -6,11 +6,29 @@ function hzAlarms() { var directive = { link: link, templateUrl: STATIC_URL + 'dashboard/project/components/alarms/alarms.html', - restrict: 'E' + restrict: 'E', + scope:{ + selected:'=' + }, + controller : AlarmsController, + controllerAs : 'alarmsCtrl' }; + + AlarmsController.$inject = ['$scope', 'vitrageTopologySrv']; return directive; function link(scope, element, attrs) { + } + function AlarmsController($scope,vitrageTopologySrv){ + var alarmsCtrl = this; + $scope.$watch('selected', function(newData,oldData) { + if (newData != oldData){ + console.log('selected ',newData); + vitrageTopologySrv.getAlarms(newData.vitrage_id).then(function(result){ + alarmsCtrl.computeAlarms = result.data; + }); + } + }); } } diff --git a/vitragedashboard/static/dashboard/project/components/alarms/alarms.html b/vitragedashboard/static/dashboard/project/components/alarms/alarms.html index 0552fe4..2489e96 100644 --- a/vitragedashboard/static/dashboard/project/components/alarms/alarms.html +++ b/vitragedashboard/static/dashboard/project/components/alarms/alarms.html @@ -1,3 +1,14 @@

{$ 'Alarms' | translate $}

+
+
    +
  • +

    {$alarm.name$}

    +

    + {$alarm.update_timestamp | date:"h:mma"$} | + {$alarm.severity$} +

    +
  • +
+
\ No newline at end of file diff --git a/vitragedashboard/static/dashboard/project/components/alarms/alarms.scss b/vitragedashboard/static/dashboard/project/components/alarms/alarms.scss index 7d970f2..b955402 100644 --- a/vitragedashboard/static/dashboard/project/components/alarms/alarms.scss +++ b/vitragedashboard/static/dashboard/project/components/alarms/alarms.scss @@ -1,3 +1,11 @@ .vitrage-alarms { + .panel-body{ + padding: 0; + } + + .alarms-list{ + max-height: 288px; + overflow-y: auto; + } } \ No newline at end of file diff --git a/vitragedashboard/static/dashboard/project/components/sunburst/sunburst.directive.js b/vitragedashboard/static/dashboard/project/components/sunburst/sunburst.directive.js index d40d34e..2f0af88 100644 --- a/vitragedashboard/static/dashboard/project/components/sunburst/sunburst.directive.js +++ b/vitragedashboard/static/dashboard/project/components/sunburst/sunburst.directive.js @@ -88,7 +88,7 @@ function hzSunburst() { } function cloneSelectedItem(d) { - scope.selected = {id: d.id, name: d.name, state: d.state, type: d.type}; + scope.selected = {id: d.id, name: d.name, state: d.state,vitrage_id: d.vitrage_id}; } // Interpolate the scales! diff --git a/vitragedashboard/static/dashboard/project/layout/main/compute/compute.html b/vitragedashboard/static/dashboard/project/layout/main/compute/compute.html index 9bcfd9a..e29cd99 100644 --- a/vitragedashboard/static/dashboard/project/layout/main/compute/compute.html +++ b/vitragedashboard/static/dashboard/project/layout/main/compute/compute.html @@ -9,7 +9,7 @@
- +
diff --git a/vitragedashboard/static/dashboard/project/layout/main/main.html b/vitragedashboard/static/dashboard/project/layout/main/main.html index 1789a82..650b08b 100644 --- a/vitragedashboard/static/dashboard/project/layout/main/main.html +++ b/vitragedashboard/static/dashboard/project/layout/main/main.html @@ -10,20 +10,20 @@ - - - {$ 'Storage' | translate $} - -
- -
-
+ + + + + + + + - - - {$ 'Network' | translate $} - - - + + + + + + diff --git a/vitragedashboard/static/dashboard/project/services/vitrage_topology.service.js b/vitragedashboard/static/dashboard/project/services/vitrage_topology.service.js index 2ee2fec..29bf1d8 100644 --- a/vitragedashboard/static/dashboard/project/services/vitrage_topology.service.js +++ b/vitragedashboard/static/dashboard/project/services/vitrage_topology.service.js @@ -14,21 +14,37 @@ vitrageAPI = $injector.get('horizon.app.core.openstack-service-api.vitrage'); } - return { - getTopology: function getTopology() { + function getTopology() { - if (vitrageAPI) { - return vitrageAPI.getTopology() - .success(function(data) { - console.log("Success ", data); - return data; - }) - .error(function(err) { - console.error(err); - } - ) - } + if (vitrageAPI) { + return vitrageAPI.getTopology() + .success(function(data) { + return data; + }) + .error(function(err) { + console.error(err); + } + ) } } + + function getAlarms(vitrage_id) { + + if (vitrageAPI) { + return vitrageAPI.getAlarms(vitrage_id) + .success(function(data) { + return data; + }) + .error(function(err) { + console.error(err); + } + ) + } + } + + return { + getTopology: getTopology, + getAlarms: getAlarms + } } })(); diff --git a/vitragedashboard/static/dashboard/project/vitrage.scss b/vitragedashboard/static/dashboard/project/vitrage.scss index b39f7b5..665efe9 100644 --- a/vitragedashboard/static/dashboard/project/vitrage.scss +++ b/vitragedashboard/static/dashboard/project/vitrage.scss @@ -1,2 +1,3 @@ @import 'layout/main/compute/compute'; -@import 'components/sunburst/sunburst'; \ No newline at end of file +@import 'components/sunburst/sunburst'; +@import 'components/alarms/alarms'; \ No newline at end of file