Adding cluster detail screen

This commit is contained in:
Steve Leon 2015-03-09 11:56:12 -07:00
parent 8061914517
commit 948cbf2e31
7 changed files with 120 additions and 53 deletions

View File

@ -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)

View File

@ -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,)

View File

@ -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

View File

@ -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'),
)

View File

@ -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')

View File

@ -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>

View File

@ -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 %}