User experience improvement on hashmap's forms
Change the input when creating services and fields in hashmap. Now, there is a select input with services or fields obtained from the api. Change-Id: Ibba803b84c525c4471ac60ca2b9cabce3ebbb05c
This commit is contained in:
parent
f8291137d5
commit
7bbf02e8d7
|
@ -17,6 +17,7 @@ import logging
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
from horizon import forms
|
||||
|
||||
from cloudkittyclient.apiclient import exceptions
|
||||
from cloudkittydashboard.api import cloudkitty as api
|
||||
from cloudkittydashboard.dashboards import common
|
||||
|
||||
|
@ -26,26 +27,88 @@ LOG = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class CreateServiceForm(forms.SelfHandlingForm):
|
||||
name = forms.CharField(label=_("Name"))
|
||||
services_choices = [("service", _("Service")),
|
||||
("custom_service", _("Custom service"))]
|
||||
service_type = forms.ChoiceField(
|
||||
label=_("Service type"),
|
||||
choices=services_choices,
|
||||
widget=forms.Select(attrs={
|
||||
'class': 'switchable',
|
||||
'data-slug': 'servicetype'}),
|
||||
required=True)
|
||||
service = forms.DynamicChoiceField(
|
||||
label=_("Service"),
|
||||
help_text=_("Services are provided by main collector."),
|
||||
widget=forms.Select(attrs={
|
||||
'class': 'switched',
|
||||
'data-switch-on': 'servicetype',
|
||||
'data-servicetype-service': _('Service')}),
|
||||
required=False)
|
||||
custom_service = forms.CharField(
|
||||
label=_("Custom service"),
|
||||
help_text=_("Custom services can be defined for any "
|
||||
"additional collector."),
|
||||
widget=forms.widgets.TextInput(attrs={
|
||||
'class': 'switched',
|
||||
'data-switch-on': 'servicetype',
|
||||
'data-servicetype-custom_service': _('Custom service')}),
|
||||
required=False)
|
||||
|
||||
def handle(self, request, data):
|
||||
name = data['name']
|
||||
LOG.info('Creating service with name %s' % (name))
|
||||
return api.cloudkittyclient(request).hashmap.services.create(name=name)
|
||||
if data['service_type'] == 'service':
|
||||
service = data['service']
|
||||
else:
|
||||
service = data['custom_service']
|
||||
services_mgr = api.cloudkittyclient(request).hashmap.services
|
||||
LOG.info('Creating service with name %s' % (service))
|
||||
return services_mgr.create(name=service)
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(CreateServiceForm, self).__init__(request, *args, **kwargs)
|
||||
services = api.cloudkittyclient(request).service_info.list()
|
||||
services = api.identify(services)
|
||||
choices = sorted([(s.service_id, s.service_id) for s in services])
|
||||
self.fields['service'].choices = choices
|
||||
|
||||
|
||||
class CreateFieldForm(forms.SelfHandlingForm, common.OrderFieldsMixin):
|
||||
service_id = forms.CharField(label=_("Service ID"),
|
||||
widget=forms.TextInput(
|
||||
attrs={'readonly': 'readonly'}))
|
||||
name = forms.CharField(label=_("Name"))
|
||||
attrs={'readonly': 'readonly'}))
|
||||
service_name = forms.CharField(label=_("Service Name"),
|
||||
widget=forms.TextInput(
|
||||
attrs={'readonly': 'readonly'}))
|
||||
|
||||
def handle(self, request, data):
|
||||
name = data['name']
|
||||
service_id = data['service_id']
|
||||
LOG.info('Creating field with name %s' % (name))
|
||||
field = data['field']
|
||||
LOG.info('Creating field with name %s' % (field))
|
||||
fields_mgr = api.cloudkittyclient(request).hashmap.fields
|
||||
return fields_mgr.create(name=name, service_id=service_id)
|
||||
return fields_mgr.create(name=field, service_id=service_id)
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(CreateFieldForm, self).__init__(request, *args, **kwargs)
|
||||
service_id = kwargs['initial']['service_id']
|
||||
manager = api.cloudkittyclient(request)
|
||||
service = manager.hashmap.services.get(service_id=service_id)
|
||||
self.fields['service_name'].initial = service.name
|
||||
|
||||
try:
|
||||
fields = manager.service_info.get(service_id=service.name)
|
||||
except exceptions.NotFound:
|
||||
fields = None
|
||||
|
||||
if fields:
|
||||
fields = api.identify(fields)
|
||||
choices = sorted([(field, field) for field in fields.metadata])
|
||||
self.fields['field'] = forms.DynamicChoiceField(
|
||||
label=_("Field"),
|
||||
required=True)
|
||||
self.fields['field'].choices = choices
|
||||
else:
|
||||
self.fields['field'] = forms.CharField(
|
||||
label=_("Field"),
|
||||
required=True)
|
||||
|
||||
|
||||
class CreateGroupForm(forms.SelfHandlingForm):
|
||||
|
|
|
@ -51,6 +51,10 @@ class ServicesTable(tables.DataTable):
|
|||
"""
|
||||
name = tables.Column('name', verbose_name=_("Name"),
|
||||
link='horizon:admin:hashmap:service')
|
||||
unit = tables.Column("unit", verbose_name=_("Unit"))
|
||||
|
||||
def get_object_id(self, datum):
|
||||
return datum['id']
|
||||
|
||||
class Meta(object):
|
||||
name = "services"
|
||||
|
|
|
@ -5,6 +5,13 @@
|
|||
{% block main %}
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
|
||||
{% if service_period %}
|
||||
{% blocktrans with service_period as period %}
|
||||
<p>Usage data are collected every {{ period }} seconds.</p>
|
||||
{% endblocktrans %}
|
||||
{% endif %}
|
||||
|
||||
{{ tab_group.render }}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -21,6 +21,7 @@ from horizon import tables
|
|||
from horizon import tabs
|
||||
from horizon import views
|
||||
|
||||
from cloudkittyclient.apiclient import exceptions
|
||||
from cloudkittydashboard.api import cloudkitty as api
|
||||
from cloudkittydashboard.dashboards.admin.hashmap import forms as hashmap_forms
|
||||
from cloudkittydashboard.dashboards.admin.hashmap \
|
||||
|
@ -32,8 +33,23 @@ class IndexView(tables.DataTableView):
|
|||
template_name = "admin/hashmap/services_list.html"
|
||||
|
||||
def get_data(self):
|
||||
out = api.cloudkittyclient(self.request).hashmap.services.list()
|
||||
return api.identify(out)
|
||||
manager = api.cloudkittyclient(self.request)
|
||||
services = manager.hashmap.services.list()
|
||||
services = sorted(services, key=lambda service: service.name)
|
||||
list_services = []
|
||||
for s in services:
|
||||
try:
|
||||
service = manager.service_info.get(service_id=s.name)
|
||||
unit = service.unit
|
||||
except exceptions.NotFound:
|
||||
unit = "-"
|
||||
|
||||
list_services.append({
|
||||
"id": s.service_id,
|
||||
"name": s.name,
|
||||
"unit": unit
|
||||
})
|
||||
return list_services
|
||||
|
||||
|
||||
class ServiceView(tabs.TabbedTableView):
|
||||
|
@ -48,6 +64,21 @@ class ServiceView(tabs.TabbedTableView):
|
|||
self.page_title = "Hashmap Service : %s" % service.name
|
||||
return super(ServiceView, self).get(*args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(ServiceView, self).get_context_data(**kwargs)
|
||||
manager = api.cloudkittyclient(self.request)
|
||||
service = manager.hashmap.services.get(
|
||||
service_id=kwargs['service_id']
|
||||
)
|
||||
config = manager.config.get_config()
|
||||
period = None
|
||||
|
||||
if service.name in config['collect']['services']:
|
||||
period = config['collect']['period']
|
||||
|
||||
context["service_period"] = period
|
||||
return context
|
||||
|
||||
|
||||
class ServiceCreateView(forms.ModalFormView):
|
||||
form_class = hashmap_forms.CreateServiceForm
|
||||
|
|
Loading…
Reference in New Issue