From ebc879e663f7761dd135b07f4b1a1f022452f396 Mon Sep 17 00:00:00 2001 From: memo Date: Mon, 19 Oct 2015 18:12:12 +0100 Subject: [PATCH] Clients tab Added client tab to show registered clients Change-Id: I0f3791be386e214403e0a3f0c3c6fabc91e539b7 --- freezer_ui/actions/__init__.py | 0 freezer_ui/clients/__init__.py | 0 freezer_ui/clients/models.py | 0 freezer_ui/clients/panel.py | 25 ++++++++++++ freezer_ui/clients/tables.py | 31 +++++++++++++++ .../clients/templates/clients/index.html | 17 +++++++++ freezer_ui/clients/urls.py | 23 +++++++++++ freezer_ui/clients/views.py | 38 +++++++++++++++++++ freezer_ui/dashboard.py | 2 +- freezer_ui/utils.py | 1 + 10 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 freezer_ui/actions/__init__.py create mode 100644 freezer_ui/clients/__init__.py create mode 100644 freezer_ui/clients/models.py create mode 100644 freezer_ui/clients/panel.py create mode 100644 freezer_ui/clients/tables.py create mode 100644 freezer_ui/clients/templates/clients/index.html create mode 100644 freezer_ui/clients/urls.py create mode 100644 freezer_ui/clients/views.py diff --git a/freezer_ui/actions/__init__.py b/freezer_ui/actions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/freezer_ui/clients/__init__.py b/freezer_ui/clients/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/freezer_ui/clients/models.py b/freezer_ui/clients/models.py new file mode 100644 index 0000000..e69de29 diff --git a/freezer_ui/clients/panel.py b/freezer_ui/clients/panel.py new file mode 100644 index 0000000..6d3c673 --- /dev/null +++ b/freezer_ui/clients/panel.py @@ -0,0 +1,25 @@ +# 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 freezer_ui import dashboard + + +class ClientsPanel(horizon.Panel): + name = _("Clients") + slug = "clients" + + +dashboard.Freezer.register(ClientsPanel) diff --git a/freezer_ui/clients/tables.py b/freezer_ui/clients/tables.py new file mode 100644 index 0000000..51964a3 --- /dev/null +++ b/freezer_ui/clients/tables.py @@ -0,0 +1,31 @@ +# 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 tables + + +LOG = logging.getLogger(__name__) + + +class ClientsTable(tables.DataTable): + client_id = tables.Column('client_id', verbose_name=_("Client ID")) + name = tables.Column('hostname', verbose_name=_("Hostname")) + + class Meta: + name = "clients" + verbose_name = _("Clients") + row_actions = () + table_actions = () + multi_select = False diff --git a/freezer_ui/clients/templates/clients/index.html b/freezer_ui/clients/templates/clients/index.html new file mode 100644 index 0000000..23972aa --- /dev/null +++ b/freezer_ui/clients/templates/clients/index.html @@ -0,0 +1,17 @@ +{% extends 'base.html' %} + +{% block css %} + {% include "_stylesheets.html" %} + +{% endblock %} + +{% load i18n %} +{% block title %}{% trans "Clients" %}{% endblock %} + +{% block page_header %} + {% include "horizon/common/_page_header.html" with title=_("Clients") %} +{% endblock page_header %} + +{% block main %} + {{ table.render }} +{% endblock %} \ No newline at end of file diff --git a/freezer_ui/clients/urls.py b/freezer_ui/clients/urls.py new file mode 100644 index 0000000..1b6db61 --- /dev/null +++ b/freezer_ui/clients/urls.py @@ -0,0 +1,23 @@ +# 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 patterns +from django.conf.urls import url + +from freezer_ui.clients import views + + +urlpatterns = patterns( + '', + url(r'^$', views.IndexView.as_view(), name='index'), +) diff --git a/freezer_ui/clients/views.py b/freezer_ui/clients/views.py new file mode 100644 index 0000000..e74e0f2 --- /dev/null +++ b/freezer_ui/clients/views.py @@ -0,0 +1,38 @@ +# 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.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +from horizon import exceptions +from horizon import tables + +from freezer_ui.clients import tables as freezer_tables +import freezer_ui.api.api as freezer_api + +LOG = logging.getLogger(__name__) + + +class IndexView(tables.DataTableView): + name = _("Backups") + slug = "backups" + table_class = freezer_tables.ClientsTable + template_name = "freezer_ui/clients/index.html" + + def get_data(self): + try: + return freezer_api.client_list(self.request) + except Exception: + redirect = reverse("horizon:freezer_ui:clients:index") + msg = _('Unable to retrieve details.') + exceptions.handle(self.request, msg, redirect=redirect) diff --git a/freezer_ui/dashboard.py b/freezer_ui/dashboard.py index ab7d639..7c8cd71 100644 --- a/freezer_ui/dashboard.py +++ b/freezer_ui/dashboard.py @@ -18,7 +18,7 @@ import horizon class FreezerDR(horizon.PanelGroup): slug = "freezerdr" name = _("Backup and Restore") - panels = ('jobs', 'sessions', 'backups') + panels = ('jobs', 'sessions', 'backups', 'clients') class Freezer(horizon.Dashboard): diff --git a/freezer_ui/utils.py b/freezer_ui/utils.py index de69a07..43c9cc5 100644 --- a/freezer_ui/utils.py +++ b/freezer_ui/utils.py @@ -87,6 +87,7 @@ class Client(object): self.uuid = uuid self.hostname = hostname self.client_id = client_id + self.id = client_id class ActionJob(object):