437 lines
16 KiB
Python
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
|