Adding cluster detail screen
This commit is contained in:
parent
8061914517
commit
948cbf2e31
|
@ -22,7 +22,6 @@ from keystoneclient import session as ksc_session
|
|||
from keystoneclient.auth.identity import v2
|
||||
from collections import namedtuple
|
||||
from openstack_dashboard.api import base
|
||||
|
||||
from horizon.utils.memoized import memoized # noqa
|
||||
|
||||
|
||||
|
@ -38,16 +37,25 @@ def cueclient(request):
|
|||
|
||||
|
||||
def clusters_list(request, marker=None):
|
||||
#todo
|
||||
#This is needed because the cue client returns a dict
|
||||
#instead of a cluster object.
|
||||
clusters = []
|
||||
clusters_dict = cueclient(request).clusters.list()
|
||||
for cluster_dict in clusters_dict:
|
||||
clusters.append(namedtuple('Cluster', cluster_dict)
|
||||
(**cluster_dict))
|
||||
clusters.append(_to_cluster_object(cluster_dict))
|
||||
return clusters
|
||||
|
||||
|
||||
def cluster_get(request, cluster_id):
|
||||
cluster_dict = cueclient(request).clusters.get(cluster_id)
|
||||
cluster = _to_cluster_object(cluster_dict['cluster'])
|
||||
return cluster
|
||||
|
||||
|
||||
def delete_cluster(request, cluster_id):
|
||||
return cueclient(request).clusters.delete(cluster_id)
|
||||
return cueclient(request).clusters.delete(cluster_id)
|
||||
|
||||
|
||||
#todo
|
||||
#This is needed because the cue client returns a dict
|
||||
#instead of a cluster object.
|
||||
def _to_cluster_object(cluster_dict):
|
||||
return namedtuple('Cluster', cluster_dict)(**cluster_dict)
|
|
@ -22,28 +22,28 @@ from horizon import tables
|
|||
from cuedashboard import api
|
||||
|
||||
|
||||
class CreateQueue(tables.LinkAction):
|
||||
class CreateCluster(tables.LinkAction):
|
||||
name = "create"
|
||||
verbose_name = _("Create Cluster")
|
||||
url = "horizon:project:queues:create"
|
||||
classes = ("ajax-modal", "btn-create")
|
||||
|
||||
|
||||
class DeleteQueue(tables.BatchAction):
|
||||
class DeleteCluster(tables.BatchAction):
|
||||
|
||||
@staticmethod
|
||||
def action_present(count):
|
||||
return ungettext_lazy(
|
||||
u"Terminate Instance",
|
||||
u"Terminate Instances",
|
||||
u"Terminate Cluster",
|
||||
u"Terminate Clusters",
|
||||
count
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def action_past(count):
|
||||
return ungettext_lazy(
|
||||
u"Scheduled deletion of Queue",
|
||||
u"Scheduled deletion of Queues",
|
||||
u"Scheduled deletion of Cluster",
|
||||
u"Scheduled deletion of Clusters",
|
||||
count
|
||||
)
|
||||
|
||||
|
@ -55,7 +55,7 @@ class DeleteQueue(tables.BatchAction):
|
|||
api.delete_cluster(request, obj_id)
|
||||
|
||||
|
||||
class QueuesTable(tables.DataTable):
|
||||
class ClusterTable(tables.DataTable):
|
||||
name = tables.Column("name",
|
||||
verbose_name=_("Name"),
|
||||
link='horizon:project:queues:detail')
|
||||
|
@ -66,5 +66,5 @@ class QueuesTable(tables.DataTable):
|
|||
class Meta:
|
||||
name = "clusters"
|
||||
verbose_name = _("Clusters")
|
||||
table_actions = (CreateQueue, DeleteQueue,)
|
||||
row_actions = (DeleteQueue,)
|
||||
table_actions = (CreateCluster, DeleteCluster,)
|
||||
row_actions = (DeleteCluster,)
|
||||
|
|
|
@ -1,40 +1,17 @@
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from horizon import exceptions
|
||||
from horizon import tabs
|
||||
|
||||
from cuedashboard import api
|
||||
from cuedashboard.queues import tables
|
||||
|
||||
class OverviewTab(tabs.Tab):
|
||||
name = _("Overview")
|
||||
slug = "overview"
|
||||
template_name = "project/queues/_detail_overview.html"
|
||||
|
||||
def get_context_data(self, request):
|
||||
return {"cluster": self.tab_group.kwargs['cluster']}
|
||||
|
||||
|
||||
class InstanceTab(tabs.TableTab):
|
||||
name = _("Instances Tab")
|
||||
slug = "instances_tab"
|
||||
table_classes = (tables.InstancesTable,)
|
||||
template_name = ("horizon/common/_detail_table.html")
|
||||
preload = False
|
||||
|
||||
def has_more_data(self, table):
|
||||
return self._has_more
|
||||
|
||||
def get_instances_data(self):
|
||||
try:
|
||||
marker = self.request.GET.get(
|
||||
tables.InstancesTable._meta.pagination_param, None)
|
||||
|
||||
instances, self._has_more = api.queue_list(
|
||||
self.request,
|
||||
marker)
|
||||
|
||||
return instances
|
||||
except Exception:
|
||||
self._has_more = False
|
||||
error_message = _('Unable to get instances')
|
||||
exceptions.handle(self.request, error_message)
|
||||
|
||||
return []
|
||||
|
||||
class MypanelTabs(tabs.TabGroup):
|
||||
slug = "mypanel_tabs"
|
||||
tabs = (InstanceTab,)
|
||||
sticky = True
|
||||
class ClusterDetailTabs(tabs.TabGroup):
|
||||
slug = "cluster_details"
|
||||
tabs = (OverviewTab,)
|
||||
sticky = True
|
|
@ -21,7 +21,10 @@ from django.conf.urls import url
|
|||
from cuedashboard.queues import views
|
||||
|
||||
|
||||
CLUSTERS = r'^(?P<cluster_id>[^/]+)/%s$'
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', views.IndexView.as_view(),
|
||||
name='index'),
|
||||
url(CLUSTERS % '', views.DetailView.as_view(), name='detail'),
|
||||
)
|
||||
|
|
|
@ -17,13 +17,57 @@
|
|||
# limitations under the License.
|
||||
|
||||
from cuedashboard import api
|
||||
from cuedashboard.queues.tables import QueuesTable
|
||||
from cuedashboard.queues.tables import ClusterTable
|
||||
from horizon import tables
|
||||
from horizon import tabs as horizon_tabs
|
||||
from horizon.utils import memoized
|
||||
from cuedashboard.queues.tabs import ClusterDetailTabs
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
import logging
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class IndexView(tables.DataTableView):
|
||||
table_class = QueuesTable
|
||||
table_class = ClusterTable
|
||||
template_name = 'queues/index.html'
|
||||
|
||||
def get_data(self):
|
||||
return api.clusters_list(self.request)
|
||||
|
||||
|
||||
class DetailView(horizon_tabs.TabbedTableView):
|
||||
tab_group_class = ClusterDetailTabs
|
||||
template_name = 'queues/detail.html'
|
||||
page_title = _("Cluster Details: {{ cluster.name }}")
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(DetailView, self).get_context_data(**kwargs)
|
||||
cluster = self.get_data()
|
||||
table = ClusterTable(self.request)
|
||||
context["cluster"] = cluster
|
||||
context["url"] = self.get_redirect_url()
|
||||
context["actions"] = table.render_row_actions(cluster)
|
||||
return context
|
||||
|
||||
@memoized.memoized_method
|
||||
def get_data(self):
|
||||
|
||||
cluster_id = self.kwargs['cluster_id']
|
||||
cluster = api.cluster_get(self.request, cluster_id)
|
||||
LOG.info('hlahaha')
|
||||
LOG.info(cluster)
|
||||
LOG.info(type(cluster))
|
||||
return cluster
|
||||
|
||||
|
||||
|
||||
def get_tabs(self, request, *args, **kwargs):
|
||||
cluster = self.get_data()
|
||||
return self.tab_group_class(request, cluster=cluster, **kwargs)
|
||||
|
||||
@staticmethod
|
||||
def get_redirect_url():
|
||||
return reverse('horizon:project:queues:index')
|
|
@ -0,0 +1,24 @@
|
|||
{% load i18n sizeformat %}
|
||||
|
||||
<h3>{% trans "Cluster Overview" %}</h3>
|
||||
|
||||
<div class="info detail">
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{% trans "Name" %}</dt>
|
||||
<dd>{{ cluster.name|default:_("None") }}</dd>
|
||||
<dt>{% trans "ID" %}</dt>
|
||||
<dd>{{ cluster.id|default:_("None") }}</dd>
|
||||
<dt>{% trans "Status" %}</dt>
|
||||
<dd>{{ cluster.status|default:_("-") }}</dd>
|
||||
<dt>{% trans "Network" %}</dt>
|
||||
<dd>{{ cluster.network_id|default:_("-") }}</dd>
|
||||
<dt>{% trans "Flavor" %}</dt>
|
||||
<dd>{{ cluster.flavor|default:_("-") }}</dd>
|
||||
<dt>{% trans "Size" %}</dt>
|
||||
<dd>{{ cluster.size|default:_("-") }}</dd>
|
||||
<dt>{% trans "Volume Size" %}</dt>
|
||||
<dd>{{ cluster.volume_size|default:_("-") }}</dd>
|
||||
<dt>{% trans "Endpoints" %}</dt>
|
||||
<dd>{{ cluster.end_points|default:_("-") }}</dd>
|
||||
</dl>
|
||||
</div>
|
|
@ -0,0 +1,11 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Cluster Details"%}{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% include "queues/_detail_overview.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue