cloudkitty-dashboard/cloudkittydashboard/dashboards/admin/hashmap/views.py

437 lines
16 KiB
Python

# Copyright 2015 Objectif Libre
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from horizon import forms
from horizon import tables
from horizon import tabs
from horizon import views
from keystoneauth1 import exceptions
# 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 \
import tables as hashmap_tables
class IndexView(tables.DataTableView):
table_class = hashmap_tables.ServicesTable
template_name = "admin/hashmap/services_list.html"
def get_data(self):
manager = api.cloudkittyclient(self.request)
services = manager.rating.hashmap.get_service().get('services', [])
services = sorted(services, key=lambda service: service['name'])
list_services = []
for s in services:
try:
service = manager.info.get_metric(metric_name=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):
tab_group_class = hashmap_tables.ServiceTabs
template_name = 'admin/hashmap/service_details.html'
def get(self, *args, **kwargs):
service = api.cloudkittyclient(
self.request).rating.hashmap.get_service(
service_id=kwargs['service_id'])
self.request.service_id = service['service_id']
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.rating.hashmap.get_service(
service_id=kwargs['service_id'])
config = manager.info.get_config()
period = None
if service['name'] in config['metrics'].keys():
period = config.get('period', 3600)
context["service_period"] = period
return context
class ServiceCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateServiceForm
form_id = "create_service"
modal_header = _("Create Service")
page_title = _("Create Service")
success_url = reverse_lazy('horizon:admin:hashmap:index')
submit_url = reverse_lazy('horizon:admin:hashmap:service_create')
template_name = 'horizon/common/modal_form.html'
def get_object_id(self, obj):
return obj.service_id
class FieldView(tabs.TabbedTableView):
tab_group_class = hashmap_tables.FieldTabs
template_name = 'admin/hashmap/field_details.html'
def get(self, *args, **kwargs):
field = api.cloudkittyclient(self.request).rating.hashmap.get_field(
field_id=kwargs['field_id'])
self.request.field_id = field['field_id']
self.page_title = "Hashmap Field : %s" % field['name']
return super(FieldView, self).get(*args, **kwargs)
class FieldCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateFieldForm
form_id = "create_field"
modal_header = _("Create Field")
page_title = _("Create Field")
template_name = 'horizon/common/modal_form.html'
success_url = 'horizon:admin:hashmap:service'
submit_url = 'horizon:admin:hashmap:field_create'
def get_object_id(self, obj):
return obj.field_id
def get_context_data(self, **kwargs):
context = super(FieldCreateView, self).get_context_data(**kwargs)
context["service_id"] = self.kwargs['service_id']
args = (self.kwargs['service_id'],)
context['submit_url'] = reverse_lazy(self.submit_url, args=args)
return context
def get_initial(self):
return {"service_id": self.kwargs["service_id"]}
def get_success_url(self, **kwargs):
args = (self.kwargs['service_id'],)
return reverse_lazy(self.success_url, args=args)
class ServiceMappingCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateServiceMappingForm
form_id = "create_mapping"
modal_header = _("Create Mapping")
page_title = _("Create Mapping")
template_name = 'horizon/common/modal_form.html'
success_url = 'horizon:admin:hashmap:service'
submit_url = 'horizon:admin:hashmap:service_mapping_create'
def get_object_id(self, obj):
return obj.mapping_id
def get_context_data(self, **kwargs):
context = super(ServiceMappingCreateView,
self).get_context_data(**kwargs)
context["service_id"] = self.kwargs.get('service_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['service_id'], ))
return context
def get_initial(self):
return {"service_id": self.kwargs.get("service_id")}
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:service',
args=(self.kwargs['service_id'],))
class ServiceMappingEditView(ServiceMappingCreateView):
form_class = hashmap_forms.EditServiceMappingForm
form_id = "update_mapping"
modal_header = _("Update Mapping")
page_title = _("Update Mapping")
submit_url = 'horizon:admin:hashmap:service_mapping_edit'
success_url = 'horizon:admin:hashmap:service_mapping_edit'
def get_initial(self):
out = api.cloudkittyclient(self.request).rating.hashmap.get_mapping(
mapping_id=self.kwargs['mapping_id'])
self.initial = out
return self.initial
def get_context_data(self, **kwargs):
context = super(ServiceMappingEditView,
self).get_context_data(**kwargs)
context["mapping_id"] = self.kwargs.get('mapping_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['mapping_id'], ))
return context
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:service',
args=(self.initial['service_id'], ))
class FieldMappingCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateFieldMappingForm
form_id = "create_field_mapping"
modal_header = _("Create Field Mapping")
page_title = _("Create field Mapping")
template_name = 'horizon/common/modal_form.html'
submit_url = 'horizon:admin:hashmap:field_mapping_create'
success_url = 'horizon:admin:hashmap:field_mapping_create'
def get_object_id(self, obj):
return obj.mapping_id
def get_context_data(self, **kwargs):
context = super(FieldMappingCreateView,
self).get_context_data(**kwargs)
context["field_id"] = self.kwargs.get('field_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['field_id'], ))
return context
def get_initial(self):
return {"field_id": self.kwargs.get("field_id")}
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:field',
args=(self.kwargs['field_id'], ))
class FieldMappingEditView(FieldMappingCreateView):
form_class = hashmap_forms.EditFieldMappingForm
form_id = "update_field_mapping"
modal_header = _("Update Field Mapping")
page_title = _("Update Field Mapping")
submit_url = 'horizon:admin:hashmap:field_mapping_edit'
def get_initial(self):
out = api.cloudkittyclient(self.request).rating.hashmap.get_mapping(
mapping_id=self.kwargs['mapping_id'])
self.initial = out
return self.initial
def get_context_data(self, **kwargs):
context = super(FieldMappingEditView,
self).get_context_data(**kwargs)
context["mapping_id"] = self.kwargs.get('mapping_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['mapping_id'], ))
return context
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:field',
args=(self.initial['field_id'], ))
class GroupCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateGroupForm
form_id = "create_group"
modal_header = _("Create Group")
page_title = _("Create Group")
template_name = 'horizon/common/modal_form.html'
submit_url = 'horizon:admin:hashmap:group_create'
success_url = 'horizon:admin:hashmap:group_create'
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:service',
args=(self.kwargs['service_id'],))
def get_object_id(self, obj):
return obj.group_id
def get_context_data(self, **kwargs):
context = super(GroupCreateView,
self).get_context_data(**kwargs)
context["service_id"] = self.kwargs.get('service_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['service_id'], ))
return context
'''
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:group',
args=(kwargs['group_id'], ))
'''
class ServiceThresholdCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateServiceThresholdForm
form_id = "create_service_threshold"
modal_header = _("Create Service Threshold")
page_title = _("Create Service Threshold")
template_name = 'horizon/common/modal_form.html'
success_url = 'horizon:admin:hashmap:service'
submit_url = 'horizon:admin:hashmap:service_threshold_create'
def get_object_id(self, obj):
return obj.field_id
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:service',
args=(self.kwargs['service_id'],))
def get_context_data(self, **kwargs):
context = super(ServiceThresholdCreateView,
self).get_context_data(**kwargs)
context["service_id"] = self.kwargs.get('service_id')
args = (context['service_id'],)
context['submit_url'] = reverse_lazy(self.submit_url, args=args)
return context
def get_initial(self):
return {"service_id": self.kwargs["service_id"]}
class ServiceThresholdEditView(ServiceThresholdCreateView):
form_class = hashmap_forms.EditServiceThresholdForm
form_id = "update_service_threshold"
modal_header = _("Update Service Threshold")
page_title = _("Update Service Threshold")
submit_url = 'horizon:admin:hashmap:service_threshold_edit'
def get_initial(self):
out = api.cloudkittyclient(self.request).rating.hashmap.get_threshold(
threshold_id=self.kwargs['threshold_id'])
self.initial = out
return self.initial
def get_context_data(self, **kwargs):
context = super(ServiceThresholdEditView,
self).get_context_data(**kwargs)
context["threshold_id"] = self.kwargs.get('threshold_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['threshold_id'], ))
return context
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:service',
args=(self.initial['service_id'], ))
class FieldThresholdCreateView(forms.ModalFormView):
form_class = hashmap_forms.CreateFieldThresholdForm
form_id = "create_field_threshold"
modal_header = _("Create Field Threshold")
page_title = _("Create Field Threshold")
template_name = 'horizon/common/modal_form.html'
success_url = 'horizon:admin:hashmap:field'
submit_url = 'horizon:admin:hashmap:field_threshold_create'
def get_object_id(self, obj):
return obj.field_id
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:field',
args=(self.kwargs['field_id'],))
def get_context_data(self, **kwargs):
context = super(FieldThresholdCreateView,
self).get_context_data(**kwargs)
context["field_id"] = self.kwargs.get('field_id')
args = (context['field_id'],)
context['submit_url'] = reverse_lazy(self.submit_url, args=args)
return context
def get_initial(self):
return {"field_id": self.kwargs["field_id"]}
class FieldThresholdEditView(FieldThresholdCreateView):
form_class = hashmap_forms.EditFieldThresholdForm
form_id = "update_field_threshold"
modal_header = _("Update Field Threshold")
page_title = _("Update Field Threshold")
submit_url = 'horizon:admin:hashmap:field_threshold_edit'
def get_initial(self):
out = api.cloudkittyclient(self.request).rating.hashmap.get_threshold(
threshold_id=self.kwargs['threshold_id'])
self.initial = out
return self.initial
def get_context_data(self, **kwargs):
context = super(FieldThresholdEditView,
self).get_context_data(**kwargs)
context["threshold_id"] = self.kwargs.get('threshold_id')
context['submit_url'] = reverse_lazy(self.submit_url,
args=(context['threshold_id'], ))
return context
def get_success_url(self, **kwargs):
return reverse('horizon:admin:hashmap:field',
args=(self.initial['field_id'], ))
class GroupView(tabs.TabbedTableView):
tab_group_class = hashmap_tables.GroupsTab
template_name = 'admin/hashmap/group_details.html'
def get(self, *args, **kwargs):
group = api.cloudkittyclient(self.request).rating.hashmap.get_group(
group_id=kwargs['group_id']
)
self.request.group_id = group.group_id
self.page_title = "Hashmap Group : %s" % group.name
return super(GroupView, self).get(*args, **kwargs)
def get_data(self):
out = api.cloudkittyclient(self.request).rating.hashmap.get_group()
return api.identify(out)
class GroupDetailsView(views.APIView):
template_name = 'admin/hashmap/group_details.html'
page_title = _("Group Details")
def get_data(self, request, context, *args, **kwargs):
group_id = kwargs.get("group_id")
ck_client = api.cloudkittyclient(self.request)
try:
group = ck_client.rating.hashmap.get_group(group_id=group_id)
except Exception:
group = None
try:
mappings = ck_client.rating.hashmap.get_mapping(
group_id=group_id)['mappings']
except Exception:
mappings = []
try:
thresholds = ck_client.rating.hashmap.get_threshold(
group_id=group_id)['thresholds']
except Exception:
thresholds = []
values = {
"mappings": {"fields": [], "services": []},
"thresholds": {"fields": [], "services": []}
}
for key, value in dict(
mappings=mappings, thresholds=thresholds).items():
for entry in value:
if entry.get('service_id'):
values[key]['services'].append(entry)
else:
values[key]['fields'].append(entry)
context.update(values)
context['group'] = group
return context