Merge "Wrap api calls with tracing decorators"

This commit is contained in:
Jenkins 2016-12-02 11:59:40 +00:00 committed by Gerrit Code Review
commit 86bec0003e
12 changed files with 445 additions and 3 deletions

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf import settings
from django import shortcuts from django import shortcuts
from django import template from django import template
from django.utils import encoding from django.utils import encoding
@ -20,6 +21,8 @@ from django.views import generic
import horizon import horizon
from horizon import exceptions from horizon import exceptions
from osprofiler import profiler
class PageTitleMixin(object): class PageTitleMixin(object):
"""A mixin that renders out a page title into a view. """A mixin that renders out a page title into a view.
@ -65,8 +68,20 @@ class PageTitleMixin(object):
return super(PageTitleMixin, self).render_to_response(context) return super(PageTitleMixin, self).render_to_response(context)
def trace(name):
def decorator(func):
if getattr(settings, 'OPENSTACK_PROFILER', {}).get('enabled', False):
return profiler.trace(name, info=None, hide_args=False,
allow_multiple_trace=True)(func)
else:
return func
return decorator
class HorizonTemplateView(PageTitleMixin, generic.TemplateView): class HorizonTemplateView(PageTitleMixin, generic.TemplateView):
pass @trace('horizon.render_to_response')
def render_to_response(self, context):
return super(HorizonTemplateView, self).render_to_response(context)
class HorizonFormView(PageTitleMixin, generic.FormView): class HorizonFormView(PageTitleMixin, generic.FormView):

View File

