
This change is about adding the ability of python-oneviewclient to register time, parameters values and return values for methods calls that do requests to OneView appliance. The instrumentation implemented by this patch provides the necessary support that will be needed to measure the performance of the OneView driver for ironic and other tools. Change-Id: Iae7fe8ec559ccb2cbf8f93486eb4a1a674d7053a Co-Authored-By: Hugo Nicodemos <nicodemos@lsd.ufcg.edu.br>
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
# Copyright 2016 Hewlett Packard Enterprise Development LP.
|
|
# Copyright 2016 Universidade Federal de Campina Grande
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
import datetime
|
|
import json
|
|
import requests
|
|
import sys
|
|
|
|
from six.moves import configparser
|
|
|
|
|
|
def read_audit_map_file(audit_cases_file):
|
|
config = configparser.RawConfigParser()
|
|
config.read(audit_cases_file)
|
|
audit_case = config.get('audit', 'case')
|
|
audit_case_methods = config.get('cases', audit_case)
|
|
return audit_case_methods.split(',')
|
|
|
|
|
|
def audit(f):
|
|
def wrapper(self, *args, **kwargs):
|
|
method = f.__name__
|
|
client_instance_id = id(self)
|
|
method_caller = sys._getframe(1).f_code.co_name
|
|
|
|
initial_time = datetime.datetime.now().isoformat()
|
|
ret = f(self, *args, **kwargs)
|
|
end_time = datetime.datetime.now().isoformat()
|
|
|
|
is_ironic_request = (
|
|
not callable(getattr(self, method_caller, False)) or
|
|
method_caller == '__init__'
|
|
)
|
|
is_oneview_request = isinstance(ret, requests.models.Response)
|
|
|
|
if self.audit_enabled and (method in self.audit_case_methods):
|
|
_log(self, method, ret, initial_time, end_time, client_instance_id,
|
|
is_ironic_request, is_oneview_request)
|
|
|
|
return ret
|
|
return wrapper
|
|
|
|
|
|
def _log(cls, method, ret, initial_time, end_time, client_instance_id,
|
|
is_ironic_request, is_oneview_request):
|
|
if not cls.audit_case_methods:
|
|
raise ValueError('Missing audit case methods.')
|
|
|
|
if not cls.audit_output_file:
|
|
raise ValueError('Missing audit output file.')
|
|
|
|
data = dict(initial_time=initial_time,
|
|
end_time=end_time,
|
|
method=method,
|
|
ret=str(ret),
|
|
client_instance_id=client_instance_id,
|
|
is_ironic_request=is_ironic_request,
|
|
is_oneview_request=is_oneview_request)
|
|
|
|
with open(cls.audit_output_file, 'a') as output:
|
|
json.dump(data, output)
|
|
output.write('\n')
|