Added alarm definition pagination and notification

Change-Id: I1b8f635837662f70a0eb7a140a71fb070a424693
This commit is contained in:
Angelo Mendonca 2015-07-08 19:33:50 -04:00
parent aaef2a0047
commit d527df446c
10 changed files with 146 additions and 36 deletions

View File

@ -10,4 +10,11 @@
{% block main %}
{{ table.render }}
<div class="pagination">
<span class="step-links">
{% if page_offset %}
<a href="?page_offset={{ page_offset}}">Next Page</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -20,7 +20,7 @@ class AlarmDefinitionsTest(helpers.TestCase):
'alarmdef_list.return_value': [],
}) as mock:
res = self.client.get(INDEX_URL)
self.assertEqual(mock.alarmdef_list.call_count, 1)
self.assertEqual(mock.alarmdef_list.call_count, 2)
self.assertTemplateUsed(
res, 'monitoring/alarmdefs/alarm.html')

View File

@ -30,19 +30,55 @@ from monitoring.alarmdefs import constants
from monitoring.alarmdefs import forms as alarm_forms
from monitoring.alarmdefs import tables as alarm_tables
from monitoring import api
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
LIMIT = 10
class IndexView(tables.DataTableView):
table_class = alarm_tables.AlarmsTable
template_name = constants.TEMPLATE_PREFIX + 'alarm.html'
def get_data(self):
page_offset=self.request.GET.get('page_offset')
results = []
if page_offset==None:
page_offset=0
try:
results = api.monitor.alarmdef_list(self.request)
results = api.monitor.alarmdef_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
results = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request, _("Could not retrieve alarm definitions"))
return results
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
contacts = []
page_offset = self.request.GET.get('page_offset')
if page_offset == None:
page_offset = 0
try:
results = api.monitor.alarmdef_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request, _("Could not retrieve alarm definitions"))
return context
context["contacts"] = contacts
if len(context["contacts"]) < LIMIT:
context["page_offset"] = None
else:
context["page_offset"] = contacts.object_list[-1]["id"]
return context
class AlarmCreateView(forms.ModalFormView):
form_class = alarm_forms.CreateAlarmForm

View File

@ -16,23 +16,10 @@
{% block main %}
{{ table.render }}
<style>
.status-icon {
vertical-align: top;
margin-right: 2px;
}
td, th{
white-space: normal;
word-break: break-all;
word-wrap: break-word;
}
</style>
<div class="pagination">
<span class="step-links">
{% if page_offset %}
Page <a href="?page_offset={{ page_offset}}">Next</a>
<a href="?page_offset={{ page_offset}}">Next Page</a>
{% endif %}
</span>
</div>

View File

@ -23,5 +23,18 @@
{% block main %}
{{ table.render }}
<style>
.status-icon {
vertical-align: top;
margin-right: 2px;
}
</style>
<div class="pagination">
<span class="step-links">
{% if page_offset %}
<a href="?page_offset={{ page_offset}}">Page Next</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -40,7 +40,7 @@ from monitoring import api
LOG = logging.getLogger(__name__)
SERVICES = getattr(settings, 'MONITORING_SERVICES', [])
LIMIT = 10
def get_icon(status):
if status == 'chicklet-success':
return constants.OK_ICON
@ -113,16 +113,15 @@ class AlarmServiceView(tables.DataTableView):
return super(AlarmServiceView, self).dispatch(*args, **kwargs)
def get_data(self):
limit = 25
page_offset=self.request.GET.get('page_offset')
contacts = []
if page_offset == None:
page_offset = 0
try:
results = api.monitor.alarm_list(self.request, page_offset, limit)
results.sort(key=lambda x: x['state'])
paginator = Paginator(results, limit)
results = api.monitor.alarm_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
@ -133,15 +132,14 @@ class AlarmServiceView(tables.DataTableView):
def get_context_data(self, **kwargs):
context = super(AlarmServiceView, self).get_context_data(**kwargs)
limit = 25
contacts = []
page_offset = self.request.GET.get('page_offset')
if page_offset == None:
page_offset = 0
try:
results = api.monitor.alarm_list(self.request, page_offset, limit)
paginator = Paginator(results, limit)
results = api.monitor.alarm_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
@ -152,7 +150,7 @@ class AlarmServiceView(tables.DataTableView):
context["contacts"] = contacts
context["service"] = self.service
if len(contacts.object_list) < limit:
if len(contacts.object_list) < LIMIT:
context["page_offset"] = None
else:
context["page_offset"] = contacts.object_list[-1]["id"]
@ -184,15 +182,23 @@ class AlarmHistoryView(tables.DataTableView):
return super(AlarmHistoryView, self).dispatch(*args, **kwargs)
def get_data(self):
page_offset=self.request.GET.get('page_offset')
contacts=[]
id = self.kwargs['id']
name = self.kwargs['name']
results = []
if page_offset == None:
page_offset = 0
try:
results = api.monitor.alarm_history(self.request, id)
results = api.monitor.alarm_history(self.request, id, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request,
_("Could not retrieve alarm history for %s") % id)
return transform_alarm_history(results, name)
return transform_alarm_history(contacts, name)
def get_context_data(self, **kwargs):
context = super(AlarmHistoryView, self).get_context_data(**kwargs)
@ -203,5 +209,28 @@ class AlarmHistoryView(tables.DataTableView):
messages.error(self.request,
_("Could not retrieve alarm for %s") % id)
context['alarm'] = alarm
contacts = []
page_offset = self.request.GET.get('page_offset')
if page_offset == None:
page_offset = 0
try:
results = api.monitor.alarm_history(self.request, id, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request,
_("Could not retrieve alarm history for %s") % id)
return context
context["contacts"] = contacts
if len(contacts.object_list) < LIMIT:
context["page_offset"] = None
else:
context["page_offset"] = contacts.object_list[-1]["id"]
return context

