Add Monitoring violations panel
This commit adds new panel to monitor violations in congress UI. Assumes each policy would have only one defined error or warning table. This panel lists the errors count and warnings count for each policy if defined. TODO: 1. Add link to policy error table to list the rows 2. Coloring for error and warning 3. Periodic refresh of data. Partial-Bug:#1670520 Change-Id: I24f16df716e58121bc22cf2ae4426de80d06a8ee
This commit is contained in:
parent
b0f44cab9b
commit
55dd68582c
@ -68,6 +68,7 @@ class PolicyTable(PolicyAPIDictWrapper):
|
||||
def set_policy_details(self, policy):
|
||||
self._apidict['policy_name'] = policy['name']
|
||||
self._apidict['policy_owner_id'] = policy['owner_id']
|
||||
self._apidict['policy_description'] = policy['description']
|
||||
|
||||
|
||||
def congressclient(request):
|
||||
|
@ -52,6 +52,57 @@ def _get_policy_tables(request):
|
||||
return all_tables
|
||||
|
||||
|
||||
def _get_policy_violations_tables(request):
|
||||
"""Return error and warning tables info for all policies. """
|
||||
try:
|
||||
# Get all the policies.
|
||||
policies = congress.policies_list(request)
|
||||
except Exception as e:
|
||||
LOG.error('Unable to get list of policies: %s', str(e))
|
||||
else:
|
||||
try:
|
||||
tables_data = []
|
||||
for policy in policies:
|
||||
policy_name = policy['name']
|
||||
policy_table_info = {}
|
||||
error_warning_tables = []
|
||||
# Get all the tables in this policy.
|
||||
policy_tables = congress.policy_tables_list(request,
|
||||
policy_name)
|
||||
for table in policy_tables:
|
||||
table_name = table['id']
|
||||
if congress.TABLE_SEPARATOR in table_name:
|
||||
continue
|
||||
if table_name == 'error' or table_name == 'warning':
|
||||
policy_table_info['policy'] = policy
|
||||
error_warning_tables.append(table_name)
|
||||
if error_warning_tables:
|
||||
policy_table_info['tables'] = error_warning_tables
|
||||
tables_data.append(policy_table_info)
|
||||
except Exception as e:
|
||||
LOG.error('Unable to get tables for policy "%s": %s',
|
||||
policy_name, str(e))
|
||||
return tables_data
|
||||
|
||||
|
||||
def get_policy_violations_data(request):
|
||||
"""Get the row count of each error and warning tables. """
|
||||
tables_data = _get_policy_violations_tables(request)
|
||||
violations_table = []
|
||||
|
||||
for data in tables_data:
|
||||
policy = data['policy']
|
||||
tables = data['tables']
|
||||
row = congress.PolicyTable({"id": policy['name']})
|
||||
row.set_id_as_name_if_empty()
|
||||
row.set_policy_details(policy)
|
||||
for t in tables:
|
||||
rows = congress.policy_rows_list(request, policy['name'], t)
|
||||
row.set_value(t, len(rows))
|
||||
violations_table.append(row)
|
||||
return violations_table
|
||||
|
||||
|
||||
def _get_service_tables(request):
|
||||
# Return all service tables.
|
||||
all_tables = []
|
||||
|
5
congress_dashboard/enabled/_75_monitoring.py
Normal file
5
congress_dashboard/enabled/_75_monitoring.py
Normal file
@ -0,0 +1,5 @@
|
||||
PANEL = 'monitor'
|
||||
PANEL_DASHBOARD = 'admin'
|
||||
PANEL_GROUP = 'policy'
|
||||
ADD_PANEL = 'congress_dashboard.monitoring.panel.Monitor'
|
||||
AUTO_DISCOVER_STATIC_FILES = True
|
0
congress_dashboard/monitoring/__init__.py
Normal file
0
congress_dashboard/monitoring/__init__.py
Normal file
25
congress_dashboard/monitoring/panel.py
Normal file
25
congress_dashboard/monitoring/panel.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright 2017 NEC, 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
|
||||
from openstack_dashboard.dashboards.admin import dashboard
|
||||
|
||||
|
||||
class Monitor(horizon.Panel):
|
||||
name = _("Monitoring")
|
||||
slug = "monitoring"
|
||||
permissions = ('openstack.roles.admin',)
|
||||
|
||||
dashboard.Admin.register(Monitor)
|
31
congress_dashboard/monitoring/tables.py
Normal file
31
congress_dashboard/monitoring/tables.py
Normal file
@ -0,0 +1,31 @@
|
||||
# Copyright 2017 NEC, 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 _
|
||||
from horizon import tables
|
||||
|
||||
|
||||
class MonitoringTable(tables.DataTable):
|
||||
errors = tables.Column("error", verbose_name=_("Errors"))
|
||||
warnings = tables.Column("warning", verbose_name=_("Warnings"))
|
||||
policy_name = tables.Column("policy_name",
|
||||
verbose_name=_("violated policy name"))
|
||||
policy_description = tables.Column("policy_description",
|
||||
verbose_name=_("Policy Description"))
|
||||
policy_owner_id = tables.Column("policy_owner_id",
|
||||
verbose_name=_("Policy Owner"))
|
||||
|
||||
class Meta(object):
|
||||
name = "monitoring"
|
||||
verbose_name = _("Monitoring")
|
@ -0,0 +1,13 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Monitoring" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Monitoring") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<div id="monitoring">
|
||||
{{ monitoring_table.render }}
|
||||
</div>
|
||||
{% endblock %}
|
22
congress_dashboard/monitoring/urls.py
Normal file
22
congress_dashboard/monitoring/urls.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright 2017 NEC, 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.conf.urls import url
|
||||
|
||||
from congress_dashboard.monitoring import views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views.IndexView.as_view(), name='index'),
|
||||
]
|
40
congress_dashboard/monitoring/views.py
Normal file
40
congress_dashboard/monitoring/views.py
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright 2017 NEC, 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.
|
||||
|
||||
import logging
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from horizon import messages
|
||||
from horizon import tables
|
||||
|
||||
import congress_dashboard.datasources.utils as ds_utils
|
||||
from congress_dashboard.monitoring import tables as monitor_tables
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class IndexView(tables.DataTableView):
|
||||
"""List policy violations."""
|
||||
table_class = monitor_tables.MonitoringTable
|
||||
template_name = 'admin/monitoring/index.html'
|
||||
|
||||
def get_data(self):
|
||||
try:
|
||||
violations_data = ds_utils.get_policy_violations_data(self.request)
|
||||
return violations_data
|
||||
except Exception as e:
|
||||
msg = _('Unable to policy violations data: %s') % str(e)
|
||||
LOG.exception(msg)
|
||||
messages.error(self.request, msg)
|
||||
return []
|
@ -22,5 +22,4 @@ class Policies(horizon.Panel):
|
||||
slug = "policies"
|
||||
permissions = ('openstack.roles.admin',)
|
||||
|
||||
|
||||
dashboard.Admin.register(Policies)
|
||||
|
@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- New Panel 'Monitoring' added to list the violations for each policy.
|
Loading…
Reference in New Issue
Block a user