Skip to content
This repository has been archived by the owner on Jun 13, 2023. It is now read-only.

Commit

Permalink
feat(pyqldb): add support for qldb driver cs 273 (#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
sagivr2020 committed Aug 23, 2022
1 parent 5fb0295 commit f103f3a
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 1 deletion.
100 changes: 100 additions & 0 deletions epsagon/events/pyqldb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
"""
pyqldb events module.
"""

from __future__ import absolute_import
from uuid import uuid4
import traceback

from epsagon.utils import add_data_if_needed
from ..event import BaseEvent
from ..trace import trace_factory


class QldbEvent(BaseEvent):
"""
Represents base pyqldb event.
"""

ORIGIN = 'qldb'
RESOURCE_TYPE = 'qldb'

#pylint: disable=W0613
def __init__(self, wrapped, instance, args, kwargs, start_time, response,
exception):
"""
Initialize.
:param wrapped: wrapt's wrapped
:param instance: wrapt's instance
:param args: wrapt's args
:param kwargs: wrapt's kwargs
:param start_time: Start timestamp (epoch)
:param response: response data
:param exception: Exception (if happened)
"""
super(QldbEvent, self).__init__(start_time)

self.event_id = 'qldb-{}'.format(str(uuid4()))
self.resource['name'] = \
getattr(instance.__getattribute__('_transaction')._session,# pylint: disable=W0212
'_ledger_name')
self.resource['operation'] = wrapped.__func__.__name__

self.resource['metadata']['query'] = args[0]
add_data_if_needed(self.resource['metadata'], 'parameters',
[args[i] for i in range(1, len(args))])

add_data_if_needed(self.resource['metadata'], 'transaction_id',
getattr(instance, 'transaction_id'))

if response is not None:
self.update_response(response)

if exception is not None:
self.set_exception(exception, traceback.format_exc())


def update_response(self, response):
"""
Adds response data to event.
:param response: Response from botocore
:return: None
"""

self.resource['metadata']['Results'] = [str(x) for x in response]
self.resource['metadata']['response.consumed_information'] = \
response.get_consumed_ios()
self.resource['metadata']['response.timing_information'] = \
response.get_timing_information()



class QldbEventFactory(object):
"""
Factory class, generates Qldb event.
"""

@staticmethod
def create_event(wrapped, instance, args, kwargs, start_time, response,
exception):
"""
Create a Qldb event.
:param wrapped:
:param instance:
:param args:
:param kwargs:
:param start_time:
:param response:
:param exception:
:return:
"""
event = QldbEvent(
wrapped,
instance,
args,
kwargs,
start_time,
response,
exception
)
trace_factory.add_event(event)
31 changes: 31 additions & 0 deletions epsagon/modules/pyqldb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""
pyqldb patcher module
"""
from __future__ import absolute_import
import wrapt
from epsagon.modules.general_wrapper import wrapper
from ..events.pyqldb import QldbEventFactory


def _wrapper(wrapped, instance, args, kwargs):
"""
General wrapper for Pyqldb instrumentation.
:param wrapped: wrapt's wrapped
:param instance: wrapt's instance
:param args: wrapt's args
:param kwargs: wrapt's kwargs
:return: None
"""
return wrapper(QldbEventFactory, wrapped, instance, args, kwargs)


def patch():
"""
patch module.
:return: None
"""
wrapt.wrap_function_wrapper(
'pyqldb.execution.executor',
'Executor.execute_statement',
_wrapper
)
2 changes: 1 addition & 1 deletion scripts/run_acceptance_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
if [ -z $AWS_ACCESS_KEY_ID ] || [ -z $AWS_SECRET_ACCESS_KEY ]; then
echo "AWS credentials must be set in order to run acceptance tests"
exit 1
elif [ $TRAVIS_PYTHON_VERSION != "2.7" ]; then
elif [ $TRAVIS_PYTHON_VERSION != "2.7" ] && [ $TRAVIS_PYTHON_VERSION != "3.6" ]; then
npm install && export PATH=$(pwd)/node_modules/.bin:$PATH
./acceptance/run.sh $TRAVIS_BUILD_NUMBER $TRAVIS_PYTHON_VERSION
fi

0 comments on commit f103f3a

Please sign in to comment.