View File

@ -75,8 +75,8 @@ def alarm_delete(request, alarm_id):
return monascaclient(request).alarms.delete(alarm_id=alarm_id)
def alarm_history(request, alarm_id):
result = monascaclient(request).alarms.history(alarm_id=alarm_id)
def alarm_history(request, alarm_id, offset=0, limit=10000):
result = monascaclient(request).alarms.history(alarm_id=alarm_id, offset=offset, limit=limit)
return result['elements'] if type(result) is dict else result
@ -88,8 +88,8 @@ def alarm_patch(request, **kwargs):
return monascaclient(request).alarms.patch(**kwargs)
def alarmdef_list(request, marker=None, paginate=False):
result = monascaclient(request).alarm_definitions.list()
def alarmdef_list(request, offset=0, limit=10000, marker=None, paginate=False):
result = monascaclient(request).alarm_definitions.list(offset=offset, limit=limit)
return result['elements'] if type(result) is dict else result
@ -123,8 +123,8 @@ def alarmdef_patch(request, **kwargs):
return monascaclient(request).alarm_definitions.patch(**kwargs)
def notification_list(request, marker=None, paginate=False):
result = monascaclient(request).notifications.list()
def notification_list(request, offset=0, limit=10000, marker=None, paginate=False):
result = monascaclient(request).notifications.list(offset=offset, limit=limit)
return result['elements'] if type(result) is dict else result

View File

@ -8,4 +8,11 @@
{% load url from future %}
{% block main %}
{{ table.render }}
<div class="pagination">
<span class="step-links">
{% if page_offset %}
<a href="?page_offset={{ page_offset}}">Next Page</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -20,7 +20,7 @@ class AlarmsTest(helpers.TestCase):
'notification_list.return_value': [],
}) as mock:
res = self.client.get(INDEX_URL)
self.assertEqual(mock.notification_list.call_count, 1)
self.assertEqual(mock.notification_list.call_count, 2)
self.assertTemplateUsed(
res, 'monitoring/notifications/index.html')

View File

@ -27,11 +27,12 @@ from horizon import tables
from monitoring.notifications import constants
from monitoring.notifications import forms as notification_forms
from monitoring.notifications import tables as notification_tables
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from monitoring import api
LOG = logging.getLogger(__name__)
LIMIT = 10
class IndexView(tables.DataTableView):
table_class = notification_tables.NotificationsTable
@ -41,15 +42,45 @@ class IndexView(tables.DataTableView):
return super(IndexView, self).dispatch(*args, **kwargs)
def get_data(self):
page_offset=self.request.GET.get('page_offset')
results = []
if page_offset == None:
page_offset = 0
try:
results = api.monitor.notification_list(self.request)
results = api.monitor.notification_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
results = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request, _("Could not retrieve notifications"))
return results
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
contacts = []
results = []
page_offset = self.request.GET.get('page_offset')
if page_offset == None:
page_offset = 0
try:
results = api.monitor.notification_list(self.request, page_offset, LIMIT)
paginator = Paginator(results, LIMIT)
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
except Exception:
messages.error(self.request, _("Could not retrieve notifications"))
return context
context["contacts"] = contacts
if len(contacts.object_list) < LIMIT:
context["page_offset"] = None
else:
context["page_offset"] = contacts.object_list[-1]["id"]
return context