From 92bd50f2adc6db8db1f9558481936064becd10e9 Mon Sep 17 00:00:00 2001 From: Tyler Smith Date: Mon, 16 Oct 2017 15:18:41 -0400 Subject: [PATCH] Display alarm counts in horizon navbar -This commit makes use of the new extensible header functionality in horizon to display the current alarm counts -When the header is clicked the user is redirected to the alarms panel. If the user is in the admin dashboard they will be sent to the admin's alarm panel Change-Id: Iff6b3b8d7f2efe4107ff3c0639b115f99552e257 Implements: blueprint alarm-header Signed-off-by: Tyler Smith --- enabled/_4020_project_alarms_vitrage_panel.py | 3 +++ .../alarms/templates/alarms/banner.html | 22 ++++++++++++++++++ vitrage_dashboard/alarms/views.py | 14 +++++++++++ vitrage_dashboard/api/vitrage.py | 6 +++++ .../project/components/alarms/alarms.scss | 13 +++++++++++ .../static/dashboard/project/vitrage.scss | 23 +++++++++++++++++++ 6 files changed, 81 insertions(+) mode change 100644 => 100755 enabled/_4020_project_alarms_vitrage_panel.py create mode 100755 vitrage_dashboard/alarms/templates/alarms/banner.html mode change 100644 => 100755 vitrage_dashboard/alarms/views.py mode change 100644 => 100755 vitrage_dashboard/dashboard/static/dashboard/project/components/alarms/alarms.scss mode change 100644 => 100755 vitrage_dashboard/dashboard/static/dashboard/project/vitrage.scss diff --git a/enabled/_4020_project_alarms_vitrage_panel.py b/enabled/_4020_project_alarms_vitrage_panel.py old mode 100644 new mode 100755 index 1b72fa7..9bb137e --- a/enabled/_4020_project_alarms_vitrage_panel.py +++ b/enabled/_4020_project_alarms_vitrage_panel.py @@ -25,3 +25,6 @@ ADD_INSTALLED_APPS = ['vitrage_dashboard.alarms'] ADD_ANGULAR_MODULES = ['horizon.dashboard.project.vitrage'] AUTO_DISCOVER_STATIC_FILES = True + +ADD_HEADER_SECTIONS = \ + ['vitrage_dashboard.alarms.views.AlarmBannerView', ] diff --git a/vitrage_dashboard/alarms/templates/alarms/banner.html b/vitrage_dashboard/alarms/templates/alarms/banner.html new file mode 100755 index 0000000..276a3bf --- /dev/null +++ b/vitrage_dashboard/alarms/templates/alarms/banner.html @@ -0,0 +1,22 @@ +{% load i18n %} +{% block alarm_banner %} +
+ {% trans " CRITICAL " %} + {{ counts.CRITICAL}} + {% trans "SEVERE " %} + {{ counts.SEVERE }} + {% trans " WARNING " %} + {{ counts.WARNING }} + {% if counts.OK %} + {% trans " OK " %} + {{ counts.OK }} + {% endif %} + {% if counts.NA %} + {% trans " N/A " %} + {{ counts.NA }} + {% endif %} +
+{% endblock %} diff --git a/vitrage_dashboard/alarms/views.py b/vitrage_dashboard/alarms/views.py old mode 100644 new mode 100755 index 1d3e84e..7f28f69 --- a/vitrage_dashboard/alarms/views.py +++ b/vitrage_dashboard/alarms/views.py @@ -14,6 +14,8 @@ from horizon import views +from vitrage_dashboard.api import vitrage + import json @@ -30,3 +32,15 @@ class IndexView(views.APIView): } context['TOPOLOGY_VITRAGE_SETTINGS'] = json.dumps(topology_settings) return context + + +class AlarmBannerView(views.HorizonTemplateView): + template_name = 'alarms/banner.html' + + def get_context_data(self, **kwargs): + context = super(AlarmBannerView, self).get_context_data(**kwargs) + + is_admin = 'admin' in self.request.META.get('HTTP_REFERER') + counts = vitrage.alarm_counts(self.request, is_admin) + context['counts'] = counts + return context diff --git a/vitrage_dashboard/api/vitrage.py b/vitrage_dashboard/api/vitrage.py index ff52122..078cc36 100644 --- a/vitrage_dashboard/api/vitrage.py +++ b/vitrage_dashboard/api/vitrage.py @@ -66,6 +66,12 @@ def alarms(request, vitrage_id='all', all_tenants='false'): all_tenants=all_tenants) +def alarm_counts(request, all_tenants='false'): + counts = vitrageclient(request).alarm.count(all_tenants=all_tenants) + counts['NA'] = counts.get("N/A") + return counts + + def rca(request, alarm_id, all_tenants='false'): return vitrageclient(request).rca.get(alarm_id=alarm_id, all_tenants=all_tenants) diff --git a/vitrage_dashboard/dashboard/static/dashboard/project/components/alarms/alarms.scss b/vitrage_dashboard/dashboard/static/dashboard/project/components/alarms/alarms.scss old mode 100644 new mode 100755 index a8f8c58..7dd36f0 --- a/vitrage_dashboard/dashboard/static/dashboard/project/components/alarms/alarms.scss +++ b/vitrage_dashboard/dashboard/static/dashboard/project/components/alarms/alarms.scss @@ -41,3 +41,16 @@ overflow: hidden; } } + +.vitrage-alarm-banner { + border: 1px solid rgba(0,0,0,0.1); + box-shadow: inset 1px 1px 0 rgba(255,255,255,0.7); + padding: 3px; + margin-top: -4px; + margin-bottom: -4px; + padding-left: 18px; + + span { + vertical-align: baseline; + } +} diff --git a/vitrage_dashboard/dashboard/static/dashboard/project/vitrage.scss b/vitrage_dashboard/dashboard/static/dashboard/project/vitrage.scss old mode 100644 new mode 100755 index d6218a3..2f93d0d --- a/vitrage_dashboard/dashboard/static/dashboard/project/vitrage.scss +++ b/vitrage_dashboard/dashboard/static/dashboard/project/vitrage.scss @@ -12,26 +12,49 @@ @import 'templateList/templateList.scss'; @import 'components/template/templateContainer.scss'; +.badge { + padding: 3px 15px; + margin-right: 18px; +} + +.badge-red{ + background-color: #FA3C3C; +} .red { color: #FA3C3C; } +.badge-orange { + background-color: #fc9d00; +} .orange { color: #fc9d00; } +.badge-yellow { + background-color: #FFC600; +} .yellow { color: #FFC600; } +.badge-green { + background-color: #87CE53; +} .green { color: #87CE53; } +.badge-olive { + background-color: #97A560; +} .olive { color: #97A560; } +.badge-gray { + background-color: #AEAEAE; +} .gray { color: #AEAEAE; }