Skip to content

Commit

Permalink
Merge e9d5e90 into c403c77
Browse files Browse the repository at this point in the history
  • Loading branch information
victorhugorodrigues committed Sep 26, 2018
2 parents c403c77 + e9d5e90 commit 887d19c
Show file tree
Hide file tree
Showing 13 changed files with 595 additions and 16 deletions.
2 changes: 2 additions & 0 deletions oneview_redfish_toolkit/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
vlan_network_interface
from oneview_redfish_toolkit.blueprints.zone import zone
from oneview_redfish_toolkit.blueprints.zone_collection import zone_collection
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit import client_session
from oneview_redfish_toolkit import config
from oneview_redfish_toolkit.config import PERFORMANCE_LOGGER_NAME
Expand Down Expand Up @@ -170,6 +171,7 @@ def main(config_file_path, logging_config_file_path,
client_session.init_gc_for_expired_sessions()
multiple_oneview.init_map_resources()
multiple_oneview.init_map_appliances()
category_resource.init_map_category_resources()

if auth_mode == "conf":
app.register_blueprint(event_service)
Expand Down
25 changes: 16 additions & 9 deletions oneview_redfish_toolkit/blueprints/chassis.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
from oneview_redfish_toolkit.api.util.power_option import OneViewPowerOption
from oneview_redfish_toolkit.blueprints.util.response_builder import \
ResponseBuilder
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit.services.manager_service import \
get_manager_uuid


chassis = Blueprint("chassis", __name__)


Expand All @@ -50,14 +50,21 @@ def get_chassis(uuid):
Returns:
JSON: JSON with Chassis.
"""
resource_index = g.oneview_client.index_resources.get_all(
filter='uuid=' + uuid
)
if not resource_index:
abort(status.HTTP_404_NOT_FOUND,
"Chassis {} not found".format(uuid))

category = resource_index[0]["category"]
category = ''
cached_category = category_resource.get_category_by_resource_id(uuid)

if cached_category:
category = cached_category.resource.replace('_', '-')
else:
resource_index = g.oneview_client.index_resources.get_all(
filter='uuid=' + uuid
)
if not resource_index:
abort(status.HTTP_404_NOT_FOUND,
"Chassis {} not found".format(uuid))

category = resource_index[0]["category"]

manager_uuid = get_manager_uuid(uuid)

if category == 'server-hardware':
Expand Down
9 changes: 9 additions & 0 deletions oneview_redfish_toolkit/blueprints/computer_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
from oneview_redfish_toolkit.api.util.power_option import OneViewPowerOption
from oneview_redfish_toolkit.blueprints.util.response_builder import \
ResponseBuilder
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit.services.computer_system_service import \
ComputerSystemService
from oneview_redfish_toolkit.services.manager_service import \
Expand Down Expand Up @@ -291,6 +292,14 @@ def create_composed_system():

def _get_oneview_resource(uuid):
"""Gets a Server hardware or Server profile templates"""
cached_category = category_resource.get_category_by_resource_id(uuid)

if cached_category:
resource = getattr(g.oneview_client, cached_category.resource)
function = getattr(resource, cached_category.function)

return function(uuid)

categories = [
{"func": g.oneview_client.server_profiles.get, "param": uuid},
{"func": g.oneview_client.server_profile_templates.get, "param": uuid}
Expand Down
16 changes: 16 additions & 0 deletions oneview_redfish_toolkit/blueprints/resource_block.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import StorageResourceBlock
from oneview_redfish_toolkit.blueprints.util.response_builder \
import ResponseBuilder
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit.services.manager_service import \
get_manager_uuid
from oneview_redfish_toolkit.services.zone_service import ZoneService
Expand Down Expand Up @@ -172,6 +173,21 @@ def get_resource_block_ethernet_interface(uuid, id):

def _get_oneview_resource(uuid):
drives_param = "/rest/drives/" + uuid

cached_categ = category_resource.get_category_by_resource_id(uuid) or \
category_resource.get_category_by_resource_id(drives_param)

if cached_categ:
resource_uuid = uuid

if cached_categ.resource == 'index_resources':
resource_uuid = drives_param

resource = getattr(g.oneview_client, cached_categ.resource)
function = getattr(resource, cached_categ.function)

return function(resource_uuid)

categories = [
{"func": g.oneview_client.server_hardware.get, "param": uuid},
{"func": g.oneview_client.server_profile_templates.get, "param": uuid},
Expand Down
19 changes: 13 additions & 6 deletions oneview_redfish_toolkit/blueprints/thermal.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from hpOneView.exceptions import HPOneViewException
from oneview_redfish_toolkit.api.errors import OneViewRedfishError
from oneview_redfish_toolkit.api.thermal import Thermal
from oneview_redfish_toolkit import category_resource


thermal = Blueprint("thermal", __name__)
Expand All @@ -50,14 +51,20 @@ def get_thermal(uuid):
"""
try:
index_obj = g.oneview_client.index_resources.get_all(
filter='uuid=' + uuid
)
category = ''
cached_category = category_resource.get_category_by_resource_id(uuid)

if index_obj:
category = index_obj[0]["category"]
if cached_category:
category = cached_category.resource.replace('_', '-')
else:
raise OneViewRedfishError('Cannot find Index resource')
index_obj = g.oneview_client.index_resources.get_all(
filter='uuid=' + uuid
)

if index_obj:
category = index_obj[0]["category"]
else:
raise OneViewRedfishError('Cannot find Index resource')

if category == 'server-hardware':
server_hardware = g.oneview_client.server_hardware. \
Expand Down
56 changes: 56 additions & 0 deletions oneview_redfish_toolkit/category_resource.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-

# Copyright (2018) Hewlett Packard Enterprise Development LP
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

# Python libs
import threading


# Globals vars:
# globals()['map_category_resources_ov']

lock = threading.Lock()


class CategoryResource(object):
def __init__(self, resource_id, resource, function):
self.resource_id = resource_id
self.resource = resource
self.function = function


def init_map_category_resources():
globals()['map_category_resources_ov'] = dict()


def _get_map_category_resources():
return globals()['map_category_resources_ov']


def set_map_category_resources_entry(resource_id, resource, function):
# Check if the resource's category is already cached
if get_category_by_resource_id(resource_id):
return

with lock:
_get_map_category_resources()[resource_id] = \
CategoryResource(resource_id, resource, function)


def get_category_by_resource_id(resource_id):
"""Get cached resource category by resource ID"""
cached_category = _get_map_category_resources().get(resource_id)

return cached_category
7 changes: 6 additions & 1 deletion oneview_redfish_toolkit/strategy_multiple_oneview.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,20 @@
# under the License.

# Modules own libs
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit import multiple_oneview


def first_parameter_resource(resource, function, *args, **kwargs):
resource_id = args[0]

return multiple_oneview.query_ov_client_by_resource(resource_id, resource,
resp = multiple_oneview.query_ov_client_by_resource(resource_id, resource,
function, *args,
**kwargs)
category_resource.set_map_category_resources_entry(resource_id,
resource,
function)
return resp


def filter_uuid_parameter_resource(resource, function, *args, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions oneview_redfish_toolkit/tests/base_flask_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from oneview_redfish_toolkit.api.redfish_error import RedfishError
from oneview_redfish_toolkit.blueprints.util.response_builder import \
ResponseBuilder
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit import client_session
from oneview_redfish_toolkit import config
from oneview_redfish_toolkit import handler_multiple_oneview
Expand Down Expand Up @@ -141,6 +142,7 @@ def setUp(cls):
cls.oneview_client = mock.MagicMock()
cls.mock_get_client_by_ip.return_value = cls.oneview_client
cls.mock_get_client_by_token.return_value = cls.oneview_client
category_resource.init_map_category_resources()

@classmethod
def tearDownClass(cls):
Expand Down
Loading

0 comments on commit 887d19c

Please sign in to comment.