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