diff --git a/congress_dashboard/api/congress.py b/congress_dashboard/api/congress.py
index 4768e1a..4bbf526 100644
--- a/congress_dashboard/api/congress.py
+++ b/congress_dashboard/api/congress.py
@@ -14,7 +14,7 @@
from congressclient.v1 import client as congress_client
from django.conf import settings
-import keystoneauth1.identity.v2 as v2
+# import keystoneauth1.identity.v2 as v2
import keystoneauth1.identity.v3 as v3
import keystoneauth1.session as kssession
from openstack_dashboard.api import base
@@ -88,12 +88,7 @@ def congressclient(request):
def get_keystone_session(auth_url, user):
- if auth_url[-3:] == '/v3':
- auth = v3.Token(auth_url, user.token.id, project_id=user.tenant_id)
- else:
- auth = v2.Token(auth_url, user.token.id, tenant_id=user.tenant_id,
- tenant_name=user.tenant_name)
-
+ auth = v3.Token(auth_url, user.token.id, project_id=user.tenant_id)
session = kssession.Session(auth=auth)
return session
@@ -302,3 +297,14 @@ def datasource_statuses_list(request):
wrapper.set_value(key, value)
ds_status.append(wrapper)
return ds_status
+
+
+def datasource_status_list(request, datasource_name):
+ client = congressclient(request)
+ try:
+ status = client.list_datasource_status(datasource_name)
+ return status
+ except Exception:
+ LOG.exception("Failed to retrieve status for datasource %s",
+ datasource_name)
+ raise
diff --git a/congress_dashboard/datasources/tables.py b/congress_dashboard/datasources/tables.py
index 50d0986..05a1b95 100644
--- a/congress_dashboard/datasources/tables.py
+++ b/congress_dashboard/datasources/tables.py
@@ -26,10 +26,6 @@ def get_resource_url(obj):
class DataSourcesTablesTable(tables.DataTable):
name = tables.Column("name", verbose_name=_("Table Name"),
link=get_resource_url)
- datasource_name = tables.Column("datasource_name",
- verbose_name=_("Service"))
- datasource_driver = tables.Column("datasource_driver",
- verbose_name=_("Driver"))
class Meta(object):
name = "datasources_tables"
@@ -37,16 +33,6 @@ class DataSourcesTablesTable(tables.DataTable):
hidden_title = False
-def get_policy_link(datum):
- return reverse('horizon:admin:policies:detail',
- args=(datum['policy_name'],))
-
-
-def get_policy_table_link(datum):
- return reverse('horizon:admin:datasources:policy_table_detail',
- args=(datum['policy_name'], datum['name']))
-
-
class DataSourceRowsTable(tables.DataTable):
class Meta(object):
name = "datasource_rows"
@@ -54,6 +40,22 @@ class DataSourceRowsTable(tables.DataTable):
hidden_title = False
+# TODO(ramineni): support create/delete datasource
+class DataSourcesTable(tables.DataTable):
+ name = tables.Column("name", verbose_name=_("Data Source Name"),
+ link='horizon:admin:datasources:datasource_detail')
+ enabled = tables.Column("enabled", verbose_name=_("Enabled"))
+ driver = tables.Column("driver", verbose_name=_("Driver"))
+# config = tables.Column("config", verbose_name=_("Config"))
+
+ class Meta(object):
+ name = "datasources_list"
+ verbose_name = _("Data Sources")
+ hidden_title = False
+ # table_actions = (CreateDatasource,)
+ # row_actions = (Disable,)
+
+
class DataSourceStatusesTable(tables.DataTable):
datasource_name = tables.Column("service",
verbose_name=_("Service"))
diff --git a/congress_dashboard/datasources/templates/datasources/datasource_detail.html b/congress_dashboard/datasources/templates/datasources/datasource_detail.html
index cc541d5..4b64602 100644
--- a/congress_dashboard/datasources/templates/datasources/datasource_detail.html
+++ b/congress_dashboard/datasources/templates/datasources/datasource_detail.html
@@ -1,9 +1,9 @@
{% extends 'base.html' %}
{% load i18n %}
-{% block title %}{% trans "Datasource Overview" %}{% endblock %}
+{% block title %}{% trans "Data Source Overview" %}{% endblock %}
{% block page_header %}
- {% include "horizon/common/_page_header.html" with title=_("Datasource Details: ")|add:datasource_name %}
+ {% include "horizon/common/_page_header.html" with title=_("Data Source Details: ")|add:datasource_name %}
{% endblock page_header %}
{% block main %}
@@ -11,5 +11,4 @@
{{ datasources_tables_table.render }}
-
{% endblock %}
diff --git a/congress_dashboard/datasources/templates/datasources/index.html b/congress_dashboard/datasources/templates/datasources/index.html
index ad153b1..56cc0ba 100644
--- a/congress_dashboard/datasources/templates/datasources/index.html
+++ b/congress_dashboard/datasources/templates/datasources/index.html
@@ -7,13 +7,10 @@
{% endblock page_header %}
{% block main %}
-
- {{ policies_tables_table.render }}
+
+ {{ datasources_list_table.render }}
-
+
{{ service_status_table.render }}
-
- {{ datasources_tables_table.render }}
-
{% endblock %}
diff --git a/congress_dashboard/datasources/urls.py b/congress_dashboard/datasources/urls.py
index 045cb34..8ab303d 100644
--- a/congress_dashboard/datasources/urls.py
+++ b/congress_dashboard/datasources/urls.py
@@ -21,10 +21,14 @@ from congress_dashboard.datasources import views
SERVICES = (
r'^services/(?P
[^/]+)/(?P[^/]+)/%s$')
+DATASOURCE = r'^(?P[^/]+)/%s$'
urlpatterns = patterns(
'',
url(r'^$', views.IndexView.as_view(), name='index'),
url(SERVICES % 'detail', views.DetailView.as_view(),
name='datasource_table_detail'),
+ url(DATASOURCE % 'detail', views.DatasourceView.as_view(),
+ name='datasource_detail'),
+
)
diff --git a/congress_dashboard/datasources/views.py b/congress_dashboard/datasources/views.py
index 7074a8d..4efb674 100644
--- a/congress_dashboard/datasources/views.py
+++ b/congress_dashboard/datasources/views.py
@@ -31,35 +31,41 @@ logger = logging.getLogger(__name__)
class IndexView(tables.MultiTableView):
"""List service and policy defined data."""
- table_classes = (datasources_tables.DataSourcesTablesTable,
- datasources_tables.DataSourceStatusesTable,)
+ table_classes = (datasources_tables.DataSourcesTable,
+ datasources_tables.DataSourceStatusesTable, )
template_name = 'admin/datasources/index.html'
- def get_datasources_tables_data(self):
+ def get_datasources_list_data(self):
try:
datasources = congress.datasources_list(self.request)
+ return datasources
except Exception as e:
- msg = _('Unable to get services list: %s') % str(e)
+ msg = _('Unable to get data sources list: %s') % str(e)
messages.error(self.request, msg)
return []
- ds_temp = []
- for ds in datasources:
- ds_id = ds['id']
- try:
- ds_tables = congress.datasource_tables_list(self.request,
- ds_id)
- except Exception as e:
- msg_args = {'ds_id': ds_id, 'error': str(e)}
- msg = _('Unable to get tables list for service "%(ds_id)s": '
- '%(error)s') % msg_args
- messages.error(self.request, msg)
- return []
+ def get_service_status_data(self):
+ ds = []
+ try:
+ ds = congress.datasource_statuses_list(self.request)
+ logger.debug("ds status : %s " % ds)
+ except Exception as e:
+ msg = _('Unable to get data source status list: %s') % str(e)
+ messages.error(self.request, msg)
+ return ds
+
+class DatasourceView(tables.DataTableView):
+ template_name = 'admin/datasources/datasource_detail.html'
+ table_class = datasources_tables.DataSourcesTablesTable
+
+ def get_data(self):
+ ds_id = self.kwargs['datasource_id']
+ ds_temp = []
+ try:
+ ds_tables = congress.datasource_tables_list(self.request, ds_id)
for table in ds_tables:
table.set_value('datasource_id', ds_id)
- table.set_value('datasource_name', ds['name'])
- table.set_value('datasource_driver', ds['driver'])
table.set_id_as_name_if_empty()
# Object ids within a Horizon table must be unique. Otherwise,
# Horizon will cache the column values for the object by id and
@@ -68,18 +74,37 @@ class IndexView(tables.MultiTableView):
table.set_value('id', '%s-%s' % (ds_id, table['table_id']))
ds_temp.append(table)
- logger.debug("ds_temp %s" % ds_temp)
- return ds_temp
-
- def get_service_status_data(self):
- ds = []
- try:
- ds = congress.datasource_statuses_list(self.request)
- logger.debug("ds status : %s " % ds)
+ logger.debug("ds_temp %s" % ds_temp)
+ return ds_temp
except Exception as e:
- msg = _('Unable to get datasource status list: %s') % str(e)
+ msg_args = {'ds_id': ds_id, 'error': str(e)}
+ msg = _('Unable to get tables list for service "%(ds_id)s": '
+ '%(error)s') % msg_args
messages.error(self.request, msg)
- return ds
+ return []
+
+ def get_context_data(self, **kwargs):
+ context = super(DatasourceView, self).get_context_data(**kwargs)
+ datasource_id = self.kwargs['datasource_id']
+ try:
+ datasource = congress.datasource_get(self.request, datasource_id)
+ status = congress.datasource_status_list(self.request,
+ datasource['name'])
+ context['last_updated'] = status['last_updated']
+ context['subscribers'] = status['subscribers']
+ context['subscriptions'] = status['subscriptions']
+ context['last_error'] = status['last_error']
+ context['number_of_updates'] = status['number_of_updates']
+ context['datasource_name'] = datasource['name']
+ context['status'] = ('Active' if status['initialized']
+ else 'Not Active')
+ return context
+ except Exception as e:
+ msg_args = {'ds_id': datasource_id, 'error': str(e)}
+ msg = _('Unable to get status for data source "%(ds_id)s": '
+ '%(error)s') % msg_args
+ messages.error(self.request, msg)
+ return []
class DetailView(tables.DataTableView):