@ -36,6 +36,7 @@ from horizon.utils.memoized import memoized_with_request # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.api import nova from openstack_dashboard.api import nova
from openstack_dashboard.contrib.developer.profiler import api as profiler
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -249,6 +250,7 @@ def update_pagination(entities, page_size, marker, sort_dir):
return entities, has_more_data, has_prev_data return entities, has_more_data, has_prev_data
@profiler.trace
def volume_list_paged(request, search_opts=None, marker=None, paginate=False, def volume_list_paged(request, search_opts=None, marker=None, paginate=False,
sort_dir="desc"): sort_dir="desc"):
"""To see all volumes in the cloud as an admin you can pass in a special """To see all volumes in the cloud as an admin you can pass in a special
@ -288,6 +290,7 @@ def volume_list_paged(request, search_opts=None, marker=None, paginate=False,
return volumes, has_more_data, has_prev_data return volumes, has_more_data, has_prev_data
@profiler.trace
def volume_get(request, volume_id): def volume_get(request, volume_id):
volume_data = cinderclient(request).volumes.get(volume_id) volume_data = cinderclient(request).volumes.get(volume_id)
@ -311,6 +314,7 @@ def volume_get(request, volume_id):
return Volume(volume_data) return Volume(volume_data)
@profiler.trace
def volume_create(request, size, name, description, volume_type, def volume_create(request, size, name, description, volume_type,
snapshot_id=None, metadata=None, image_id=None, snapshot_id=None, metadata=None, image_id=None,
availability_zone=None, source_volid=None): availability_zone=None, source_volid=None):
@ -328,25 +332,30 @@ def volume_create(request, size, name, description, volume_type,
return Volume(volume) return Volume(volume)
@profiler.trace
def volume_extend(request, volume_id, new_size): def volume_extend(request, volume_id, new_size):
return cinderclient(request).volumes.extend(volume_id, new_size) return cinderclient(request).volumes.extend(volume_id, new_size)
@profiler.trace
def volume_delete(request, volume_id): def volume_delete(request, volume_id):
return cinderclient(request).volumes.delete(volume_id) return cinderclient(request).volumes.delete(volume_id)
@profiler.trace
def volume_retype(request, volume_id, new_type, migration_policy): def volume_retype(request, volume_id, new_type, migration_policy):
return cinderclient(request).volumes.retype(volume_id, return cinderclient(request).volumes.retype(volume_id,
new_type, new_type,
migration_policy) migration_policy)
@profiler.trace
def volume_set_bootable(request, volume_id, bootable): def volume_set_bootable(request, volume_id, bootable):
return cinderclient(request).volumes.set_bootable(volume_id, return cinderclient(request).volumes.set_bootable(volume_id,
bootable) bootable)
@profiler.trace
def volume_update(request, volume_id, name, description): def volume_update(request, volume_id, name, description):
vol_data = {'name': name, vol_data = {'name': name,
'description': description} 'description': description}
@ -355,18 +364,22 @@ def volume_update(request, volume_id, name, description):
**vol_data) **vol_data)
@profiler.trace
def volume_set_metadata(request, volume_id, metadata): def volume_set_metadata(request, volume_id, metadata):
return cinderclient(request).volumes.set_metadata(volume_id, metadata) return cinderclient(request).volumes.set_metadata(volume_id, metadata)
@profiler.trace
def volume_delete_metadata(request, volume_id, keys): def volume_delete_metadata(request, volume_id, keys):
return cinderclient(request).volumes.delete_metadata(volume_id, keys) return cinderclient(request).volumes.delete_metadata(volume_id, keys)
@profiler.trace
def volume_reset_state(request, volume_id, state): def volume_reset_state(request, volume_id, state):
return cinderclient(request).volumes.reset_state(volume_id, state) return cinderclient(request).volumes.reset_state(volume_id, state)
@profiler.trace
def volume_upload_to_image(request, volume_id, force, image_name, def volume_upload_to_image(request, volume_id, force, image_name,
container_format, disk_format): container_format, disk_format):
return cinderclient(request).volumes.upload_to_image(volume_id, return cinderclient(request).volumes.upload_to_image(volume_id,
@ -376,10 +389,12 @@ def volume_upload_to_image(request, volume_id, force, image_name,
disk_format) disk_format)
@profiler.trace
def volume_get_encryption_metadata(request, volume_id): def volume_get_encryption_metadata(request, volume_id):
return cinderclient(request).volumes.get_encryption_metadata(volume_id) return cinderclient(request).volumes.get_encryption_metadata(volume_id)
@profiler.trace
def volume_migrate(request, volume_id, host, force_host_copy=False, def volume_migrate(request, volume_id, host, force_host_copy=False,
lock_volume=False): lock_volume=False):
return cinderclient(request).volumes.migrate_volume(volume_id, return cinderclient(request).volumes.migrate_volume(volume_id,
@ -388,11 +403,13 @@ def volume_migrate(request, volume_id, host, force_host_copy=False,
lock_volume) lock_volume)
@profiler.trace
def volume_snapshot_get(request, snapshot_id): def volume_snapshot_get(request, snapshot_id):
snapshot = cinderclient(request).volume_snapshots.get(snapshot_id) snapshot = cinderclient(request).volume_snapshots.get(snapshot_id)
return VolumeSnapshot(snapshot) return VolumeSnapshot(snapshot)
@profiler.trace
def volume_snapshot_list(request, search_opts=None): def volume_snapshot_list(request, search_opts=None):
snapshots, _, __ = volume_snapshot_list_paged(request, snapshots, _, __ = volume_snapshot_list_paged(request,
search_opts=search_opts, search_opts=search_opts,
@ -400,6 +417,7 @@ def volume_snapshot_list(request, search_opts=None):
return snapshots return snapshots
@profiler.trace
def volume_snapshot_list_paged(request, search_opts=None, marker=None, def volume_snapshot_list_paged(request, search_opts=None, marker=None,
paginate=False, sort_dir="desc"): paginate=False, sort_dir="desc"):
has_more_data = False has_more_data = False
@ -430,6 +448,7 @@ def volume_snapshot_list_paged(request, search_opts=None, marker=None,
return snapshots, has_more_data, has_prev_data return snapshots, has_more_data, has_prev_data
@profiler.trace
def volume_snapshot_create(request, volume_id, name, def volume_snapshot_create(request, volume_id, name,
description=None, force=False): description=None, force=False):
data = {'name': name, data = {'name': name,
@ -441,10 +460,12 @@ def volume_snapshot_create(request, volume_id, name,
volume_id, **data)) volume_id, **data))
@profiler.trace
def volume_snapshot_delete(request, snapshot_id): def volume_snapshot_delete(request, snapshot_id):
return cinderclient(request).volume_snapshots.delete(snapshot_id) return cinderclient(request).volume_snapshots.delete(snapshot_id)
@profiler.trace
def volume_snapshot_update(request, snapshot_id, name, description): def volume_snapshot_update(request, snapshot_id, name, description):
snapshot_data = {'name': name, snapshot_data = {'name': name,
'description': description} 'description': description}
@ -453,26 +474,31 @@ def volume_snapshot_update(request, snapshot_id, name, description):
**snapshot_data) **snapshot_data)
@profiler.trace
def volume_snapshot_set_metadata(request, snapshot_id, metadata): def volume_snapshot_set_metadata(request, snapshot_id, metadata):
return cinderclient(request).volume_snapshots.set_metadata( return cinderclient(request).volume_snapshots.set_metadata(
snapshot_id, metadata) snapshot_id, metadata)
@profiler.trace
def volume_snapshot_delete_metadata(request, snapshot_id, keys): def volume_snapshot_delete_metadata(request, snapshot_id, keys):
return cinderclient(request).volume_snapshots.delete_metadata( return cinderclient(request).volume_snapshots.delete_metadata(
snapshot_id, keys) snapshot_id, keys)
@profiler.trace
def volume_snapshot_reset_state(request, snapshot_id, state): def volume_snapshot_reset_state(request, snapshot_id, state):
return cinderclient(request).volume_snapshots.reset_state( return cinderclient(request).volume_snapshots.reset_state(
snapshot_id, state) snapshot_id, state)
@profiler.trace
def volume_cgroup_get(request, cgroup_id): def volume_cgroup_get(request, cgroup_id):
cgroup = cinderclient(request).consistencygroups.get(cgroup_id) cgroup = cinderclient(request).consistencygroups.get(cgroup_id)
return VolumeConsistencyGroup(cgroup) return VolumeConsistencyGroup(cgroup)
@profiler.trace
def volume_cgroup_get_with_vol_type_names(request, cgroup_id): def volume_cgroup_get_with_vol_type_names(request, cgroup_id):
cgroup = volume_cgroup_get(request, cgroup_id) cgroup = volume_cgroup_get(request, cgroup_id)
vol_types = volume_type_list(request) vol_types = volume_type_list(request)
@ -485,6 +511,7 @@ def volume_cgroup_get_with_vol_type_names(request, cgroup_id):
return cgroup return cgroup
@profiler.trace
def volume_cgroup_list(request, search_opts=None): def volume_cgroup_list(request, search_opts=None):
c_client = cinderclient(request) c_client = cinderclient(request)
if c_client is None: if c_client is None:
@ -493,6 +520,7 @@ def volume_cgroup_list(request, search_opts=None):
search_opts=search_opts)] search_opts=search_opts)]
@profiler.trace
def volume_cgroup_list_with_vol_type_names(request, search_opts=None): def volume_cgroup_list_with_vol_type_names(request, search_opts=None):
cgroups = volume_cgroup_list(request, search_opts) cgroups = volume_cgroup_list(request, search_opts)
vol_types = volume_type_list(request) vol_types = volume_type_list(request)
@ -507,6 +535,7 @@ def volume_cgroup_list_with_vol_type_names(request, search_opts=None):
return cgroups return cgroups
@profiler.trace
def volume_cgroup_create(request, volume_types, name, def volume_cgroup_create(request, volume_types, name,
description=None, availability_zone=None): description=None, availability_zone=None):
data = {'name': name, data = {'name': name,
@ -518,6 +547,7 @@ def volume_cgroup_create(request, volume_types, name,
return VolumeConsistencyGroup(cgroup) return VolumeConsistencyGroup(cgroup)
@profiler.trace
def volume_cgroup_create_from_source(request, name, cg_snapshot_id=None, def volume_cgroup_create_from_source(request, name, cg_snapshot_id=None,
source_cgroup_id=None, source_cgroup_id=None,
description=None, description=None,
@ -532,10 +562,12 @@ def volume_cgroup_create_from_source(request, name, cg_snapshot_id=None,
project_id)) project_id))
@profiler.trace
def volume_cgroup_delete(request, cgroup_id, force=False): def volume_cgroup_delete(request, cgroup_id, force=False):
return cinderclient(request).consistencygroups.delete(cgroup_id, force) return cinderclient(request).consistencygroups.delete(cgroup_id, force)
@profiler.trace
def volume_cgroup_update(request, cgroup_id, name=None, description=None, def volume_cgroup_update(request, cgroup_id, name=None, description=None,
add_vols=None, remove_vols=None): add_vols=None, remove_vols=None):
cgroup_data = {} cgroup_data = {}
@ -589,6 +621,7 @@ def volume_backup_supported(request):
return cinder_config.get('enable_backup', False) return cinder_config.get('enable_backup', False)
@profiler.trace
def volume_backup_get(request, backup_id): def volume_backup_get(request, backup_id):
backup = cinderclient(request).backups.get(backup_id) backup = cinderclient(request).backups.get(backup_id)
return VolumeBackup(backup) return VolumeBackup(backup)
@ -599,6 +632,7 @@ def volume_backup_list(request):
return backups return backups
@profiler.trace
def volume_backup_list_paged(request, marker=None, paginate=False, def volume_backup_list_paged(request, marker=None, paginate=False,
sort_dir="desc"): sort_dir="desc"):
has_more_data = False has_more_data = False
@ -629,6 +663,7 @@ def volume_backup_list_paged(request, marker=None, paginate=False,
return backups, has_more_data, has_prev_data return backups, has_more_data, has_prev_data
@profiler.trace
def volume_backup_create(request, def volume_backup_create(request,
volume_id, volume_id,
container_name, container_name,
@ -642,15 +677,18 @@ def volume_backup_create(request,
return VolumeBackup(backup) return VolumeBackup(backup)
@profiler.trace
def volume_backup_delete(request, backup_id): def volume_backup_delete(request, backup_id):
return cinderclient(request).backups.delete(backup_id) return cinderclient(request).backups.delete(backup_id)
@profiler.trace
def volume_backup_restore(request, backup_id, volume_id): def volume_backup_restore(request, backup_id, volume_id):
return cinderclient(request).restores.restore(backup_id=backup_id, return cinderclient(request).restores.restore(backup_id=backup_id,
volume_id=volume_id) volume_id=volume_id)
@profiler.trace
def volume_manage(request, def volume_manage(request,
host, host,
identifier, identifier,
@ -673,10 +711,12 @@ def volume_manage(request,
bootable=bootable) bootable=bootable)
@profiler.trace
def volume_unmanage(request, volume_id): def volume_unmanage(request, volume_id):
return cinderclient(request).volumes.unmanage(volume=volume_id) return cinderclient(request).volumes.unmanage(volume=volume_id)
@profiler.trace
def tenant_quota_get(request, tenant_id): def tenant_quota_get(request, tenant_id):
c_client = cinderclient(request) c_client = cinderclient(request)
if c_client is None: if c_client is None:
@ -684,10 +724,12 @@ def tenant_quota_get(request, tenant_id):
return base.QuotaSet(c_client.quotas.get(tenant_id)) return base.QuotaSet(c_client.quotas.get(tenant_id))
@profiler.trace
def tenant_quota_update(request, tenant_id, **kwargs): def tenant_quota_update(request, tenant_id, **kwargs):
return cinderclient(request).quotas.update(tenant_id, **kwargs) return cinderclient(request).quotas.update(tenant_id, **kwargs)
@profiler.trace
def default_quota_get(request, tenant_id): def default_quota_get(request, tenant_id):
return base.QuotaSet(cinderclient(request).quotas.defaults(tenant_id)) return base.QuotaSet(cinderclient(request).quotas.defaults(tenant_id))
@ -732,19 +774,23 @@ def volume_type_get_with_qos_association(request, volume_type_id):
return vol_type return vol_type
@profiler.trace
def default_quota_update(request, **kwargs): def default_quota_update(request, **kwargs):
cinderclient(request).quota_classes.update(DEFAULT_QUOTA_NAME, **kwargs) cinderclient(request).quota_classes.update(DEFAULT_QUOTA_NAME, **kwargs)
@profiler.trace
def volume_type_list(request): def volume_type_list(request):
return cinderclient(request).volume_types.list() return cinderclient(request).volume_types.list()
@profiler.trace
def volume_type_create(request, name, description=None, is_public=True): def volume_type_create(request, name, description=None, is_public=True):
return cinderclient(request).volume_types.create(name, description, return cinderclient(request).volume_types.create(name, description,
is_public) is_public)
@profiler.trace
def volume_type_update(request, volume_type_id, name=None, description=None, def volume_type_update(request, volume_type_id, name=None, description=None,
is_public=None): is_public=None):
return cinderclient(request).volume_types.update(volume_type_id, return cinderclient(request).volume_types.update(volume_type_id,
@ -753,11 +799,13 @@ def volume_type_update(request, volume_type_id, name=None, description=None,
is_public) is_public)
@profiler.trace
@memoized @memoized
def volume_type_default(request): def volume_type_default(request):
return cinderclient(request).volume_types.default() return cinderclient(request).volume_types.default()
@profiler.trace
def volume_type_delete(request, volume_type_id): def volume_type_delete(request, volume_type_id):
try: try:
return cinderclient(request).volume_types.delete(volume_type_id) return cinderclient(request).volume_types.delete(volume_type_id)
@ -766,32 +814,39 @@ def volume_type_delete(request, volume_type_id):
"This volume type is used by one or more volumes.")) "This volume type is used by one or more volumes."))
@profiler.trace
def volume_type_get(request, volume_type_id): def volume_type_get(request, volume_type_id):
return cinderclient(request).volume_types.get(volume_type_id) return cinderclient(request).volume_types.get(volume_type_id)
@profiler.trace
def volume_encryption_type_create(request, volume_type_id, data): def volume_encryption_type_create(request, volume_type_id, data):
return cinderclient(request).volume_encryption_types.create(volume_type_id, return cinderclient(request).volume_encryption_types.create(volume_type_id,
specs=data) specs=data)
@profiler.trace
def volume_encryption_type_delete(request, volume_type_id): def volume_encryption_type_delete(request, volume_type_id):
return cinderclient(request).volume_encryption_types.delete(volume_type_id) return cinderclient(request).volume_encryption_types.delete(volume_type_id)
@profiler.trace
def volume_encryption_type_get(request, volume_type_id): def volume_encryption_type_get(request, volume_type_id):
return cinderclient(request).volume_encryption_types.get(volume_type_id) return cinderclient(request).volume_encryption_types.get(volume_type_id)
@profiler.trace
def volume_encryption_type_list(request): def volume_encryption_type_list(request):
return cinderclient(request).volume_encryption_types.list() return cinderclient(request).volume_encryption_types.list()
@profiler.trace
def volume_encryption_type_update(request, volume_type_id, data): def volume_encryption_type_update(request, volume_type_id, data):
return cinderclient(request).volume_encryption_types.update(volume_type_id, return cinderclient(request).volume_encryption_types.update(volume_type_id,
specs=data) specs=data)
@profiler.trace
def volume_type_extra_get(request, type_id, raw=False): def volume_type_extra_get(request, type_id, raw=False):
vol_type = volume_type_get(request, type_id) vol_type = volume_type_get(request, type_id)
extras = vol_type.get_keys() extras = vol_type.get_keys()
@ -813,18 +868,22 @@ def volume_type_extra_delete(request, type_id, keys):
return vol_type.unset_keys(keys) return vol_type.unset_keys(keys)
@profiler.trace
def qos_spec_list(request): def qos_spec_list(request):
return cinderclient(request).qos_specs.list() return cinderclient(request).qos_specs.list()
@profiler.trace
def qos_spec_get(request, qos_spec_id): def qos_spec_get(request, qos_spec_id):
return cinderclient(request).qos_specs.get(qos_spec_id) return cinderclient(request).qos_specs.get(qos_spec_id)
@profiler.trace
def qos_spec_delete(request, qos_spec_id): def qos_spec_delete(request, qos_spec_id):
return cinderclient(request).qos_specs.delete(qos_spec_id, force=True) return cinderclient(request).qos_specs.delete(qos_spec_id, force=True)
@profiler.trace
def qos_spec_create(request, name, specs): def qos_spec_create(request, name, specs):
return cinderclient(request).qos_specs.create(name, specs) return cinderclient(request).qos_specs.create(name, specs)
@ -838,22 +897,27 @@ def qos_spec_get_keys(request, qos_spec_id, raw=False):
key, value in qos_specs.items()] key, value in qos_specs.items()]
@profiler.trace
def qos_spec_set_keys(request, qos_spec_id, specs): def qos_spec_set_keys(request, qos_spec_id, specs):
return cinderclient(request).qos_specs.set_keys(qos_spec_id, specs) return cinderclient(request).qos_specs.set_keys(qos_spec_id, specs)
@profiler.trace
def qos_spec_unset_keys(request, qos_spec_id, specs): def qos_spec_unset_keys(request, qos_spec_id, specs):
return cinderclient(request).qos_specs.unset_keys(qos_spec_id, specs) return cinderclient(request).qos_specs.unset_keys(qos_spec_id, specs)
@profiler.trace
def qos_spec_associate(request, qos_specs, vol_type_id): def qos_spec_associate(request, qos_specs, vol_type_id):
return cinderclient(request).qos_specs.associate(qos_specs, vol_type_id) return cinderclient(request).qos_specs.associate(qos_specs, vol_type_id)
@profiler.trace
def qos_spec_disassociate(request, qos_specs, vol_type_id): def qos_spec_disassociate(request, qos_specs, vol_type_id):
return cinderclient(request).qos_specs.disassociate(qos_specs, vol_type_id) return cinderclient(request).qos_specs.disassociate(qos_specs, vol_type_id)
@profiler.trace
def qos_spec_get_associations(request, qos_spec_id): def qos_spec_get_associations(request, qos_spec_id):
return cinderclient(request).qos_specs.get_associations(qos_spec_id) return cinderclient(request).qos_specs.get_associations(qos_spec_id)
@ -862,6 +926,7 @@ def qos_specs_list(request):
return [QosSpecs(s) for s in qos_spec_list(request)] return [QosSpecs(s) for s in qos_spec_list(request)]
@profiler.trace
@memoized @memoized
def tenant_absolute_limits(request): def tenant_absolute_limits(request):
limits = cinderclient(request).limits.get().absolute limits = cinderclient(request).limits.get().absolute
@ -882,14 +947,17 @@ def tenant_absolute_limits(request):
return limits_dict return limits_dict
@profiler.trace
def service_list(request): def service_list(request):
return cinderclient(request).services.list() return cinderclient(request).services.list()
@profiler.trace
def availability_zone_list(request, detailed=False): def availability_zone_list(request, detailed=False):
return cinderclient(request).availability_zones.list(detailed=detailed) return cinderclient(request).availability_zones.list(detailed=detailed)
@profiler.trace
@memoized_with_request(cinderclient) @memoized_with_request(cinderclient)
def list_extensions(cinder_api): def list_extensions(cinder_api):
return tuple(cinder_list_extensions.ListExtManager(cinder_api).show_all()) return tuple(cinder_list_extensions.ListExtManager(cinder_api).show_all())
@ -905,6 +973,7 @@ def extension_supported(extensions, extension_name):
return False return False
@profiler.trace
def transfer_list(request, detailed=True, search_opts=None): def transfer_list(request, detailed=True, search_opts=None):
"""To see all volumes transfers as an admin pass in a special """To see all volumes transfers as an admin pass in a special
search option: {'all_tenants': 1} search option: {'all_tenants': 1}
@ -918,24 +987,29 @@ def transfer_list(request, detailed=True, search_opts=None):
return [] return []
@profiler.trace
def transfer_get(request, transfer_id): def transfer_get(request, transfer_id):
transfer_data = cinderclient(request).transfers.get(transfer_id) transfer_data = cinderclient(request).transfers.get(transfer_id)
return VolumeTransfer(transfer_data) return VolumeTransfer(transfer_data)
@profiler.trace
def transfer_create(request, transfer_id, name): def transfer_create(request, transfer_id, name):
volume = cinderclient(request).transfers.create(transfer_id, name) volume = cinderclient(request).transfers.create(transfer_id, name)
return VolumeTransfer(volume) return VolumeTransfer(volume)
@profiler.trace
def transfer_accept(request, transfer_id, auth_key): def transfer_accept(request, transfer_id, auth_key):
return cinderclient(request).transfers.accept(transfer_id, auth_key) return cinderclient(request).transfers.accept(transfer_id, auth_key)
@profiler.trace
def transfer_delete(request, transfer_id): def transfer_delete(request, transfer_id):
return cinderclient(request).transfers.delete(transfer_id) return cinderclient(request).transfers.delete(transfer_id)
@profiler.trace
def pool_list(request, detailed=False): def pool_list(request, detailed=False):
c_client = cinderclient(request) c_client = cinderclient(request)
if c_client is None: if c_client is None:

View File

@ -19,6 +19,7 @@ from collections import OrderedDict
from horizon.utils import memoized from horizon.utils import memoized
from openstack_dashboard.api import neutron from openstack_dashboard.api import neutron
from openstack_dashboard.contrib.developer.profiler import api as profiler
neutronclient = neutron.neutronclient neutronclient = neutron.neutronclient
@ -77,10 +78,12 @@ def rule_create(request, **kwargs):
return Rule(rule) return Rule(rule)
@profiler.trace
def rule_list(request, **kwargs): def rule_list(request, **kwargs):
return _rule_list(request, expand_policy=True, **kwargs) return _rule_list(request, expand_policy=True, **kwargs)
@profiler.trace
def rule_list_for_tenant(request, tenant_id, **kwargs): def rule_list_for_tenant(request, tenant_id, **kwargs):
"""Return a rule list available for the tenant. """Return a rule list available for the tenant.
@ -104,6 +107,7 @@ def _rule_list(request, expand_policy, **kwargs):
return [Rule(r) for r in rules] return [Rule(r) for r in rules]
@profiler.trace
def rule_get(request, rule_id): def rule_get(request, rule_id):
return _rule_get(request, rule_id, expand_policy=True) return _rule_get(request, rule_id, expand_policy=True)
@ -120,10 +124,12 @@ def _rule_get(request, rule_id, expand_policy):
return Rule(rule) return Rule(rule)
@profiler.trace
def rule_delete(request, rule_id): def rule_delete(request, rule_id):
neutronclient(request).delete_firewall_rule(rule_id) neutronclient(request).delete_firewall_rule(rule_id)
@profiler.trace
def rule_update(request, rule_id, **kwargs): def rule_update(request, rule_id, **kwargs):
body = {'firewall_rule': kwargs} body = {'firewall_rule': kwargs}
rule = neutronclient(request).update_firewall_rule( rule = neutronclient(request).update_firewall_rule(
@ -131,6 +137,7 @@ def rule_update(request, rule_id, **kwargs):
return Rule(rule) return Rule(rule)
@profiler.trace
def policy_create(request, **kwargs): def policy_create(request, **kwargs):
"""Create a firewall policy """Create a firewall policy
@ -148,10 +155,12 @@ def policy_create(request, **kwargs):
return Policy(policy) return Policy(policy)
@profiler.trace
def policy_list(request, **kwargs): def policy_list(request, **kwargs):
return _policy_list(request, expand_rule=True, **kwargs) return _policy_list(request, expand_rule=True, **kwargs)
@profiler.trace
def policy_list_for_tenant(request, tenant_id, **kwargs): def policy_list_for_tenant(request, tenant_id, **kwargs):
"""Return a policy list available for the tenant. """Return a policy list available for the tenant.
@ -176,6 +185,7 @@ def _policy_list(request, expand_rule, **kwargs):
return [Policy(p) for p in policies] return [Policy(p) for p in policies]
@profiler.trace
def policy_get(request, policy_id): def policy_get(request, policy_id):
return _policy_get(request, policy_id, expand_rule=True) return _policy_get(request, policy_id, expand_rule=True)
@ -195,10 +205,12 @@ def _policy_get(request, policy_id, expand_rule):
return Policy(policy) return Policy(policy)
@profiler.trace
def policy_delete(request, policy_id): def policy_delete(request, policy_id):
neutronclient(request).delete_firewall_policy(policy_id) neutronclient(request).delete_firewall_policy(policy_id)
@profiler.trace
def policy_update(request, policy_id, **kwargs): def policy_update(request, policy_id, **kwargs):
body = {'firewall_policy': kwargs} body = {'firewall_policy': kwargs}
policy = neutronclient(request).update_firewall_policy( policy = neutronclient(request).update_firewall_policy(
@ -206,18 +218,21 @@ def policy_update(request, policy_id, **kwargs):
return Policy(policy) return Policy(policy)
@profiler.trace
def policy_insert_rule(request, policy_id, **kwargs): def policy_insert_rule(request, policy_id, **kwargs):
policy = neutronclient(request).firewall_policy_insert_rule( policy = neutronclient(request).firewall_policy_insert_rule(
policy_id, kwargs) policy_id, kwargs)
return Policy(policy) return Policy(policy)
@profiler.trace
def policy_remove_rule(request, policy_id, **kwargs): def policy_remove_rule(request, policy_id, **kwargs):
policy = neutronclient(request).firewall_policy_remove_rule( policy = neutronclient(request).firewall_policy_remove_rule(
policy_id, kwargs) policy_id, kwargs)
return Policy(policy) return Policy(policy)
@profiler.trace
def firewall_create(request, **kwargs): def firewall_create(request, **kwargs):
"""Create a firewall for specified policy """Create a firewall for specified policy
@ -234,10 +249,12 @@ def firewall_create(request, **kwargs):
return Firewall(firewall) return Firewall(firewall)
@profiler.trace
def firewall_list(request, **kwargs): def firewall_list(request, **kwargs):
return _firewall_list(request, expand_policy=True, **kwargs) return _firewall_list(request, expand_policy=True, **kwargs)
@profiler.trace
def firewall_list_for_tenant(request, tenant_id, **kwargs): def firewall_list_for_tenant(request, tenant_id, **kwargs):
"""Return a firewall list available for the tenant. """Return a firewall list available for the tenant.
@ -264,6 +281,7 @@ def _firewall_list(request, expand_policy, **kwargs):
return [Firewall(f) for f in firewalls] return [Firewall(f) for f in firewalls]
@profiler.trace
def firewall_get(request, firewall_id): def firewall_get(request, firewall_id):
return _firewall_get(request, firewall_id, expand_policy=True) return _firewall_get(request, firewall_id, expand_policy=True)
@ -281,10 +299,12 @@ def _firewall_get(request, firewall_id, expand_policy):
return Firewall(firewall) return Firewall(firewall)
@profiler.trace
def firewall_delete(request, firewall_id): def firewall_delete(request, firewall_id):
neutronclient(request).delete_firewall(firewall_id) neutronclient(request).delete_firewall(firewall_id)
@profiler.trace
def firewall_update(request, firewall_id, **kwargs): def firewall_update(request, firewall_id, **kwargs):
body = {'firewall': kwargs} body = {'firewall': kwargs}
firewall = neutronclient(request).update_firewall( firewall = neutronclient(request).update_firewall(
@ -292,6 +312,7 @@ def firewall_update(request, firewall_id, **kwargs):
return Firewall(firewall) return Firewall(firewall)
@profiler.trace
@memoized.memoized @memoized.memoized
def firewall_unassociated_routers_list(request, tenant_id): def firewall_unassociated_routers_list(request, tenant_id):
all_routers = neutron.router_list(request, tenant_id=tenant_id) all_routers = neutron.router_list(request, tenant_id=tenant_id)

View File

@ -36,6 +36,7 @@ from six.moves import _thread as thread
from horizon.utils import functions as utils from horizon.utils import functions as utils
from horizon.utils.memoized import memoized # noqa from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.contrib.developer.profiler import api as profiler
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -209,10 +210,12 @@ def _normalize_list_input(filters, **kwargs):
kwargs['filters'] = filters kwargs['filters'] = filters
@profiler.trace
def image_delete(request, image_id): def image_delete(request, image_id):
return glanceclient(request).images.delete(image_id) return glanceclient(request).images.delete(image_id)
@profiler.trace
def image_get(request, image_id): def image_get(request, image_id):
"""Returns an Image object populated with metadata for image """Returns an Image object populated with metadata for image
with supplied identifier. with supplied identifier.
@ -221,6 +224,7 @@ def image_get(request, image_id):
return Image(image) return Image(image)
@profiler.trace
def image_list_detailed(request, marker=None, sort_dir='desc', def image_list_detailed(request, marker=None, sort_dir='desc',
sort_key='created_at', filters=None, paginate=False, sort_key='created_at', filters=None, paginate=False,
reversed_order=False, **kwargs): reversed_order=False, **kwargs):
@ -327,6 +331,7 @@ def image_list_detailed(request, marker=None, sort_dir='desc',
return wrapped_images, has_more_data, has_prev_data return wrapped_images, has_more_data, has_prev_data
@profiler.trace
def image_update(request, image_id, **kwargs): def image_update(request, image_id, **kwargs):
image_data = kwargs.get('data', None) image_data = kwargs.get('data', None)
try: try:
@ -391,6 +396,7 @@ class ExternallyUploadedImage(Image):
return self._token_id return self._token_id
@profiler.trace
def image_create(request, **kwargs): def image_create(request, **kwargs):
"""Create image. """Create image.
@ -442,6 +448,7 @@ def image_create(request, **kwargs):
return Image(image) return Image(image)
@profiler.trace
def image_update_properties(request, image_id, remove_props=None, **kwargs): def image_update_properties(request, image_id, remove_props=None, **kwargs):
"""Add or update a custom property of an image.""" """Add or update a custom property of an image."""
return glanceclient(request, '2').images.update(image_id, return glanceclient(request, '2').images.update(image_id,
@ -449,6 +456,7 @@ def image_update_properties(request, image_id, remove_props=None, **kwargs):
**kwargs) **kwargs)
@profiler.trace
def image_delete_properties(request, image_id, keys): def image_delete_properties(request, image_id, keys):
"""Delete custom properties for an image.""" """Delete custom properties for an image."""
return glanceclient(request, '2').images.update(image_id, keys) return glanceclient(request, '2').images.update(image_id, keys)
@ -525,6 +533,7 @@ def metadefs_namespace_get(request, namespace, resource_type=None, wrap=False):
return namespace return namespace
@profiler.trace
def metadefs_namespace_list(request, def metadefs_namespace_list(request,
filters=None, filters=None,
sort_dir='asc', sort_dir='asc',
@ -611,6 +620,7 @@ def metadefs_namespace_list(request,
return namespaces, has_more_data, has_prev_data return namespaces, has_more_data, has_prev_data
@profiler.trace
def metadefs_namespace_full_list(request, resource_type, filters=None, def metadefs_namespace_full_list(request, resource_type, filters=None,
*args, **kwargs): *args, **kwargs):
filters = filters or {} filters = filters or {}
@ -624,20 +634,24 @@ def metadefs_namespace_full_list(request, resource_type, filters=None,
], has_more_data, has_prev_data ], has_more_data, has_prev_data
@profiler.trace
def metadefs_namespace_create(request, namespace): def metadefs_namespace_create(request, namespace):
return glanceclient(request, '2').metadefs_namespace.create(**namespace) return glanceclient(request, '2').metadefs_namespace.create(**namespace)
@profiler.trace
def metadefs_namespace_update(request, namespace_name, **properties): def metadefs_namespace_update(request, namespace_name, **properties):
return glanceclient(request, '2').metadefs_namespace.update( return glanceclient(request, '2').metadefs_namespace.update(
namespace_name, namespace_name,
**properties) **properties)
@profiler.trace
def metadefs_namespace_delete(request, namespace_name): def metadefs_namespace_delete(request, namespace_name):
return glanceclient(request, '2').metadefs_namespace.delete(namespace_name) return glanceclient(request, '2').metadefs_namespace.delete(namespace_name)
@profiler.trace
def metadefs_resource_types_list(request): def metadefs_resource_types_list(request):
# Listing Resource Types requires the v2 API. If not supported we return # Listing Resource Types requires the v2 API. If not supported we return
# an empty array so callers don't need to worry about version checking. # an empty array so callers don't need to worry about version checking.
@ -647,6 +661,7 @@ def metadefs_resource_types_list(request):
return glanceclient(request, '2').metadefs_resource_type.list() return glanceclient(request, '2').metadefs_resource_type.list()
@profiler.trace
def metadefs_namespace_resource_types(request, namespace_name): def metadefs_namespace_resource_types(request, namespace_name):
resource_types = glanceclient(request, '2').metadefs_resource_type.get( resource_types = glanceclient(request, '2').metadefs_resource_type.get(
namespace_name) namespace_name)
@ -655,6 +670,7 @@ def metadefs_namespace_resource_types(request, namespace_name):
return list(resource_types) return list(resource_types)
@profiler.trace
def metadefs_namespace_add_resource_type(request, def metadefs_namespace_add_resource_type(request,
namespace_name, namespace_name,
resource_type): resource_type):
@ -662,6 +678,7 @@ def metadefs_namespace_add_resource_type(request,
namespace_name, **resource_type) namespace_name, **resource_type)
@profiler.trace
def metadefs_namespace_remove_resource_type(request, def metadefs_namespace_remove_resource_type(request,
namespace_name, namespace_name,
resource_type_name): resource_type_name):

View File

@ -25,6 +25,7 @@ from horizon import exceptions
from horizon.utils import functions as utils from horizon.utils import functions as utils
from horizon.utils.memoized import memoized # noqa from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.contrib.developer.profiler import api as profiler
def format_parameters(params): def format_parameters(params):
@ -57,6 +58,7 @@ def heatclient(request, password=None):
return client return client
@profiler.trace
def stacks_list(request, marker=None, sort_dir='desc', sort_key='created_at', def stacks_list(request, marker=None, sort_dir='desc', sort_key='created_at',
paginate=False, filters=None): paginate=False, filters=None):
limit = getattr(settings, 'API_RESULT_LIMIT', 1000) limit = getattr(settings, 'API_RESULT_LIMIT', 1000)
@ -107,6 +109,7 @@ def _ignore_if(key, value):
return False return False
@profiler.trace
def get_template_files(template_data=None, template_url=None): def get_template_files(template_data=None, template_url=None):
if template_data: if template_data:
tpl = template_data tpl = template_data
@ -147,93 +150,116 @@ def _get_file_contents(from_data, files):
_get_file_contents(value, files) _get_file_contents(value, files)
@profiler.trace
def stack_delete(request, stack_id): def stack_delete(request, stack_id):
return heatclient(request).stacks.delete(stack_id) return heatclient(request).stacks.delete(stack_id)
@profiler.trace
def stack_get(request, stack_id): def stack_get(request, stack_id):
return heatclient(request).stacks.get(stack_id) return heatclient(request).stacks.get(stack_id)
@profiler.trace
def template_get(request, stack_id): def template_get(request, stack_id):
return heatclient(request).stacks.template(stack_id) return heatclient(request).stacks.template(stack_id)
@profiler.trace
def stack_create(request, password=None, **kwargs): def stack_create(request, password=None, **kwargs):
return heatclient(request, password).stacks.create(**kwargs) return heatclient(request, password).stacks.create(**kwargs)
@profiler.trace
def stack_preview(request, password=None, **kwargs): def stack_preview(request, password=None, **kwargs):
return heatclient(request, password).stacks.preview(**kwargs) return heatclient(request, password).stacks.preview(**kwargs)
@profiler.trace
def stack_update(request, stack_id, password=None, **kwargs): def stack_update(request, stack_id, password=None, **kwargs):
return heatclient(request, password).stacks.update(stack_id, **kwargs) return heatclient(request, password).stacks.update(stack_id, **kwargs)
@profiler.trace
def snapshot_create(request, stack_id): def snapshot_create(request, stack_id):
return heatclient(request).stacks.snapshot(stack_id) return heatclient(request).stacks.snapshot(stack_id)
@profiler.trace
def snapshot_list(request, stack_id): def snapshot_list(request, stack_id):
return heatclient(request).stacks.snapshot_list(stack_id) return heatclient(request).stacks.snapshot_list(stack_id)
@profiler.trace
def snapshot_show(request, stack_id, snapshot_id): def snapshot_show(request, stack_id, snapshot_id):
return heatclient(request).stacks.snapshot_show(stack_id, snapshot_id) return heatclient(request).stacks.snapshot_show(stack_id, snapshot_id)
@profiler.trace
def snapshot_delete(request, stack_id, snapshot_id): def snapshot_delete(request, stack_id, snapshot_id):
return heatclient(request).stacks.snapshot_delete(stack_id, snapshot_id) return heatclient(request).stacks.snapshot_delete(stack_id, snapshot_id)
@profiler.trace
def events_list(request, stack_name): def events_list(request, stack_name):
return heatclient(request).events.list(stack_name) return heatclient(request).events.list(stack_name)
@profiler.trace
def resources_list(request, stack_name): def resources_list(request, stack_name):
return heatclient(request).resources.list(stack_name) return heatclient(request).resources.list(stack_name)
@profiler.trace
def resource_get(request, stack_id, resource_name): def resource_get(request, stack_id, resource_name):
return heatclient(request).resources.get(stack_id, resource_name) return heatclient(request).resources.get(stack_id, resource_name)
@profiler.trace
def resource_metadata_get(request, stack_id, resource_name): def resource_metadata_get(request, stack_id, resource_name):
return heatclient(request).resources.metadata(stack_id, resource_name) return heatclient(request).resources.metadata(stack_id, resource_name)
@profiler.trace
def template_validate(request, **kwargs): def template_validate(request, **kwargs):
return heatclient(request).stacks.validate(**kwargs) return heatclient(request).stacks.validate(**kwargs)
@profiler.trace
def action_check(request, stack_id): def action_check(request, stack_id):
return heatclient(request).actions.check(stack_id) return heatclient(request).actions.check(stack_id)
@profiler.trace
def action_suspend(request, stack_id): def action_suspend(request, stack_id):
return heatclient(request).actions.suspend(stack_id) return heatclient(request).actions.suspend(stack_id)
@profiler.trace
def action_resume(request, stack_id): def action_resume(request, stack_id):
return heatclient(request).actions.resume(stack_id) return heatclient(request).actions.resume(stack_id)
@profiler.trace
def resource_types_list(request, filters=None): def resource_types_list(request, filters=None):
return heatclient(request).resource_types.list(filters=filters) return heatclient(request).resource_types.list(filters=filters)
@profiler.trace
def resource_type_get(request, resource_type): def resource_type_get(request, resource_type):
return heatclient(request).resource_types.get(resource_type) return heatclient(request).resource_types.get(resource_type)
@profiler.trace
def service_list(request): def service_list(request):
return heatclient(request).services.list() return heatclient(request).services.list()
@profiler.trace
def template_version_list(request): def template_version_list(request):
return heatclient(request).template_versions.list() return heatclient(request).template_versions.list()
@profiler.trace
def template_function_list(request, template_version): def template_function_list(request, template_version):
return heatclient(request).template_versions.get(template_version) return heatclient(request).template_versions.get(template_version)

View File

@ -35,6 +35,7 @@ from horizon import messages
from horizon.utils import functions as utils from horizon.utils import functions as utils
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.contrib.developer.profiler import api as profiler
from openstack_dashboard import policy from openstack_dashboard import policy
@ -190,6 +191,7 @@ def keystoneclient(request, admin=False):
return conn return conn
@profiler.trace
def domain_create(request, name, description=None, enabled=None): def domain_create(request, name, description=None, enabled=None):
manager = keystoneclient(request, admin=True).domains manager = keystoneclient(request, admin=True).domains
return manager.create(name=name, return manager.create(name=name,
@ -197,16 +199,19 @@ def domain_create(request, name, description=None, enabled=None):
enabled=enabled) enabled=enabled)
@profiler.trace
def domain_get(request, domain_id): def domain_get(request, domain_id):
manager = keystoneclient(request, admin=True).domains manager = keystoneclient(request, admin=True).domains
return manager.get(domain_id) return manager.get(domain_id)
@profiler.trace
def domain_delete(request, domain_id): def domain_delete(request, domain_id):
manager = keystoneclient(request, admin=True).domains manager = keystoneclient(request, admin=True).domains
return manager.delete(domain_id) return manager.delete(domain_id)
@profiler.trace
def domain_list(request): def domain_list(request):
manager = keystoneclient(request, admin=True).domains manager = keystoneclient(request, admin=True).domains
return manager.list() return manager.list()
@ -226,6 +231,7 @@ def domain_lookup(request):
return {domain.id: domain.name} return {domain.id: domain.name}
@profiler.trace
def domain_update(request, domain_id, name=None, description=None, def domain_update(request, domain_id, name=None, description=None,
enabled=None): enabled=None):
manager = keystoneclient(request, admin=True).domains manager = keystoneclient(request, admin=True).domains
@ -238,6 +244,7 @@ def domain_update(request, domain_id, name=None, description=None,
return response return response
@profiler.trace
def tenant_create(request, name, description=None, enabled=None, def tenant_create(request, name, description=None, enabled=None,
domain=None, **kwargs): domain=None, **kwargs):
manager = VERSIONS.get_project_manager(request, admin=True) manager = VERSIONS.get_project_manager(request, admin=True)
@ -318,16 +325,19 @@ def is_domain_admin(request):
# A quick search through the codebase reveals that it's always called with # A quick search through the codebase reveals that it's always called with
# admin=true so I suspect we could eliminate it entirely as with the other # admin=true so I suspect we could eliminate it entirely as with the other
# tenant commands. # tenant commands.
@profiler.trace
def tenant_get(request, project, admin=True): def tenant_get(request, project, admin=True):
manager = VERSIONS.get_project_manager(request, admin=admin) manager = VERSIONS.get_project_manager(request, admin=admin)
return manager.get(project) return manager.get(project)
@profiler.trace
def tenant_delete(request, project): def tenant_delete(request, project):
manager = VERSIONS.get_project_manager(request, admin=True) manager = VERSIONS.get_project_manager(request, admin=True)
return manager.delete(project) return manager.delete(project)
@profiler.trace
def tenant_list(request, paginate=False, marker=None, domain=None, user=None, def tenant_list(request, paginate=False, marker=None, domain=None, user=None,
admin=True, filters=None): admin=True, filters=None):
manager = VERSIONS.get_project_manager(request, admin=admin) manager = VERSIONS.get_project_manager(request, admin=admin)
@ -370,6 +380,7 @@ def tenant_list(request, paginate=False, marker=None, domain=None, user=None,
return tenants, has_more_data return tenants, has_more_data
@profiler.trace
def tenant_update(request, project, name=None, description=None, def tenant_update(request, project, name=None, description=None,
enabled=None, domain=None, **kwargs): enabled=None, domain=None, **kwargs):
manager = VERSIONS.get_project_manager(request, admin=True) manager = VERSIONS.get_project_manager(request, admin=True)
@ -384,6 +395,7 @@ def tenant_update(request, project, name=None, description=None,
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def user_list(request, project=None, domain=None, group=None, filters=None): def user_list(request, project=None, domain=None, group=None, filters=None):
users = [] users = []
if VERSIONS.active < 3: if VERSIONS.active < 3:
@ -406,6 +418,7 @@ def user_list(request, project=None, domain=None, group=None, filters=None):
return [VERSIONS.upgrade_v2_user(user) for user in users] return [VERSIONS.upgrade_v2_user(user) for user in users]
@profiler.trace
def user_create(request, name=None, email=None, password=None, project=None, def user_create(request, name=None, email=None, password=None, project=None,
enabled=None, domain=None, description=None, **data): enabled=None, domain=None, description=None, **data):
manager = keystoneclient(request, admin=True).users manager = keystoneclient(request, admin=True).users
@ -422,15 +435,18 @@ def user_create(request, name=None, email=None, password=None, project=None,
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def user_delete(request, user_id): def user_delete(request, user_id):
return keystoneclient(request, admin=True).users.delete(user_id) return keystoneclient(request, admin=True).users.delete(user_id)
@profiler.trace
def user_get(request, user_id, admin=True): def user_get(request, user_id, admin=True):
user = keystoneclient(request, admin=admin).users.get(user_id) user = keystoneclient(request, admin=admin).users.get(user_id)
return VERSIONS.upgrade_v2_user(user) return VERSIONS.upgrade_v2_user(user)
@profiler.trace
def user_update(request, user, **data): def user_update(request, user, **data):
manager = keystoneclient(request, admin=True).users manager = keystoneclient(request, admin=True).users
error = None error = None
@ -479,6 +495,7 @@ def user_update(request, user, **data):
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def user_update_enabled(request, user, enabled): def user_update_enabled(request, user, enabled):
manager = keystoneclient(request, admin=True).users manager = keystoneclient(request, admin=True).users
if VERSIONS.active < 3: if VERSIONS.active < 3:
@ -487,6 +504,7 @@ def user_update_enabled(request, user, enabled):
return manager.update(user, enabled=enabled) return manager.update(user, enabled=enabled)
@profiler.trace
def user_update_password(request, user, password, admin=True): def user_update_password(request, user, password, admin=True):
if not keystone_can_edit_user(): if not keystone_can_edit_user():
@ -521,6 +539,7 @@ def user_verify_admin_password(request, admin_password):
return False return False
@profiler.trace
def user_update_own_password(request, origpassword, password): def user_update_own_password(request, origpassword, password):
client = keystoneclient(request, admin=False) client = keystoneclient(request, admin=False)
client.user_id = request.user.id client.user_id = request.user.id
@ -530,6 +549,7 @@ def user_update_own_password(request, origpassword, password):
return client.users.update_password(origpassword, password) return client.users.update_password(origpassword, password)
@profiler.trace
def user_update_tenant(request, user, project, admin=True): def user_update_tenant(request, user, project, admin=True):
manager = keystoneclient(request, admin=admin).users manager = keystoneclient(request, admin=admin).users
if VERSIONS.active < 3: if VERSIONS.active < 3:
@ -538,6 +558,7 @@ def user_update_tenant(request, user, project, admin=True):
return manager.update(user, project=project) return manager.update(user, project=project)
@profiler.trace
def group_create(request, domain_id, name, description=None): def group_create(request, domain_id, name, description=None):
manager = keystoneclient(request, admin=True).groups manager = keystoneclient(request, admin=True).groups
return manager.create(domain=domain_id, return manager.create(domain=domain_id,
@ -545,16 +566,19 @@ def group_create(request, domain_id, name, description=None):
description=description) description=description)
@profiler.trace
def group_get(request, group_id, admin=True): def group_get(request, group_id, admin=True):
manager = keystoneclient(request, admin=admin).groups manager = keystoneclient(request, admin=admin).groups
return manager.get(group_id) return manager.get(group_id)
@profiler.trace
def group_delete(request, group_id): def group_delete(request, group_id):
manager = keystoneclient(request, admin=True).groups manager = keystoneclient(request, admin=True).groups
return manager.delete(group_id) return manager.delete(group_id)
@profiler.trace
def group_list(request, domain=None, project=None, user=None, filters=None): def group_list(request, domain=None, project=None, user=None, filters=None):
manager = keystoneclient(request, admin=True).groups manager = keystoneclient(request, admin=True).groups
groups = [] groups = []
@ -583,6 +607,7 @@ def group_list(request, domain=None, project=None, user=None, filters=None):
return groups return groups
@profiler.trace
def group_update(request, group_id, name=None, description=None): def group_update(request, group_id, name=None, description=None):
manager = keystoneclient(request, admin=True).groups manager = keystoneclient(request, admin=True).groups
return manager.update(group=group_id, return manager.update(group=group_id,
@ -590,11 +615,13 @@ def group_update(request, group_id, name=None, description=None):
description=description) description=description)
@profiler.trace
def add_group_user(request, group_id, user_id): def add_group_user(request, group_id, user_id):
manager = keystoneclient(request, admin=True).users manager = keystoneclient(request, admin=True).users
return manager.add_to_group(group=group_id, user=user_id) return manager.add_to_group(group=group_id, user=user_id)
@profiler.trace
def remove_group_user(request, group_id, user_id): def remove_group_user(request, group_id, user_id):
manager = keystoneclient(request, admin=True).users manager = keystoneclient(request, admin=True).users
return manager.remove_from_group(group=group_id, user=user_id) return manager.remove_from_group(group=group_id, user=user_id)
@ -628,6 +655,7 @@ def get_project_groups_roles(request, project):
return groups_roles return groups_roles
@profiler.trace
def role_assignments_list(request, project=None, user=None, role=None, def role_assignments_list(request, project=None, user=None, role=None,
group=None, domain=None, effective=False, group=None, domain=None, effective=False,
include_subtree=True): include_subtree=True):
@ -644,26 +672,31 @@ def role_assignments_list(request, project=None, user=None, role=None,
include_subtree=include_subtree) include_subtree=include_subtree)
@profiler.trace
def role_create(request, name): def role_create(request, name):
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.create(name) return manager.create(name)
@profiler.trace
def role_get(request, role_id): def role_get(request, role_id):
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.get(role_id) return manager.get(role_id)
@profiler.trace
def role_update(request, role_id, name=None): def role_update(request, role_id, name=None):
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.update(role_id, name) return manager.update(role_id, name)
@profiler.trace
def role_delete(request, role_id): def role_delete(request, role_id):
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.delete(role_id) return manager.delete(role_id)
@profiler.trace
def role_list(request, filters=None): def role_list(request, filters=None):
"""Returns a global list of available roles.""" """Returns a global list of available roles."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
@ -683,6 +716,7 @@ def role_list(request, filters=None):
return roles return roles
@profiler.trace
def roles_for_user(request, user, project=None, domain=None): def roles_for_user(request, user, project=None, domain=None):
"""Returns a list of user roles scoped to a project or domain.""" """Returns a list of user roles scoped to a project or domain."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
@ -692,6 +726,7 @@ def roles_for_user(request, user, project=None, domain=None):
return manager.list(user=user, domain=domain, project=project) return manager.list(user=user, domain=domain, project=project)
@profiler.trace
def get_domain_users_roles(request, domain): def get_domain_users_roles(request, domain):
users_roles = collections.defaultdict(list) users_roles = collections.defaultdict(list)
domain_role_assignments = role_assignments_list(request, domain_role_assignments = role_assignments_list(request,
@ -710,18 +745,21 @@ def get_domain_users_roles(request, domain):
return users_roles return users_roles
@profiler.trace
def add_domain_user_role(request, user, role, domain): def add_domain_user_role(request, user, role, domain):
"""Adds a role for a user on a domain.""" """Adds a role for a user on a domain."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.grant(role, user=user, domain=domain) return manager.grant(role, user=user, domain=domain)
@profiler.trace
def remove_domain_user_role(request, user, role, domain=None): def remove_domain_user_role(request, user, role, domain=None):
"""Removes a given single role for a user from a domain.""" """Removes a given single role for a user from a domain."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.revoke(role, user=user, domain=domain) return manager.revoke(role, user=user, domain=domain)
@profiler.trace
def get_project_users_roles(request, project): def get_project_users_roles(request, project):
users_roles = collections.defaultdict(list) users_roles = collections.defaultdict(list)
if VERSIONS.active < 3: if VERSIONS.active < 3:
@ -747,6 +785,7 @@ def get_project_users_roles(request, project):
return users_roles return users_roles
@profiler.trace
def add_tenant_user_role(request, project=None, user=None, role=None, def add_tenant_user_role(request, project=None, user=None, role=None,
group=None, domain=None): group=None, domain=None):
"""Adds a role for a user on a tenant.""" """Adds a role for a user on a tenant."""
@ -758,6 +797,7 @@ def add_tenant_user_role(request, project=None, user=None, role=None,
group=group, domain=domain) group=group, domain=domain)
@profiler.trace
def remove_tenant_user_role(request, project=None, user=None, role=None, def remove_tenant_user_role(request, project=None, user=None, role=None,
group=None, domain=None): group=None, domain=None):
"""Removes a given single role for a user from a tenant.""" """Removes a given single role for a user from a tenant."""
@ -778,11 +818,13 @@ def remove_tenant_user(request, project=None, user=None, domain=None):
project=project, domain=domain) project=project, domain=domain)
@profiler.trace
def roles_for_group(request, group, domain=None, project=None): def roles_for_group(request, group, domain=None, project=None):
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
return manager.list(group=group, domain=domain, project=project) return manager.list(group=group, domain=domain, project=project)
@profiler.trace
def add_group_role(request, role, group, domain=None, project=None): def add_group_role(request, role, group, domain=None, project=None):
"""Adds a role for a group on a domain or project.""" """Adds a role for a group on a domain or project."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
@ -790,6 +832,7 @@ def add_group_role(request, role, group, domain=None, project=None):
project=project) project=project)
@profiler.trace
def remove_group_role(request, role, group, domain=None, project=None): def remove_group_role(request, role, group, domain=None, project=None):
"""Removes a given single role for a group from a domain or project.""" """Removes a given single role for a group from a domain or project."""
manager = keystoneclient(request, admin=True).roles manager = keystoneclient(request, admin=True).roles
@ -797,6 +840,7 @@ def remove_group_role(request, role, group, domain=None, project=None):
domain=domain) domain=domain)
@profiler.trace
def remove_group_roles(request, group, domain=None, project=None): def remove_group_roles(request, group, domain=None, project=None):
"""Removes all roles from a group on a domain or project.""" """Removes all roles from a group on a domain or project."""
client = keystoneclient(request, admin=True) client = keystoneclient(request, admin=True)
@ -837,18 +881,22 @@ def ec2_manager(request):
return ec2.CredentialsManager(client) return ec2.CredentialsManager(client)
@profiler.trace
def list_ec2_credentials(request, user_id): def list_ec2_credentials(request, user_id):
return ec2_manager(request).list(user_id) return ec2_manager(request).list(user_id)
@profiler.trace
def create_ec2_credentials(request, user_id, tenant_id): def create_ec2_credentials(request, user_id, tenant_id):
return ec2_manager(request).create(user_id, tenant_id) return ec2_manager(request).create(user_id, tenant_id)
@profiler.trace
def get_user_ec2_credentials(request, user_id, access_token): def get_user_ec2_credentials(request, user_id, access_token):
return ec2_manager(request).get(user_id, access_token) return ec2_manager(request).get(user_id, access_token)
@profiler.trace
def delete_user_ec2_credentials(request, user_id, access_token): def delete_user_ec2_credentials(request, user_id, access_token):
return ec2_manager(request).delete(user_id, access_token) return ec2_manager(request).delete(user_id, access_token)
@ -914,11 +962,13 @@ def identity_provider_create(request, idp_id, description=None,
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def identity_provider_get(request, idp_id): def identity_provider_get(request, idp_id):
manager = keystoneclient(request, admin=True).federation.identity_providers manager = keystoneclient(request, admin=True).federation.identity_providers
return manager.get(idp_id) return manager.get(idp_id)
@profiler.trace
def identity_provider_update(request, idp_id, description=None, def identity_provider_update(request, idp_id, description=None,
enabled=False, remote_ids=None): enabled=False, remote_ids=None):
manager = keystoneclient(request, admin=True).federation.identity_providers manager = keystoneclient(request, admin=True).federation.identity_providers
@ -931,16 +981,19 @@ def identity_provider_update(request, idp_id, description=None,
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def identity_provider_delete(request, idp_id): def identity_provider_delete(request, idp_id):
manager = keystoneclient(request, admin=True).federation.identity_providers manager = keystoneclient(request, admin=True).federation.identity_providers
return manager.delete(idp_id) return manager.delete(idp_id)
@profiler.trace
def identity_provider_list(request): def identity_provider_list(request):
manager = keystoneclient(request, admin=True).federation.identity_providers manager = keystoneclient(request, admin=True).federation.identity_providers
return manager.list() return manager.list()
@profiler.trace
def mapping_create(request, mapping_id, rules): def mapping_create(request, mapping_id, rules):
manager = keystoneclient(request, admin=True).federation.mappings manager = keystoneclient(request, admin=True).federation.mappings
try: try:
@ -949,26 +1002,31 @@ def mapping_create(request, mapping_id, rules):
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def mapping_get(request, mapping_id): def mapping_get(request, mapping_id):
manager = keystoneclient(request, admin=True).federation.mappings manager = keystoneclient(request, admin=True).federation.mappings
return manager.get(mapping_id) return manager.get(mapping_id)
@profiler.trace
def mapping_update(request, mapping_id, rules): def mapping_update(request, mapping_id, rules):
manager = keystoneclient(request, admin=True).federation.mappings manager = keystoneclient(request, admin=True).federation.mappings
return manager.update(mapping_id, rules=rules) return manager.update(mapping_id, rules=rules)
@profiler.trace
def mapping_delete(request, mapping_id): def mapping_delete(request, mapping_id):
manager = keystoneclient(request, admin=True).federation.mappings manager = keystoneclient(request, admin=True).federation.mappings
return manager.delete(mapping_id) return manager.delete(mapping_id)
@profiler.trace
def mapping_list(request): def mapping_list(request):
manager = keystoneclient(request, admin=True).federation.mappings manager = keystoneclient(request, admin=True).federation.mappings
return manager.list() return manager.list()
@profiler.trace
def protocol_create(request, protocol_id, identity_provider, mapping): def protocol_create(request, protocol_id, identity_provider, mapping):
manager = keystoneclient(request).federation.protocols manager = keystoneclient(request).federation.protocols
try: try:
@ -977,21 +1035,25 @@ def protocol_create(request, protocol_id, identity_provider, mapping):
raise exceptions.Conflict() raise exceptions.Conflict()
@profiler.trace
def protocol_get(request, identity_provider, protocol): def protocol_get(request, identity_provider, protocol):
manager = keystoneclient(request).federation.protocols manager = keystoneclient(request).federation.protocols
return manager.get(identity_provider, protocol) return manager.get(identity_provider, protocol)
@profiler.trace
def protocol_update(request, identity_provider, protocol, mapping): def protocol_update(request, identity_provider, protocol, mapping):
manager = keystoneclient(request).federation.protocols manager = keystoneclient(request).federation.protocols
return manager.update(identity_provider, protocol, mapping) return manager.update(identity_provider, protocol, mapping)
@profiler.trace
def protocol_delete(request, identity_provider, protocol): def protocol_delete(request, identity_provider, protocol):
manager = keystoneclient(request).federation.protocols manager = keystoneclient(request).federation.protocols
return manager.delete(identity_provider, protocol) return manager.delete(identity_provider, protocol)
@profiler.trace
def protocol_list(request, identity_provider): def protocol_list(request, identity_provider):
manager = keystoneclient(request).federation.protocols manager = keystoneclient(request).federation.protocols
return manager.list(identity_provider) return manager.list(identity_provider)

View File

@ -37,6 +37,7 @@ from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.api import network_base from openstack_dashboard.api import network_base
from openstack_dashboard.api import nova from openstack_dashboard.api import nova
from openstack_dashboard.contrib.developer.profiler import api as profiler
from openstack_dashboard import policy from openstack_dashboard import policy
@ -258,6 +259,7 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
secgroups = self.client.list_security_groups(**filters) secgroups = self.client.list_security_groups(**filters)
return [SecurityGroup(sg) for sg in secgroups.get('security_groups')] return [SecurityGroup(sg) for sg in secgroups.get('security_groups')]
@profiler.trace
def list(self): def list(self):
tenant_id = self.request.user.tenant_id tenant_id = self.request.user.tenant_id
return self._list(tenant_id=tenant_id) return self._list(tenant_id=tenant_id)
@ -271,11 +273,13 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
related_sgs = related_sgs.get('security_groups') related_sgs = related_sgs.get('security_groups')
return dict((sg['id'], sg['name']) for sg in related_sgs) return dict((sg['id'], sg['name']) for sg in related_sgs)
@profiler.trace
def get(self, sg_id): def get(self, sg_id):
secgroup = self.client.show_security_group(sg_id).get('security_group') secgroup = self.client.show_security_group(sg_id).get('security_group')
sg_dict = self._sg_name_dict(sg_id, secgroup['security_group_rules']) sg_dict = self._sg_name_dict(sg_id, secgroup['security_group_rules'])
return SecurityGroup(secgroup, sg_dict) return SecurityGroup(secgroup, sg_dict)
@profiler.trace
def create(self, name, desc): def create(self, name, desc):
body = {'security_group': {'name': name, body = {'security_group': {'name': name,
'description': desc, 'description': desc,
@ -283,15 +287,18 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
secgroup = self.client.create_security_group(body) secgroup = self.client.create_security_group(body)
return SecurityGroup(secgroup.get('security_group')) return SecurityGroup(secgroup.get('security_group'))
@profiler.trace
def update(self, sg_id, name, desc): def update(self, sg_id, name, desc):
body = {'security_group': {'name': name, body = {'security_group': {'name': name,
'description': desc}} 'description': desc}}
secgroup = self.client.update_security_group(sg_id, body) secgroup = self.client.update_security_group(sg_id, body)
return SecurityGroup(secgroup.get('security_group')) return SecurityGroup(secgroup.get('security_group'))
@profiler.trace
def delete(self, sg_id): def delete(self, sg_id):
self.client.delete_security_group(sg_id) self.client.delete_security_group(sg_id)
@profiler.trace
def rule_create(self, parent_group_id, def rule_create(self, parent_group_id,
direction=None, ethertype=None, direction=None, ethertype=None,
ip_protocol=None, from_port=None, to_port=None, ip_protocol=None, from_port=None, to_port=None,
@ -322,9 +329,11 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
sg_dict = self._sg_name_dict(parent_group_id, [rule]) sg_dict = self._sg_name_dict(parent_group_id, [rule])
return SecurityGroupRule(rule, sg_dict) return SecurityGroupRule(rule, sg_dict)
@profiler.trace
def rule_delete(self, sgr_id): def rule_delete(self, sgr_id):
self.client.delete_security_group_rule(sgr_id) self.client.delete_security_group_rule(sgr_id)
@profiler.trace
def list_by_instance(self, instance_id): def list_by_instance(self, instance_id):
"""Gets security groups of an instance.""" """Gets security groups of an instance."""
ports = port_list(self.request, device_id=instance_id) ports = port_list(self.request, device_id=instance_id)
@ -333,6 +342,7 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
sg_ids += p.security_groups sg_ids += p.security_groups
return self._list(id=set(sg_ids)) if sg_ids else [] return self._list(id=set(sg_ids)) if sg_ids else []
@profiler.trace
def update_instance_security_group(self, instance_id, def update_instance_security_group(self, instance_id,
new_security_group_ids): new_security_group_ids):
ports = port_list(self.request, device_id=instance_id) ports = port_list(self.request, device_id=instance_id)
@ -371,6 +381,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
self.request = request self.request = request
self.client = neutronclient(request) self.client = neutronclient(request)
@profiler.trace
def list_pools(self): def list_pools(self):
search_opts = {'router:external': True} search_opts = {'router:external': True}
return [FloatingIpPool(pool) for pool return [FloatingIpPool(pool) for pool
@ -393,6 +404,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
fip['instance_id'] = None fip['instance_id'] = None
fip['instance_type'] = None fip['instance_type'] = None
@profiler.trace
def list(self, all_tenants=False, **search_opts): def list(self, all_tenants=False, **search_opts):
if not all_tenants: if not all_tenants:
tenant_id = self.request.user.tenant_id tenant_id = self.request.user.tenant_id
@ -413,11 +425,13 @@ class FloatingIpManager(network_base.FloatingIpManager):
self._set_instance_info(fip, port_dict.get(fip['port_id'])) self._set_instance_info(fip, port_dict.get(fip['port_id']))
return [FloatingIp(fip) for fip in fips] return [FloatingIp(fip) for fip in fips]
@profiler.trace
def get(self, floating_ip_id): def get(self, floating_ip_id):
fip = self.client.show_floatingip(floating_ip_id).get('floatingip') fip = self.client.show_floatingip(floating_ip_id).get('floatingip')
self._set_instance_info(fip) self._set_instance_info(fip)
return FloatingIp(fip) return FloatingIp(fip)
@profiler.trace
def allocate(self, pool, tenant_id=None, **params): def allocate(self, pool, tenant_id=None, **params):
if not tenant_id: if not tenant_id:
tenant_id = self.request.user.project_id tenant_id = self.request.user.project_id
@ -430,9 +444,11 @@ class FloatingIpManager(network_base.FloatingIpManager):
self._set_instance_info(fip) self._set_instance_info(fip)
return FloatingIp(fip) return FloatingIp(fip)
@profiler.trace
def release(self, floating_ip_id): def release(self, floating_ip_id):
self.client.delete_floatingip(floating_ip_id) self.client.delete_floatingip(floating_ip_id)
@profiler.trace
def associate(self, floating_ip_id, port_id): def associate(self, floating_ip_id, port_id):
# NOTE: In Neutron Horizon floating IP support, port_id is # NOTE: In Neutron Horizon floating IP support, port_id is
# "<port_id>_<ip_address>" format to identify multiple ports. # "<port_id>_<ip_address>" format to identify multiple ports.
@ -442,6 +458,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
self.client.update_floatingip(floating_ip_id, self.client.update_floatingip(floating_ip_id,
{'floatingip': update_dict}) {'floatingip': update_dict})
@profiler.trace
def disassociate(self, floating_ip_id): def disassociate(self, floating_ip_id):
update_dict = {'port_id': None} update_dict = {'port_id': None}
self.client.update_floatingip(floating_ip_id, self.client.update_floatingip(floating_ip_id,
@ -469,6 +486,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
for s in n.subnets]) for s in n.subnets])
return reachable_subnets | shared return reachable_subnets | shared
@profiler.trace
def list_targets(self): def list_targets(self):
tenant_id = self.request.user.tenant_id tenant_id = self.request.user.tenant_id
ports = port_list(self.request, tenant_id=tenant_id) ports = port_list(self.request, tenant_id=tenant_id)
@ -501,6 +519,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
search_opts = {'device_id': instance_id} search_opts = {'device_id': instance_id}
return port_list(self.request, **search_opts) return port_list(self.request, **search_opts)
@profiler.trace
def get_target_id_by_instance(self, instance_id, target_list=None): def get_target_id_by_instance(self, instance_id, target_list=None):
if target_list is not None: if target_list is not None:
targets = [target for target in target_list targets = [target for target in target_list
@ -517,6 +536,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
return '{0}_{1}'.format(ports[0].id, return '{0}_{1}'.format(ports[0].id,
ports[0].fixed_ips[0]['ip_address']) ports[0].fixed_ips[0]['ip_address'])
@profiler.trace
def list_target_id_by_instance(self, instance_id, target_list=None): def list_target_id_by_instance(self, instance_id, target_list=None):
if target_list is not None: if target_list is not None:
return [target['id'] for target in target_list return [target['id'] for target in target_list
@ -557,6 +577,7 @@ def neutronclient(request):
return c return c
@profiler.trace
def list_resources_with_long_filters(list_method, def list_resources_with_long_filters(list_method,
filter_attr, filter_values, **params): filter_attr, filter_values, **params):
"""List neutron resources with handling RequestURITooLong exception. """List neutron resources with handling RequestURITooLong exception.
@ -611,6 +632,7 @@ def list_resources_with_long_filters(list_method,
return resources return resources
@profiler.trace
def network_list(request, **params): def network_list(request, **params):
LOG.debug("network_list(): params=%s", params) LOG.debug("network_list(): params=%s", params)
networks = neutronclient(request).list_networks(**params).get('networks') networks = neutronclient(request).list_networks(**params).get('networks')
@ -626,6 +648,7 @@ def network_list(request, **params):
return [Network(n) for n in networks] return [Network(n) for n in networks]
@profiler.trace
def network_list_for_tenant(request, tenant_id, include_external=False, def network_list_for_tenant(request, tenant_id, include_external=False,
**params): **params):
"""Return a network list available for the tenant. """Return a network list available for the tenant.
@ -668,6 +691,7 @@ def network_list_for_tenant(request, tenant_id, include_external=False,
return networks return networks
@profiler.trace
def network_get(request, network_id, expand_subnet=True, **params): def network_get(request, network_id, expand_subnet=True, **params):
LOG.debug("network_get(): netid=%s, params=%s" % (network_id, params)) LOG.debug("network_get(): netid=%s, params=%s" % (network_id, params))
network = neutronclient(request).show_network(network_id, network = neutronclient(request).show_network(network_id,
@ -682,6 +706,7 @@ def network_get(request, network_id, expand_subnet=True, **params):
return Network(network) return Network(network)
@profiler.trace
def network_create(request, **kwargs): def network_create(request, **kwargs):
"""Create a network object. """Create a network object.
@ -701,6 +726,7 @@ def network_create(request, **kwargs):
return Network(network) return Network(network)
@profiler.trace
def network_update(request, network_id, **kwargs): def network_update(request, network_id, **kwargs):
LOG.debug("network_update(): netid=%s, params=%s" % (network_id, kwargs)) LOG.debug("network_update(): netid=%s, params=%s" % (network_id, kwargs))
body = {'network': kwargs} body = {'network': kwargs}
@ -709,17 +735,20 @@ def network_update(request, network_id, **kwargs):
return Network(network) return Network(network)
@profiler.trace
def network_delete(request, network_id): def network_delete(request, network_id):
LOG.debug("network_delete(): netid=%s" % network_id) LOG.debug("network_delete(): netid=%s" % network_id)
neutronclient(request).delete_network(network_id) neutronclient(request).delete_network(network_id)
@profiler.trace
def subnet_list(request, **params): def subnet_list(request, **params):
LOG.debug("subnet_list(): params=%s" % (params)) LOG.debug("subnet_list(): params=%s" % (params))
subnets = neutronclient(request).list_subnets(**params).get('subnets') subnets = neutronclient(request).list_subnets(**params).get('subnets')
return [Subnet(s) for s in subnets] return [Subnet(s) for s in subnets]
@profiler.trace
def subnet_get(request, subnet_id, **params): def subnet_get(request, subnet_id, **params):
LOG.debug("subnet_get(): subnetid=%s, params=%s" % (subnet_id, params)) LOG.debug("subnet_get(): subnetid=%s, params=%s" % (subnet_id, params))
subnet = neutronclient(request).show_subnet(subnet_id, subnet = neutronclient(request).show_subnet(subnet_id,
@ -727,6 +756,7 @@ def subnet_get(request, subnet_id, **params):
return Subnet(subnet) return Subnet(subnet)
@profiler.trace
def subnet_create(request, network_id, **kwargs): def subnet_create(request, network_id, **kwargs):
"""Create a subnet on a specified network. """Create a subnet on a specified network.
@ -755,6 +785,7 @@ def subnet_create(request, network_id, **kwargs):
return Subnet(subnet) return Subnet(subnet)
@profiler.trace
def subnet_update(request, subnet_id, **kwargs): def subnet_update(request, subnet_id, **kwargs):
LOG.debug("subnet_update(): subnetid=%s, kwargs=%s" % (subnet_id, kwargs)) LOG.debug("subnet_update(): subnetid=%s, kwargs=%s" % (subnet_id, kwargs))
body = {'subnet': kwargs} body = {'subnet': kwargs}
@ -763,11 +794,13 @@ def subnet_update(request, subnet_id, **kwargs):
return Subnet(subnet) return Subnet(subnet)
@profiler.trace
def subnet_delete(request, subnet_id): def subnet_delete(request, subnet_id):
LOG.debug("subnet_delete(): subnetid=%s" % subnet_id) LOG.debug("subnet_delete(): subnetid=%s" % subnet_id)
neutronclient(request).delete_subnet(subnet_id) neutronclient(request).delete_subnet(subnet_id)
@profiler.trace
def subnetpool_list(request, **params): def subnetpool_list(request, **params):
LOG.debug("subnetpool_list(): params=%s" % (params)) LOG.debug("subnetpool_list(): params=%s" % (params))
subnetpools = \ subnetpools = \
@ -775,6 +808,7 @@ def subnetpool_list(request, **params):
return [SubnetPool(s) for s in subnetpools] return [SubnetPool(s) for s in subnetpools]
@profiler.trace
def subnetpool_get(request, subnetpool_id, **params): def subnetpool_get(request, subnetpool_id, **params):
LOG.debug("subnetpool_get(): subnetpoolid=%s, params=%s" % LOG.debug("subnetpool_get(): subnetpoolid=%s, params=%s" %
(subnetpool_id, params)) (subnetpool_id, params))
@ -784,6 +818,7 @@ def subnetpool_get(request, subnetpool_id, **params):
return SubnetPool(subnetpool) return SubnetPool(subnetpool)
@profiler.trace
def subnetpool_create(request, name, prefixes, **kwargs): def subnetpool_create(request, name, prefixes, **kwargs):
"""Create a subnetpool. """Create a subnetpool.
@ -820,6 +855,7 @@ def subnetpool_create(request, name, prefixes, **kwargs):
return SubnetPool(subnetpool) return SubnetPool(subnetpool)
@profiler.trace
def subnetpool_update(request, subnetpool_id, **kwargs): def subnetpool_update(request, subnetpool_id, **kwargs):
LOG.debug("subnetpool_update(): subnetpoolid=%s, kwargs=%s" % LOG.debug("subnetpool_update(): subnetpoolid=%s, kwargs=%s" %
(subnetpool_id, kwargs)) (subnetpool_id, kwargs))
@ -830,17 +866,20 @@ def subnetpool_update(request, subnetpool_id, **kwargs):
return SubnetPool(subnetpool) return SubnetPool(subnetpool)
@profiler.trace
def subnetpool_delete(request, subnetpool_id): def subnetpool_delete(request, subnetpool_id):
LOG.debug("subnetpool_delete(): subnetpoolid=%s" % subnetpool_id) LOG.debug("subnetpool_delete(): subnetpoolid=%s" % subnetpool_id)
return neutronclient(request).delete_subnetpool(subnetpool_id) return neutronclient(request).delete_subnetpool(subnetpool_id)
@profiler.trace
def port_list(request, **params): def port_list(request, **params):
LOG.debug("port_list(): params=%s" % (params)) LOG.debug("port_list(): params=%s" % (params))
ports = neutronclient(request).list_ports(**params).get('ports') ports = neutronclient(request).list_ports(**params).get('ports')
return [Port(p) for p in ports] return [Port(p) for p in ports]
@profiler.trace
def port_get(request, port_id, **params): def port_get(request, port_id, **params):
LOG.debug("port_get(): portid=%s, params=%s" % (port_id, params)) LOG.debug("port_get(): portid=%s, params=%s" % (port_id, params))
port = neutronclient(request).show_port(port_id, **params).get('port') port = neutronclient(request).show_port(port_id, **params).get('port')
@ -854,6 +893,7 @@ def unescape_port_kwargs(**kwargs):
return kwargs return kwargs
@profiler.trace
def port_create(request, network_id, **kwargs): def port_create(request, network_id, **kwargs):
"""Create a port on a specified network. """Create a port on a specified network.
@ -877,11 +917,13 @@ def port_create(request, network_id, **kwargs):
return Port(port) return Port(port)
@profiler.trace
def port_delete(request, port_id): def port_delete(request, port_id):
LOG.debug("port_delete(): portid=%s" % port_id) LOG.debug("port_delete(): portid=%s" % port_id)
neutronclient(request).delete_port(port_id) neutronclient(request).delete_port(port_id)
@profiler.trace
def port_update(request, port_id, **kwargs): def port_update(request, port_id, **kwargs):
LOG.debug("port_update(): portid=%s, kwargs=%s" % (port_id, kwargs)) LOG.debug("port_update(): portid=%s, kwargs=%s" % (port_id, kwargs))
kwargs = unescape_port_kwargs(**kwargs) kwargs = unescape_port_kwargs(**kwargs)
@ -890,6 +932,7 @@ def port_update(request, port_id, **kwargs):
return Port(port) return Port(port)
@profiler.trace
def profile_list(request, type_p, **params): def profile_list(request, type_p, **params):
LOG.debug("profile_list(): " LOG.debug("profile_list(): "
"profile_type=%(profile_type)s, params=%(params)s", "profile_type=%(profile_type)s, params=%(params)s",
@ -903,6 +946,7 @@ def profile_list(request, type_p, **params):
return [Profile(n) for n in profiles] return [Profile(n) for n in profiles]
@profiler.trace
def profile_get(request, profile_id, **params): def profile_get(request, profile_id, **params):
LOG.debug("profile_get(): " LOG.debug("profile_get(): "
"profileid=%(profileid)s, params=%(params)s", "profileid=%(profileid)s, params=%(params)s",
@ -912,6 +956,7 @@ def profile_get(request, profile_id, **params):
return Profile(profile) return Profile(profile)
@profiler.trace
def profile_create(request, **kwargs): def profile_create(request, **kwargs):
LOG.debug("profile_create(): kwargs=%s", kwargs) LOG.debug("profile_create(): kwargs=%s", kwargs)
body = {'network_profile': {}} body = {'network_profile': {}}
@ -921,11 +966,13 @@ def profile_create(request, **kwargs):
return Profile(profile) return Profile(profile)
@profiler.trace
def profile_delete(request, profile_id): def profile_delete(request, profile_id):
LOG.debug("profile_delete(): profile_id=%s", profile_id) LOG.debug("profile_delete(): profile_id=%s", profile_id)
neutronclient(request).delete_network_profile(profile_id) neutronclient(request).delete_network_profile(profile_id)
@profiler.trace
def profile_update(request, profile_id, **kwargs): def profile_update(request, profile_id, **kwargs):
LOG.debug("profile_update(): " LOG.debug("profile_update(): "
"profileid=%(profileid)s, kwargs=%(kwargs)s", "profileid=%(profileid)s, kwargs=%(kwargs)s",
@ -936,6 +983,7 @@ def profile_update(request, profile_id, **kwargs):
return Profile(profile) return Profile(profile)
@profiler.trace
def profile_bindings_list(request, type_p, **params): def profile_bindings_list(request, type_p, **params):
LOG.debug("profile_bindings_list(): " LOG.debug("profile_bindings_list(): "
"profile_type=%(profile_type)s params=%(params)s", "profile_type=%(profile_type)s params=%(params)s",
@ -949,6 +997,7 @@ def profile_bindings_list(request, type_p, **params):
return [Profile(n) for n in bindings] return [Profile(n) for n in bindings]
@profiler.trace
def router_create(request, **kwargs): def router_create(request, **kwargs):
LOG.debug("router_create():, kwargs=%s" % kwargs) LOG.debug("router_create():, kwargs=%s" % kwargs)
body = {'router': {}} body = {'router': {}}
@ -959,6 +1008,7 @@ def router_create(request, **kwargs):
return Router(router) return Router(router)
@profiler.trace
def router_update(request, r_id, **kwargs): def router_update(request, r_id, **kwargs):
LOG.debug("router_update(): router_id=%s, kwargs=%s" % (r_id, kwargs)) LOG.debug("router_update(): router_id=%s, kwargs=%s" % (r_id, kwargs))
body = {'router': {}} body = {'router': {}}
@ -967,17 +1017,20 @@ def router_update(request, r_id, **kwargs):
return Router(router['router']) return Router(router['router'])
@profiler.trace
def router_get(request, router_id, **params): def router_get(request, router_id, **params):
router = neutronclient(request).show_router(router_id, router = neutronclient(request).show_router(router_id,
**params).get('router') **params).get('router')
return Router(router) return Router(router)
@profiler.trace
def router_list(request, **params): def router_list(request, **params):
routers = neutronclient(request).list_routers(**params).get('routers') routers = neutronclient(request).list_routers(**params).get('routers')
return [Router(r) for r in routers] return [Router(r) for r in routers]
@profiler.trace
def router_list_on_l3_agent(request, l3_agent_id, **params): def router_list_on_l3_agent(request, l3_agent_id, **params):
routers = neutronclient(request).\ routers = neutronclient(request).\
list_routers_on_l3_agent(l3_agent_id, list_routers_on_l3_agent(l3_agent_id,
@ -985,10 +1038,12 @@ def router_list_on_l3_agent(request, l3_agent_id, **params):
return [Router(r) for r in routers] return [Router(r) for r in routers]
@profiler.trace
def router_delete(request, router_id): def router_delete(request, router_id):
neutronclient(request).delete_router(router_id) neutronclient(request).delete_router(router_id)
@profiler.trace
def router_add_interface(request, router_id, subnet_id=None, port_id=None): def router_add_interface(request, router_id, subnet_id=None, port_id=None):
body = {} body = {}
if subnet_id: if subnet_id:
@ -999,6 +1054,7 @@ def router_add_interface(request, router_id, subnet_id=None, port_id=None):
return client.add_interface_router(router_id, body) return client.add_interface_router(router_id, body)
@profiler.trace
def router_remove_interface(request, router_id, subnet_id=None, port_id=None): def router_remove_interface(request, router_id, subnet_id=None, port_id=None):
body = {} body = {}
if subnet_id: if subnet_id:
@ -1008,15 +1064,18 @@ def router_remove_interface(request, router_id, subnet_id=None, port_id=None):
neutronclient(request).remove_interface_router(router_id, body) neutronclient(request).remove_interface_router(router_id, body)
@profiler.trace
def router_add_gateway(request, router_id, network_id): def router_add_gateway(request, router_id, network_id):
body = {'network_id': network_id} body = {'network_id': network_id}
neutronclient(request).add_gateway_router(router_id, body) neutronclient(request).add_gateway_router(router_id, body)
@profiler.trace
def router_remove_gateway(request, router_id): def router_remove_gateway(request, router_id):
neutronclient(request).remove_gateway_router(router_id) neutronclient(request).remove_gateway_router(router_id)
@profiler.trace
def router_static_route_list(request, router_id=None): def router_static_route_list(request, router_id=None):
router = router_get(request, router_id) router = router_get(request, router_id)
try: try:
@ -1028,6 +1087,7 @@ def router_static_route_list(request, router_id=None):
return routes return routes
@profiler.trace
def router_static_route_remove(request, router_id, route_ids): def router_static_route_remove(request, router_id, route_ids):
currentroutes = router_static_route_list(request, router_id=router_id) currentroutes = router_static_route_list(request, router_id=router_id)
newroutes = [] newroutes = []
@ -1040,6 +1100,7 @@ def router_static_route_remove(request, router_id, route_ids):
return new return new
@profiler.trace
def router_static_route_add(request, router_id, newroute): def router_static_route_add(request, router_id, newroute):
body = {} body = {}
currentroutes = router_static_route_list(request, router_id=router_id) currentroutes = router_static_route_list(request, router_id=router_id)
@ -1050,53 +1111,66 @@ def router_static_route_add(request, router_id, newroute):
return new return new
@profiler.trace
def tenant_quota_get(request, tenant_id): def tenant_quota_get(request, tenant_id):
return base.QuotaSet(neutronclient(request).show_quota(tenant_id)['quota']) return base.QuotaSet(neutronclient(request).show_quota(tenant_id)['quota'])
@profiler.trace
def tenant_quota_update(request, tenant_id, **kwargs): def tenant_quota_update(request, tenant_id, **kwargs):
quotas = {'quota': kwargs} quotas = {'quota': kwargs}
return neutronclient(request).update_quota(tenant_id, quotas) return neutronclient(request).update_quota(tenant_id, quotas)
@profiler.trace
def agent_list(request, **params): def agent_list(request, **params):
agents = neutronclient(request).list_agents(**params) agents = neutronclient(request).list_agents(**params)
return [Agent(a) for a in agents['agents']] return [Agent(a) for a in agents['agents']]
@profiler.trace
def list_dhcp_agent_hosting_networks(request, network, **params): def list_dhcp_agent_hosting_networks(request, network, **params):
agents = neutronclient(request).list_dhcp_agent_hosting_networks(network, agents = neutronclient(request).list_dhcp_agent_hosting_networks(network,
**params) **params)
return [Agent(a) for a in agents['agents']] return [Agent(a) for a in agents['agents']]
@profiler.trace
def list_l3_agent_hosting_router(request, router, **params): def list_l3_agent_hosting_router(request, router, **params):
agents = neutronclient(request).list_l3_agent_hosting_routers(router, agents = neutronclient(request).list_l3_agent_hosting_routers(router,
**params) **params)
return [Agent(a) for a in agents['agents']] return [Agent(a) for a in agents['agents']]
@profiler.trace
def show_network_ip_availability(request, network_id): def show_network_ip_availability(request, network_id):
ip_availability = neutronclient(request).show_network_ip_availability( ip_availability = neutronclient(request).show_network_ip_availability(
network_id) network_id)
return ip_availability return ip_availability
@profiler.trace
def add_network_to_dhcp_agent(request, dhcp_agent, network_id): def add_network_to_dhcp_agent(request, dhcp_agent, network_id):
body = {'network_id': network_id} body = {'network_id': network_id}
return neutronclient(request).add_network_to_dhcp_agent(dhcp_agent, body) return neutronclient(request).add_network_to_dhcp_agent(dhcp_agent, body)
@profiler.trace
def remove_network_from_dhcp_agent(request, dhcp_agent, network_id): def remove_network_from_dhcp_agent(request, dhcp_agent, network_id):
return neutronclient(request).remove_network_from_dhcp_agent(dhcp_agent, return neutronclient(request).remove_network_from_dhcp_agent(dhcp_agent,
network_id) network_id)
@profiler.trace
def provider_list(request): def provider_list(request):
providers = neutronclient(request).list_service_providers() providers = neutronclient(request).list_service_providers()
return providers['service_providers'] return providers['service_providers']
# TODO(pkarikh) need to uncomment when osprofiler will have no
# issues with unicode in:
# openstack_dashboard/test/test_data/nova_data.py#L470 data
# @profiler.trace
def servers_update_addresses(request, servers, all_tenants=False): def servers_update_addresses(request, servers, all_tenants=False):
"""Retrieve servers networking information from Neutron if enabled. """Retrieve servers networking information from Neutron if enabled.
@ -1186,6 +1260,7 @@ def _server_get_addresses(request, server, ports, floating_ips, network_names):
return dict(addresses) return dict(addresses)
@profiler.trace
@memoized @memoized
def list_extensions(request): def list_extensions(request):
extensions_list = neutronclient(request).list_extensions() extensions_list = neutronclient(request).list_extensions()
@ -1195,6 +1270,7 @@ def list_extensions(request):
return () return ()
@profiler.trace
@memoized @memoized
def is_extension_supported(request, extension_alias): def is_extension_supported(request, extension_alias):
extensions = list_extensions(request) extensions = list_extensions(request)

View File

@ -42,7 +42,7 @@ from horizon.utils.memoized import memoized_with_request # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.api import network_base from openstack_dashboard.api import network_base
from openstack_dashboard.contrib.developer.profiler import api as profiler
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -398,32 +398,39 @@ class FloatingIpManager(network_base.FloatingIpManager):
return [FloatingIpPool(pool) return [FloatingIpPool(pool)
for pool in self.client.floating_ip_pools.list()] for pool in self.client.floating_ip_pools.list()]
@profiler.trace
def list(self, all_tenants=False): def list(self, all_tenants=False):
return [FloatingIp(fip) for fip in return [FloatingIp(fip) for fip in
self.client.floating_ips.list( self.client.floating_ips.list(
all_tenants=all_tenants)] all_tenants=all_tenants)]
@profiler.trace
def get(self, floating_ip_id): def get(self, floating_ip_id):
return FloatingIp(self.client.floating_ips.get(floating_ip_id)) return FloatingIp(self.client.floating_ips.get(floating_ip_id))
@profiler.trace
def allocate(self, pool, tenant_id=None, **params): def allocate(self, pool, tenant_id=None, **params):
# NOTE: tenant_id will never be used here. # NOTE: tenant_id will never be used here.
return FloatingIp(self.client.floating_ips.create(pool=pool)) return FloatingIp(self.client.floating_ips.create(pool=pool))
@profiler.trace
def release(self, floating_ip_id): def release(self, floating_ip_id):
self.client.floating_ips.delete(floating_ip_id) self.client.floating_ips.delete(floating_ip_id)
@profiler.trace
def associate(self, floating_ip_id, port_id): def associate(self, floating_ip_id, port_id):
# In Nova implied port_id is instance_id # In Nova implied port_id is instance_id
server = self.client.servers.get(port_id) server = self.client.servers.get(port_id)
fip = self.client.floating_ips.get(floating_ip_id) fip = self.client.floating_ips.get(floating_ip_id)
self.client.servers.add_floating_ip(server.id, fip.ip) self.client.servers.add_floating_ip(server.id, fip.ip)
@profiler.trace
def disassociate(self, floating_ip_id): def disassociate(self, floating_ip_id):
fip = self.client.floating_ips.get(floating_ip_id) fip = self.client.floating_ips.get(floating_ip_id)
server = self.client.servers.get(fip.instance_id) server = self.client.servers.get(fip.instance_id)
self.client.servers.remove_floating_ip(server.id, fip.ip) self.client.servers.remove_floating_ip(server.id, fip.ip)
@profiler.trace
def list_targets(self): def list_targets(self):
return [FloatingIpTarget(s) for s in self.client.servers.list()] return [FloatingIpTarget(s) for s in self.client.servers.list()]
@ -469,26 +476,31 @@ def novaclient(request_auth_params):
return c return c
@profiler.trace
def server_vnc_console(request, instance_id, console_type='novnc'): def server_vnc_console(request, instance_id, console_type='novnc'):
return VNCConsole(novaclient(request).servers.get_vnc_console( return VNCConsole(novaclient(request).servers.get_vnc_console(
instance_id, console_type)['console']) instance_id, console_type)['console'])
@profiler.trace
def server_spice_console(request, instance_id, console_type='spice-html5'): def server_spice_console(request, instance_id, console_type='spice-html5'):
return SPICEConsole(novaclient(request).servers.get_spice_console( return SPICEConsole(novaclient(request).servers.get_spice_console(
instance_id, console_type)['console']) instance_id, console_type)['console'])
@profiler.trace
def server_rdp_console(request, instance_id, console_type='rdp-html5'): def server_rdp_console(request, instance_id, console_type='rdp-html5'):
return RDPConsole(novaclient(request).servers.get_rdp_console( return RDPConsole(novaclient(request).servers.get_rdp_console(
instance_id, console_type)['console']) instance_id, console_type)['console'])
@profiler.trace
def server_serial_console(request, instance_id, console_type='serial'): def server_serial_console(request, instance_id, console_type='serial'):
return SerialConsole(novaclient(request).servers.get_serial_console( return SerialConsole(novaclient(request).servers.get_serial_console(
instance_id, console_type)['console']) instance_id, console_type)['console'])
@profiler.trace
def flavor_create(request, name, memory, vcpu, disk, flavorid='auto', def flavor_create(request, name, memory, vcpu, disk, flavorid='auto',
ephemeral=0, swap=0, metadata=None, is_public=True, ephemeral=0, swap=0, metadata=None, is_public=True,
rxtx_factor=1): rxtx_factor=1):
@ -502,10 +514,12 @@ def flavor_create(request, name, memory, vcpu, disk, flavorid='auto',
return flavor return flavor
@profiler.trace
def flavor_delete(request, flavor_id): def flavor_delete(request, flavor_id):
novaclient(request).flavors.delete(flavor_id) novaclient(request).flavors.delete(flavor_id)
@profiler.trace
def flavor_get(request, flavor_id, get_extras=False): def flavor_get(request, flavor_id, get_extras=False):
flavor = novaclient(request).flavors.get(flavor_id) flavor = novaclient(request).flavors.get(flavor_id)
if get_extras: if get_extras:
@ -513,6 +527,7 @@ def flavor_get(request, flavor_id, get_extras=False):
return flavor return flavor
@profiler.trace
@memoized @memoized
def flavor_list(request, is_public=True, get_extras=False): def flavor_list(request, is_public=True, get_extras=False):
"""Get the list of available instance sizes (flavors).""" """Get the list of available instance sizes (flavors)."""
@ -523,6 +538,7 @@ def flavor_list(request, is_public=True, get_extras=False):
return flavors return flavors
@profiler.trace
def update_pagination(entities, page_size, marker, sort_dir, sort_key, def update_pagination(entities, page_size, marker, sort_dir, sort_key,
reversed_order): reversed_order):
has_more_data = has_prev_data = False has_more_data = has_prev_data = False
@ -547,6 +563,7 @@ def update_pagination(entities, page_size, marker, sort_dir, sort_key,
return entities, has_more_data, has_prev_data return entities, has_more_data, has_prev_data
@profiler.trace
@memoized @memoized
def flavor_list_paged(request, is_public=True, get_extras=False, marker=None, def flavor_list_paged(request, is_public=True, get_extras=False, marker=None,
paginate=False, sort_key="name", sort_dir="desc", paginate=False, sort_key="name", sort_dir="desc",
@ -576,24 +593,28 @@ def flavor_list_paged(request, is_public=True, get_extras=False, marker=None,
return (flavors, has_more_data, has_prev_data) return (flavors, has_more_data, has_prev_data)
@profiler.trace
@memoized_with_request(novaclient) @memoized_with_request(novaclient)
def flavor_access_list(nova_api, flavor=None): def flavor_access_list(nova_api, flavor=None):
"""Get the list of access instance sizes (flavors).""" """Get the list of access instance sizes (flavors)."""
return nova_api.flavor_access.list(flavor=flavor) return nova_api.flavor_access.list(flavor=flavor)
@profiler.trace
def add_tenant_to_flavor(request, flavor, tenant): def add_tenant_to_flavor(request, flavor, tenant):
"""Add a tenant to the given flavor access list.""" """Add a tenant to the given flavor access list."""
return novaclient(request).flavor_access.add_tenant_access( return novaclient(request).flavor_access.add_tenant_access(
flavor=flavor, tenant=tenant) flavor=flavor, tenant=tenant)
@profiler.trace
def remove_tenant_from_flavor(request, flavor, tenant): def remove_tenant_from_flavor(request, flavor, tenant):
"""Remove a tenant from the given flavor access list.""" """Remove a tenant from the given flavor access list."""
return novaclient(request).flavor_access.remove_tenant_access( return novaclient(request).flavor_access.remove_tenant_access(
flavor=flavor, tenant=tenant) flavor=flavor, tenant=tenant)
@profiler.trace
def flavor_get_extras(request, flavor_id, raw=False, flavor=None): def flavor_get_extras(request, flavor_id, raw=False, flavor=None):
"""Get flavor extra specs.""" """Get flavor extra specs."""
if flavor is None: if flavor is None:
@ -605,12 +626,14 @@ def flavor_get_extras(request, flavor_id, raw=False, flavor=None):
key, value in extras.items()] key, value in extras.items()]
@profiler.trace
def flavor_extra_delete(request, flavor_id, keys): def flavor_extra_delete(request, flavor_id, keys):
"""Unset the flavor extra spec keys.""" """Unset the flavor extra spec keys."""
flavor = novaclient(request).flavors.get(flavor_id) flavor = novaclient(request).flavors.get(flavor_id)
return flavor.unset_keys(keys) return flavor.unset_keys(keys)
@profiler.trace
def flavor_extra_set(request, flavor_id, metadata): def flavor_extra_set(request, flavor_id, metadata):
"""Set the flavor extra spec keys.""" """Set the flavor extra spec keys."""
flavor = novaclient(request).flavors.get(flavor_id) flavor = novaclient(request).flavors.get(flavor_id)
@ -619,30 +642,37 @@ def flavor_extra_set(request, flavor_id, metadata):
return flavor.set_keys(metadata) return flavor.set_keys(metadata)
@profiler.trace
def snapshot_create(request, instance_id, name): def snapshot_create(request, instance_id, name):
return novaclient(request).servers.create_image(instance_id, name) return novaclient(request).servers.create_image(instance_id, name)
@profiler.trace
def keypair_create(request, name): def keypair_create(request, name):
return novaclient(request).keypairs.create(name) return novaclient(request).keypairs.create(name)
@profiler.trace
def keypair_import(request, name, public_key): def keypair_import(request, name, public_key):
return novaclient(request).keypairs.create(name, public_key) return novaclient(request).keypairs.create(name, public_key)
@profiler.trace
def keypair_delete(request, keypair_id): def keypair_delete(request, keypair_id):
novaclient(request).keypairs.delete(keypair_id) novaclient(request).keypairs.delete(keypair_id)
@profiler.trace
def keypair_list(request): def keypair_list(request):
return novaclient(request).keypairs.list() return novaclient(request).keypairs.list()
@profiler.trace
def keypair_get(request, keypair_id): def keypair_get(request, keypair_id):
return novaclient(request).keypairs.get(keypair_id) return novaclient(request).keypairs.get(keypair_id)
@profiler.trace
def server_create(request, name, image, flavor, key_name, user_data, def server_create(request, name, image, flavor, key_name, user_data,
security_groups, block_device_mapping=None, security_groups, block_device_mapping=None,
block_device_mapping_v2=None, nics=None, block_device_mapping_v2=None, nics=None,
@ -660,14 +690,17 @@ def server_create(request, name, image, flavor, key_name, user_data,
meta=meta, scheduler_hints=scheduler_hints), request) meta=meta, scheduler_hints=scheduler_hints), request)
@profiler.trace
def server_delete(request, instance_id): def server_delete(request, instance_id):
novaclient(request).servers.delete(instance_id) novaclient(request).servers.delete(instance_id)
@profiler.trace
def server_get(request, instance_id): def server_get(request, instance_id):
return Server(novaclient(request).servers.get(instance_id), request) return Server(novaclient(request).servers.get(instance_id), request)
@profiler.trace
def server_list(request, search_opts=None, all_tenants=False): def server_list(request, search_opts=None, all_tenants=False):
page_size = utils.get_page_size(request) page_size = utils.get_page_size(request)
c = novaclient(request) c = novaclient(request)
@ -696,36 +729,44 @@ def server_list(request, search_opts=None, all_tenants=False):
return (servers, has_more_data) return (servers, has_more_data)
@profiler.trace
def server_console_output(request, instance_id, tail_length=None): def server_console_output(request, instance_id, tail_length=None):
"""Gets console output of an instance.""" """Gets console output of an instance."""
return novaclient(request).servers.get_console_output(instance_id, return novaclient(request).servers.get_console_output(instance_id,
length=tail_length) length=tail_length)
@profiler.trace
def server_pause(request, instance_id): def server_pause(request, instance_id):
novaclient(request).servers.pause(instance_id) novaclient(request).servers.pause(instance_id)
@profiler.trace
def server_unpause(request, instance_id): def server_unpause(request, instance_id):
novaclient(request).servers.unpause(instance_id) novaclient(request).servers.unpause(instance_id)
@profiler.trace
def server_suspend(request, instance_id): def server_suspend(request, instance_id):
novaclient(request).servers.suspend(instance_id) novaclient(request).servers.suspend(instance_id)
@profiler.trace
def server_resume(request, instance_id): def server_resume(request, instance_id):
novaclient(request).servers.resume(instance_id) novaclient(request).servers.resume(instance_id)
@profiler.trace
def server_shelve(request, instance_id): def server_shelve(request, instance_id):
novaclient(request).servers.shelve(instance_id) novaclient(request).servers.shelve(instance_id)
@profiler.trace
def server_unshelve(request, instance_id): def server_unshelve(request, instance_id):
novaclient(request).servers.unshelve(instance_id) novaclient(request).servers.unshelve(instance_id)
@profiler.trace
def server_reboot(request, instance_id, soft_reboot=False): def server_reboot(request, instance_id, soft_reboot=False):
hardness = nova_servers.REBOOT_HARD hardness = nova_servers.REBOOT_HARD
if soft_reboot: if soft_reboot:
@ -733,20 +774,24 @@ def server_reboot(request, instance_id, soft_reboot=False):
novaclient(request).servers.reboot(instance_id, hardness) novaclient(request).servers.reboot(instance_id, hardness)
@profiler.trace
def server_rebuild(request, instance_id, image_id, password=None, def server_rebuild(request, instance_id, image_id, password=None,
disk_config=None): disk_config=None):
return novaclient(request).servers.rebuild(instance_id, image_id, return novaclient(request).servers.rebuild(instance_id, image_id,
password, disk_config) password, disk_config)
@profiler.trace
def server_update(request, instance_id, name): def server_update(request, instance_id, name):
return novaclient(request).servers.update(instance_id, name=name.strip()) return novaclient(request).servers.update(instance_id, name=name.strip())
@profiler.trace
def server_migrate(request, instance_id): def server_migrate(request, instance_id):
novaclient(request).servers.migrate(instance_id) novaclient(request).servers.migrate(instance_id)
@profiler.trace
def server_live_migrate(request, instance_id, host, block_migration=False, def server_live_migrate(request, instance_id, host, block_migration=False,
disk_over_commit=False): disk_over_commit=False):
novaclient(request).servers.live_migrate(instance_id, host, novaclient(request).servers.live_migrate(instance_id, host,
@ -754,96 +799,118 @@ def server_live_migrate(request, instance_id, host, block_migration=False,
disk_over_commit) disk_over_commit)
@profiler.trace
def server_resize(request, instance_id, flavor, disk_config=None, **kwargs): def server_resize(request, instance_id, flavor, disk_config=None, **kwargs):
novaclient(request).servers.resize(instance_id, flavor, novaclient(request).servers.resize(instance_id, flavor,
disk_config, **kwargs) disk_config, **kwargs)
@profiler.trace
def server_confirm_resize(request, instance_id): def server_confirm_resize(request, instance_id):
novaclient(request).servers.confirm_resize(instance_id) novaclient(request).servers.confirm_resize(instance_id)
@profiler.trace
def server_revert_resize(request, instance_id): def server_revert_resize(request, instance_id):
novaclient(request).servers.revert_resize(instance_id) novaclient(request).servers.revert_resize(instance_id)
@profiler.trace
def server_start(request, instance_id): def server_start(request, instance_id):
novaclient(request).servers.start(instance_id) novaclient(request).servers.start(instance_id)
@profiler.trace
def server_stop(request, instance_id): def server_stop(request, instance_id):
novaclient(request).servers.stop(instance_id) novaclient(request).servers.stop(instance_id)
@profiler.trace
def server_lock(request, instance_id): def server_lock(request, instance_id):
novaclient(request).servers.lock(instance_id) novaclient(request).servers.lock(instance_id)
@profiler.trace
def server_unlock(request, instance_id): def server_unlock(request, instance_id):
novaclient(request).servers.unlock(instance_id) novaclient(request).servers.unlock(instance_id)
@profiler.trace
def server_metadata_update(request, instance_id, metadata): def server_metadata_update(request, instance_id, metadata):
novaclient(request).servers.set_meta(instance_id, metadata) novaclient(request).servers.set_meta(instance_id, metadata)
@profiler.trace
def server_metadata_delete(request, instance_id, keys): def server_metadata_delete(request, instance_id, keys):
novaclient(request).servers.delete_meta(instance_id, keys) novaclient(request).servers.delete_meta(instance_id, keys)
@profiler.trace
def tenant_quota_get(request, tenant_id): def tenant_quota_get(request, tenant_id):
return base.QuotaSet(novaclient(request).quotas.get(tenant_id)) return base.QuotaSet(novaclient(request).quotas.get(tenant_id))
@profiler.trace
def tenant_quota_update(request, tenant_id, **kwargs): def tenant_quota_update(request, tenant_id, **kwargs):
if kwargs: if kwargs:
novaclient(request).quotas.update(tenant_id, **kwargs) novaclient(request).quotas.update(tenant_id, **kwargs)
@profiler.trace
def default_quota_get(request, tenant_id): def default_quota_get(request, tenant_id):
return base.QuotaSet(novaclient(request).quotas.defaults(tenant_id)) return base.QuotaSet(novaclient(request).quotas.defaults(tenant_id))
@profiler.trace
def default_quota_update(request, **kwargs): def default_quota_update(request, **kwargs):
novaclient(request).quota_classes.update(DEFAULT_QUOTA_NAME, **kwargs) novaclient(request).quota_classes.update(DEFAULT_QUOTA_NAME, **kwargs)
@profiler.trace
def usage_get(request, tenant_id, start, end): def usage_get(request, tenant_id, start, end):
return NovaUsage(novaclient(request).usage.get(tenant_id, start, end)) return NovaUsage(novaclient(request).usage.get(tenant_id, start, end))
@profiler.trace
def usage_list(request, start, end): def usage_list(request, start, end):
return [NovaUsage(u) for u in return [NovaUsage(u) for u in
novaclient(request).usage.list(start, end, True)] novaclient(request).usage.list(start, end, True)]
@profiler.trace
def virtual_interfaces_list(request, instance_id): def virtual_interfaces_list(request, instance_id):
return novaclient(request).virtual_interfaces.list(instance_id) return novaclient(request).virtual_interfaces.list(instance_id)
@profiler.trace
def get_x509_credentials(request): def get_x509_credentials(request):
return novaclient(request).certs.create() return novaclient(request).certs.create()
@profiler.trace
def get_x509_root_certificate(request): def get_x509_root_certificate(request):
return novaclient(request).certs.get() return novaclient(request).certs.get()
@profiler.trace
def get_password(request, instance_id, private_key=None): def get_password(request, instance_id, private_key=None):
return novaclient(request).servers.get_password(instance_id, private_key) return novaclient(request).servers.get_password(instance_id, private_key)
@profiler.trace
def instance_volume_attach(request, volume_id, instance_id, device): def instance_volume_attach(request, volume_id, instance_id, device):
return novaclient(request).volumes.create_server_volume(instance_id, return novaclient(request).volumes.create_server_volume(instance_id,
volume_id, volume_id,
device) device)
@profiler.trace
def instance_volume_detach(request, instance_id, att_id): def instance_volume_detach(request, instance_id, att_id):
return novaclient(request).volumes.delete_server_volume(instance_id, return novaclient(request).volumes.delete_server_volume(instance_id,
att_id) att_id)
@profiler.trace
def instance_volumes_list(request, instance_id): def instance_volumes_list(request, instance_id):
from openstack_dashboard.api import cinder from openstack_dashboard.api import cinder
@ -856,18 +923,22 @@ def instance_volumes_list(request, instance_id):
return volumes return volumes
@profiler.trace
def hypervisor_list(request): def hypervisor_list(request):
return novaclient(request).hypervisors.list() return novaclient(request).hypervisors.list()
@profiler.trace
def hypervisor_stats(request): def hypervisor_stats(request):
return novaclient(request).hypervisors.statistics() return novaclient(request).hypervisors.statistics()
@profiler.trace
def hypervisor_search(request, query, servers=True): def hypervisor_search(request, query, servers=True):
return novaclient(request).hypervisors.search(query, servers) return novaclient(request).hypervisors.search(query, servers)
@profiler.trace
def evacuate_host(request, host, target=None, on_shared_storage=False): def evacuate_host(request, host, target=None, on_shared_storage=False):
# TODO(jmolle) This should be change for nova atomic api host_evacuate # TODO(jmolle) This should be change for nova atomic api host_evacuate
hypervisors = novaclient(request).hypervisors.search(host, True) hypervisors = novaclient(request).hypervisors.search(host, True)
@ -894,6 +965,7 @@ def evacuate_host(request, host, target=None, on_shared_storage=False):
return True return True
@profiler.trace
def migrate_host(request, host, live_migrate=False, disk_over_commit=False, def migrate_host(request, host, live_migrate=False, disk_over_commit=False,
block_migration=False): block_migration=False):
hypervisors = novaclient(request).hypervisors.search(host, True) hypervisors = novaclient(request).hypervisors.search(host, True)
@ -930,6 +1002,7 @@ def migrate_host(request, host, live_migrate=False, disk_over_commit=False,
return True return True
@profiler.trace
def tenant_absolute_limits(request, reserved=False): def tenant_absolute_limits(request, reserved=False):
limits = novaclient(request).limits.get(reserved=reserved).absolute limits = novaclient(request).limits.get(reserved=reserved).absolute
limits_dict = {} limits_dict = {}
@ -948,22 +1021,27 @@ def tenant_absolute_limits(request, reserved=False):
return limits_dict return limits_dict
@profiler.trace
def availability_zone_list(request, detailed=False): def availability_zone_list(request, detailed=False):
return novaclient(request).availability_zones.list(detailed=detailed) return novaclient(request).availability_zones.list(detailed=detailed)
@profiler.trace
def server_group_list(request): def server_group_list(request):
return novaclient(request).server_groups.list() return novaclient(request).server_groups.list()
@profiler.trace
def service_list(request, binary=None): def service_list(request, binary=None):
return novaclient(request).services.list(binary=binary) return novaclient(request).services.list(binary=binary)
@profiler.trace
def service_enable(request, host, binary): def service_enable(request, host, binary):
return novaclient(request).services.enable(host, binary) return novaclient(request).services.enable(host, binary)
@profiler.trace
def service_disable(request, host, binary, reason=None): def service_disable(request, host, binary, reason=None):
if reason: if reason:
return novaclient(request).services.disable_log_reason(host, return novaclient(request).services.disable_log_reason(host,
@ -972,6 +1050,7 @@ def service_disable(request, host, binary, reason=None):
return novaclient(request).services.disable(host, binary) return novaclient(request).services.disable(host, binary)
@profiler.trace
def aggregate_details_list(request): def aggregate_details_list(request):
result = [] result = []
c = novaclient(request) c = novaclient(request)
@ -980,38 +1059,47 @@ def aggregate_details_list(request):
return result return result
@profiler.trace
def aggregate_create(request, name, availability_zone=None): def aggregate_create(request, name, availability_zone=None):
return novaclient(request).aggregates.create(name, availability_zone) return novaclient(request).aggregates.create(name, availability_zone)
@profiler.trace
def aggregate_delete(request, aggregate_id): def aggregate_delete(request, aggregate_id):
return novaclient(request).aggregates.delete(aggregate_id) return novaclient(request).aggregates.delete(aggregate_id)
@profiler.trace
def aggregate_get(request, aggregate_id): def aggregate_get(request, aggregate_id):
return novaclient(request).aggregates.get(aggregate_id) return novaclient(request).aggregates.get(aggregate_id)
@profiler.trace
def aggregate_update(request, aggregate_id, values): def aggregate_update(request, aggregate_id, values):
return novaclient(request).aggregates.update(aggregate_id, values) return novaclient(request).aggregates.update(aggregate_id, values)
@profiler.trace
def aggregate_set_metadata(request, aggregate_id, metadata): def aggregate_set_metadata(request, aggregate_id, metadata):
return novaclient(request).aggregates.set_metadata(aggregate_id, metadata) return novaclient(request).aggregates.set_metadata(aggregate_id, metadata)
@profiler.trace
def host_list(request): def host_list(request):
return novaclient(request).hosts.list() return novaclient(request).hosts.list()
@profiler.trace
def add_host_to_aggregate(request, aggregate_id, host): def add_host_to_aggregate(request, aggregate_id, host):
return novaclient(request).aggregates.add_host(aggregate_id, host) return novaclient(request).aggregates.add_host(aggregate_id, host)
@profiler.trace
def remove_host_from_aggregate(request, aggregate_id, host): def remove_host_from_aggregate(request, aggregate_id, host):
return novaclient(request).aggregates.remove_host(aggregate_id, host) return novaclient(request).aggregates.remove_host(aggregate_id, host)
@profiler.trace
def interface_attach(request, def interface_attach(request,
server, port_id=None, net_id=None, fixed_ip=None): server, port_id=None, net_id=None, fixed_ip=None):
return novaclient(request).servers.interface_attach(server, return novaclient(request).servers.interface_attach(server,
@ -1020,10 +1108,12 @@ def interface_attach(request,
fixed_ip) fixed_ip)
@profiler.trace
def interface_detach(request, server, port_id): def interface_detach(request, server, port_id):
return novaclient(request).servers.interface_detach(server, port_id) return novaclient(request).servers.interface_detach(server, port_id)
@profiler.trace
@memoized_with_request(novaclient) @memoized_with_request(novaclient)
def list_extensions(nova_api): def list_extensions(nova_api):
"""List all nova extensions, except the ones in the blacklist.""" """List all nova extensions, except the ones in the blacklist."""
@ -1036,6 +1126,7 @@ def list_extensions(nova_api):
) )
@profiler.trace
@memoized_with_request(list_extensions, 1) @memoized_with_request(list_extensions, 1)
def extension_supported(extension_name, extensions): def extension_supported(extension_name, extensions):
"""Determine if nova supports a given extension name. """Determine if nova supports a given extension name.
@ -1049,16 +1140,19 @@ def extension_supported(extension_name, extensions):
return False return False
@profiler.trace
def can_set_server_password(): def can_set_server_password():
features = getattr(settings, 'OPENSTACK_HYPERVISOR_FEATURES', {}) features = getattr(settings, 'OPENSTACK_HYPERVISOR_FEATURES', {})
return features.get('can_set_password', False) return features.get('can_set_password', False)
@profiler.trace
def instance_action_list(request, instance_id): def instance_action_list(request, instance_id):
return nova_instance_action.InstanceActionManager( return nova_instance_action.InstanceActionManager(
novaclient(request)).list(instance_id) novaclient(request)).list(instance_id)
@profiler.trace
def can_set_mount_point(): def can_set_mount_point():
"""Return the Hypervisor's capability of setting mount points.""" """Return the Hypervisor's capability of setting mount points."""
hypervisor_features = getattr( hypervisor_features = getattr(
@ -1066,6 +1160,7 @@ def can_set_mount_point():
return hypervisor_features.get("can_set_mount_point", False) return hypervisor_features.get("can_set_mount_point", False)
@profiler.trace
def requires_keypair(): def requires_keypair():
features = getattr(settings, 'OPENSTACK_HYPERVISOR_FEATURES', {}) features = getattr(settings, 'OPENSTACK_HYPERVISOR_FEATURES', {})
return features.get('requires_keypair', False) return features.get('requires_keypair', False)

View File

@ -26,7 +26,7 @@ from django.utils.translation import ugettext_lazy as _
from horizon import exceptions from horizon import exceptions
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.contrib.developer.profiler import api as profiler
FOLDER_DELIMITER = "/" FOLDER_DELIMITER = "/"
CHUNK_SIZE = getattr(settings, 'SWIFT_FILE_TRANSFER_CHUNK_SIZE', 512 * 1024) CHUNK_SIZE = getattr(settings, 'SWIFT_FILE_TRANSFER_CHUNK_SIZE', 512 * 1024)
@ -116,6 +116,7 @@ def swift_api(request):
auth_version="2.0") auth_version="2.0")
@profiler.trace
def swift_container_exists(request, container_name): def swift_container_exists(request, container_name):
try: try:
swift_api(request).head_container(container_name) swift_api(request).head_container(container_name)
@ -124,6 +125,7 @@ def swift_container_exists(request, container_name):
return False return False
@profiler.trace
def swift_object_exists(request, container_name, object_name): def swift_object_exists(request, container_name, object_name):
try: try:
swift_api(request).head_object(container_name, object_name) swift_api(request).head_object(container_name, object_name)
@ -132,6 +134,7 @@ def swift_object_exists(request, container_name, object_name):
return False return False
@profiler.trace
def swift_get_containers(request, marker=None): def swift_get_containers(request, marker=None):
limit = getattr(settings, 'API_RESULT_LIMIT', 1000) limit = getattr(settings, 'API_RESULT_LIMIT', 1000)
headers, containers = swift_api(request).get_account(limit=limit + 1, headers, containers = swift_api(request).get_account(limit=limit + 1,
@ -144,6 +147,7 @@ def swift_get_containers(request, marker=None):
return (container_objs, False) return (container_objs, False)
@profiler.trace
def swift_get_container(request, container_name, with_data=True): def swift_get_container(request, container_name, with_data=True):
if with_data: if with_data:
headers, data = swift_api(request).get_object(container_name, "") headers, data = swift_api(request).get_object(container_name, "")
@ -177,6 +181,7 @@ def swift_get_container(request, container_name, with_data=True):
return Container(container_info) return Container(container_info)
@profiler.trace
def swift_create_container(request, name, metadata=({})): def swift_create_container(request, name, metadata=({})):
if swift_container_exists(request, name): if swift_container_exists(request, name):
raise exceptions.AlreadyExists(name, 'container') raise exceptions.AlreadyExists(name, 'container')
@ -185,12 +190,14 @@ def swift_create_container(request, name, metadata=({})):
return Container({'name': name}) return Container({'name': name})
@profiler.trace
def swift_update_container(request, name, metadata=({})): def swift_update_container(request, name, metadata=({})):
headers = _metadata_to_header(metadata) headers = _metadata_to_header(metadata)
swift_api(request).post_container(name, headers=headers) swift_api(request).post_container(name, headers=headers)
return Container({'name': name}) return Container({'name': name})
@profiler.trace
def swift_delete_container(request, name): def swift_delete_container(request, name):
# It cannot be deleted if it's not empty. The batch remove of objects # It cannot be deleted if it's not empty. The batch remove of objects
# be done in swiftclient instead of Horizon. # be done in swiftclient instead of Horizon.
@ -204,6 +211,7 @@ def swift_delete_container(request, name):
return True return True
@profiler.trace
def swift_get_objects(request, container_name, prefix=None, marker=None, def swift_get_objects(request, container_name, prefix=None, marker=None,
limit=None): limit=None):
limit = limit or getattr(settings, 'API_RESULT_LIMIT', 1000) limit = limit or getattr(settings, 'API_RESULT_LIMIT', 1000)
@ -222,6 +230,7 @@ def swift_get_objects(request, container_name, prefix=None, marker=None,
return (object_objs, False) return (object_objs, False)
@profiler.trace
def swift_filter_objects(request, filter_string, container_name, prefix=None, def swift_filter_objects(request, filter_string, container_name, prefix=None,
marker=None): marker=None):
# FIXME(kewu): Swift currently has no real filtering API, thus the marker # FIXME(kewu): Swift currently has no real filtering API, thus the marker
@ -257,6 +266,7 @@ def wildcard_search(string, q):
return wildcard_search(tail, '*'.join(q_list[1:])) return wildcard_search(tail, '*'.join(q_list[1:]))
@profiler.trace
def swift_copy_object(request, orig_container_name, orig_object_name, def swift_copy_object(request, orig_container_name, orig_object_name,
new_container_name, new_object_name): new_container_name, new_object_name):
if swift_object_exists(request, new_container_name, new_object_name): if swift_object_exists(request, new_container_name, new_object_name):
@ -270,6 +280,7 @@ def swift_copy_object(request, orig_container_name, orig_object_name,
headers=headers) headers=headers)
@profiler.trace
def swift_upload_object(request, container_name, object_name, def swift_upload_object(request, container_name, object_name,
object_file=None): object_file=None):
headers = {} headers = {}
@ -288,6 +299,7 @@ def swift_upload_object(request, container_name, object_name,
return StorageObject(obj_info, container_name) return StorageObject(obj_info, container_name)
@profiler.trace
def swift_create_pseudo_folder(request, container_name, pseudo_folder_name): def swift_create_pseudo_folder(request, container_name, pseudo_folder_name):
# Make sure the folder name doesn't already exist. # Make sure the folder name doesn't already exist.
if swift_object_exists(request, container_name, pseudo_folder_name): if swift_object_exists(request, container_name, pseudo_folder_name):
@ -306,11 +318,13 @@ def swift_create_pseudo_folder(request, container_name, pseudo_folder_name):
return PseudoFolder(obj_info, container_name) return PseudoFolder(obj_info, container_name)
@profiler.trace
def swift_delete_object(request, container_name, object_name): def swift_delete_object(request, container_name, object_name):
swift_api(request).delete_object(container_name, object_name) swift_api(request).delete_object(container_name, object_name)
return True return True
@profiler.trace
def swift_delete_folder(request, container_name, object_name): def swift_delete_folder(request, container_name, object_name):
objects, more = swift_get_objects(request, container_name, objects, more = swift_get_objects(request, container_name,
prefix=object_name) prefix=object_name)
@ -330,6 +344,7 @@ def swift_delete_folder(request, container_name, object_name):
return True return True
@profiler.trace
def swift_get_object(request, container_name, object_name, with_data=True, def swift_get_object(request, container_name, object_name, with_data=True,
resp_chunk_size=CHUNK_SIZE): resp_chunk_size=CHUNK_SIZE):
if with_data: if with_data:
@ -359,6 +374,7 @@ def swift_get_object(request, container_name, object_name, with_data=True,
data=data) data=data)
@profiler.trace
def swift_get_capabilities(request): def swift_get_capabilities(request):
try: try:
return swift_api(request).get_capabilities() return swift_api(request).get_capabilities()

View File

@ -19,6 +19,7 @@ from collections import OrderedDict
from horizon.utils.memoized import memoized # noqa from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import neutron from openstack_dashboard.api import neutron
from openstack_dashboard.contrib.developer.profiler import api as profiler
neutronclient = neutron.neutronclient neutronclient = neutron.neutronclient
@ -55,6 +56,7 @@ class VPNService(neutron.NeutronAPIDictWrapper):
super(VPNService, self).__init__(apiresource) super(VPNService, self).__init__(apiresource)
@profiler.trace
def vpnservice_create(request, **kwargs): def vpnservice_create(request, **kwargs):
"""Create VPNService """Create VPNService
@ -77,6 +79,7 @@ def vpnservice_create(request, **kwargs):
return VPNService(vpnservice) return VPNService(vpnservice)
@profiler.trace
def vpnservice_list(request, **kwargs): def vpnservice_list(request, **kwargs):
return _vpnservice_list(request, expand_subnet=True, expand_router=True, return _vpnservice_list(request, expand_subnet=True, expand_router=True,
expand_conns=True, **kwargs) expand_conns=True, **kwargs)
@ -104,6 +107,7 @@ def _vpnservice_list(request, expand_subnet=False, expand_router=False,
return [VPNService(v) for v in vpnservices] return [VPNService(v) for v in vpnservices]
@profiler.trace
def vpnservice_get(request, vpnservice_id): def vpnservice_get(request, vpnservice_id):
return _vpnservice_get(request, vpnservice_id, expand_subnet=True, return _vpnservice_get(request, vpnservice_id, expand_subnet=True,
expand_router=True, expand_conns=True) expand_router=True, expand_conns=True)
@ -126,16 +130,19 @@ def _vpnservice_get(request, vpnservice_id, expand_subnet=False,
return VPNService(vpnservice) return VPNService(vpnservice)
@profiler.trace
def vpnservice_update(request, vpnservice_id, **kwargs): def vpnservice_update(request, vpnservice_id, **kwargs):
vpnservice = neutronclient(request).update_vpnservice( vpnservice = neutronclient(request).update_vpnservice(
vpnservice_id, kwargs).get('vpnservice') vpnservice_id, kwargs).get('vpnservice')
return VPNService(vpnservice) return VPNService(vpnservice)
@profiler.trace
def vpnservice_delete(request, vpnservice_id): def vpnservice_delete(request, vpnservice_id):
neutronclient(request).delete_vpnservice(vpnservice_id) neutronclient(request).delete_vpnservice(vpnservice_id)
@profiler.trace
def ikepolicy_create(request, **kwargs): def ikepolicy_create(request, **kwargs):
"""Create IKEPolicy """Create IKEPolicy
@ -164,6 +171,7 @@ def ikepolicy_create(request, **kwargs):
return IKEPolicy(ikepolicy) return IKEPolicy(ikepolicy)
@profiler.trace
def ikepolicy_list(request, **kwargs): def ikepolicy_list(request, **kwargs):
return _ikepolicy_list(request, expand_conns=True, **kwargs) return _ikepolicy_list(request, expand_conns=True, **kwargs)
@ -179,6 +187,7 @@ def _ikepolicy_list(request, expand_conns=False, **kwargs):
return [IKEPolicy(v) for v in ikepolicies] return [IKEPolicy(v) for v in ikepolicies]
@profiler.trace
def ikepolicy_get(request, ikepolicy_id): def ikepolicy_get(request, ikepolicy_id):
return _ikepolicy_get(request, ikepolicy_id, expand_conns=True) return _ikepolicy_get(request, ikepolicy_id, expand_conns=True)
@ -193,16 +202,19 @@ def _ikepolicy_get(request, ikepolicy_id, expand_conns=False):
return IKEPolicy(ikepolicy) return IKEPolicy(ikepolicy)
@profiler.trace
def ikepolicy_update(request, ikepolicy_id, **kwargs): def ikepolicy_update(request, ikepolicy_id, **kwargs):
ikepolicy = neutronclient(request).update_ikepolicy( ikepolicy = neutronclient(request).update_ikepolicy(
ikepolicy_id, kwargs).get('ikepolicy') ikepolicy_id, kwargs).get('ikepolicy')
return IKEPolicy(ikepolicy) return IKEPolicy(ikepolicy)
@profiler.trace
def ikepolicy_delete(request, ikepolicy_id): def ikepolicy_delete(request, ikepolicy_id):
neutronclient(request).delete_ikepolicy(ikepolicy_id) neutronclient(request).delete_ikepolicy(ikepolicy_id)
@profiler.trace
def ipsecpolicy_create(request, **kwargs): def ipsecpolicy_create(request, **kwargs):
"""Create IPSecPolicy """Create IPSecPolicy
@ -231,6 +243,7 @@ def ipsecpolicy_create(request, **kwargs):
return IPSecPolicy(ipsecpolicy) return IPSecPolicy(ipsecpolicy)
@profiler.trace
def ipsecpolicy_list(request, **kwargs): def ipsecpolicy_list(request, **kwargs):
return _ipsecpolicy_list(request, expand_conns=True, **kwargs) return _ipsecpolicy_list(request, expand_conns=True, **kwargs)
@ -246,6 +259,7 @@ def _ipsecpolicy_list(request, expand_conns=False, **kwargs):
return [IPSecPolicy(v) for v in ipsecpolicies] return [IPSecPolicy(v) for v in ipsecpolicies]
@profiler.trace
def ipsecpolicy_get(request, ipsecpolicy_id): def ipsecpolicy_get(request, ipsecpolicy_id):
return _ipsecpolicy_get(request, ipsecpolicy_id, expand_conns=True) return _ipsecpolicy_get(request, ipsecpolicy_id, expand_conns=True)
@ -261,16 +275,19 @@ def _ipsecpolicy_get(request, ipsecpolicy_id, expand_conns=False):
return IPSecPolicy(ipsecpolicy) return IPSecPolicy(ipsecpolicy)
@profiler.trace
def ipsecpolicy_update(request, ipsecpolicy_id, **kwargs): def ipsecpolicy_update(request, ipsecpolicy_id, **kwargs):
ipsecpolicy = neutronclient(request).update_ipsecpolicy( ipsecpolicy = neutronclient(request).update_ipsecpolicy(
ipsecpolicy_id, kwargs).get('ipsecpolicy') ipsecpolicy_id, kwargs).get('ipsecpolicy')
return IPSecPolicy(ipsecpolicy) return IPSecPolicy(ipsecpolicy)
@profiler.trace
def ipsecpolicy_delete(request, ipsecpolicy_id): def ipsecpolicy_delete(request, ipsecpolicy_id):
neutronclient(request).delete_ipsecpolicy(ipsecpolicy_id) neutronclient(request).delete_ipsecpolicy(ipsecpolicy_id)
@profiler.trace
def ipsecsiteconnection_create(request, **kwargs): def ipsecsiteconnection_create(request, **kwargs):
"""Create IPSecSiteConnection """Create IPSecSiteConnection
@ -309,6 +326,7 @@ def ipsecsiteconnection_create(request, **kwargs):
return IPSecSiteConnection(ipsecsiteconnection) return IPSecSiteConnection(ipsecsiteconnection)
@profiler.trace
@memoized @memoized
def ipsecsiteconnection_list(request, **kwargs): def ipsecsiteconnection_list(request, **kwargs):
return _ipsecsiteconnection_list(request, expand_ikepolicies=True, return _ipsecsiteconnection_list(request, expand_ikepolicies=True,
@ -342,6 +360,7 @@ def _ipsecsiteconnection_list(request, expand_ikepolicies=False,
return [IPSecSiteConnection(v) for v in ipsecsiteconnections] return [IPSecSiteConnection(v) for v in ipsecsiteconnections]
@profiler.trace
def ipsecsiteconnection_get(request, ipsecsiteconnection_id): def ipsecsiteconnection_get(request, ipsecsiteconnection_id):
return _ipsecsiteconnection_get(request, ipsecsiteconnection_id, return _ipsecsiteconnection_get(request, ipsecsiteconnection_id,
expand_ikepolicies=True, expand_ikepolicies=True,
@ -366,11 +385,13 @@ def _ipsecsiteconnection_get(request, ipsecsiteconnection_id,
return IPSecSiteConnection(ipsecsiteconnection) return IPSecSiteConnection(ipsecsiteconnection)
@profiler.trace
def ipsecsiteconnection_update(request, ipsecsiteconnection_id, **kwargs): def ipsecsiteconnection_update(request, ipsecsiteconnection_id, **kwargs):
ipsecsiteconnection = neutronclient(request).update_ipsec_site_connection( ipsecsiteconnection = neutronclient(request).update_ipsec_site_connection(
ipsecsiteconnection_id, kwargs).get('ipsec_site_connection') ipsecsiteconnection_id, kwargs).get('ipsec_site_connection')
return IPSecSiteConnection(ipsecsiteconnection) return IPSecSiteConnection(ipsecsiteconnection)
@profiler.trace
def ipsecsiteconnection_delete(request, ipsecsiteconnection_id): def ipsecsiteconnection_delete(request, ipsecsiteconnection_id):
neutronclient(request).delete_ipsec_site_connection(ipsecsiteconnection_id) neutronclient(request).delete_ipsec_site_connection(ipsecsiteconnection_id)

View File

@ -97,3 +97,13 @@ def get_trace(request, trace_id):
# throw away toplevel node which is dummy and doesn't contain any info, # throw away toplevel node which is dummy and doesn't contain any info,
# use its first and only child as the toplevel node # use its first and only child as the toplevel node
return rec(trace['children'][0]) return rec(trace['children'][0])
if not PROFILER_SETTINGS.get('enabled', False):
def trace(function):
return function
else:
def trace(function):
func_name = function.__module__ + '.' + function.__name__
decorator = profiler.trace(func_name)
return decorator(function)

View File

@ -24,6 +24,7 @@ from openstack_dashboard.api import cinder
from openstack_dashboard.api import network from openstack_dashboard.api import network
from openstack_dashboard.api import neutron from openstack_dashboard.api import neutron
from openstack_dashboard.api import nova from openstack_dashboard.api import nova
from openstack_dashboard.contrib.developer.profiler import api as profiler
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -167,6 +168,7 @@ def _get_quota_data(request, tenant_mode=True, disabled_quotas=None,
return qs return qs
@profiler.trace
def get_default_quota_data(request, disabled_quotas=None, tenant_id=None): def get_default_quota_data(request, disabled_quotas=None, tenant_id=None):
return _get_quota_data(request, return _get_quota_data(request,
tenant_mode=False, tenant_mode=False,
@ -174,6 +176,7 @@ def get_default_quota_data(request, disabled_quotas=None, tenant_id=None):
tenant_id=tenant_id) tenant_id=tenant_id)
@profiler.trace
def get_tenant_quota_data(request, disabled_quotas=None, tenant_id=None): def get_tenant_quota_data(request, disabled_quotas=None, tenant_id=None):
qs = _get_quota_data(request, qs = _get_quota_data(request,
tenant_mode=True, tenant_mode=True,
@ -237,6 +240,7 @@ def get_tenant_quota_data(request, disabled_quotas=None, tenant_id=None):
return qs return qs
@profiler.trace
def get_disabled_quotas(request): def get_disabled_quotas(request):
disabled_quotas = set([]) disabled_quotas = set([])
@ -280,6 +284,7 @@ def get_disabled_quotas(request):
return disabled_quotas return disabled_quotas
@profiler.trace
def _get_tenant_compute_usages(request, usages, disabled_quotas, tenant_id): def _get_tenant_compute_usages(request, usages, disabled_quotas, tenant_id):
# Unlike the other services it can be the case that nova is enabled but # Unlike the other services it can be the case that nova is enabled but
# doesn't support quotas, in which case we still want to get usage info, # doesn't support quotas, in which case we still want to get usage info,
@ -318,6 +323,7 @@ def _get_tenant_compute_usages(request, usages, disabled_quotas, tenant_id):
usages.tally('ram', 0) usages.tally('ram', 0)
@profiler.trace
def _get_tenant_network_usages(request, usages, disabled_quotas, tenant_id): def _get_tenant_network_usages(request, usages, disabled_quotas, tenant_id):
floating_ips = [] floating_ips = []
try: try:
@ -364,6 +370,7 @@ def _get_tenant_network_usages(request, usages, disabled_quotas, tenant_id):
usages.tally('routers', len(routers)) usages.tally('routers', len(routers))
@profiler.trace
def _get_tenant_volume_usages(request, usages, disabled_quotas, tenant_id): def _get_tenant_volume_usages(request, usages, disabled_quotas, tenant_id):
if 'volumes' not in disabled_quotas: if 'volumes' not in disabled_quotas:
try: try:
@ -382,6 +389,7 @@ def _get_tenant_volume_usages(request, usages, disabled_quotas, tenant_id):
exceptions.handle(request, msg) exceptions.handle(request, msg)
@profiler.trace
@memoized @memoized
def tenant_quota_usages(request, tenant_id=None): def tenant_quota_usages(request, tenant_id=None):
"""Get our quotas and construct our usage object. """Get our quotas and construct our usage object.
@ -407,6 +415,7 @@ def tenant_quota_usages(request, tenant_id=None):
return usages return usages
@profiler.trace
def tenant_limit_usages(request): def tenant_limit_usages(request):
# TODO(licostan): This method shall be removed from Quota module. # TODO(licostan): This method shall be removed from Quota module.
# ProjectUsage/BaseUsage maybe used instead on volume/image dashboards. # ProjectUsage/BaseUsage maybe used instead on volume/image dashboards.