#
# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
"""PyAMS_apm.packages.ldap3 module
This module adds APM instrumentation to LDAP3 package
"""
from elasticapm.instrumentation.packages.base import AbstractInstrumentedModule
from elasticapm.traces import capture_span
__docformat__ = 'restructuredtext'
[docs]class LDAP3OpenInstrumentation(AbstractInstrumentedModule):
"""LDAP3 connection opening instrumentation"""
name = "ldap.open"
instrument_list = [
("ldap3.strategy.base", "BaseStrategy.open"),
("ldap3.strategy.reusable", "ReusableStrategy.open")
]
[docs] def call(self, module, method, wrapped, instance, args, kwargs):
# pylint: disable=too-many-arguments
"""Wrapped method call"""
with capture_span('LDAP.OPEN', "db.ldap", leaf=True):
return wrapped(*args, **kwargs)
[docs]class LDAP3BindInstrumentation(AbstractInstrumentedModule):
"""LDAP3 bind instrumentation"""
name = "ldap.bind"
instrument_list = [("ldap3", "Connection.bind")]
[docs] def call(self, module, method, wrapped, instance, args, kwargs):
# pylint: disable=too-many-arguments
"""Wrapped method call"""
with capture_span('LDAP.BIND', "db.ldap", leaf=True):
return wrapped(*args, **kwargs)
[docs]class LDAP3SearchInstrumentation(AbstractInstrumentedModule):
"""LDAP3 search instrumentation"""
name = "ldap.search"
instrument_list = [("ldap3", "Connection.search")]
[docs] def call(self, module, method, wrapped, instance, args, kwargs):
# pylint: disable=too-many-arguments
"""Wrapped method call"""
with capture_span('LDAP.SEARCH', "db.ldap", {
'db': {
'type': 'ldap',
'statement': kwargs.get('search_filter') or args[1]
}
}, leaf=True):
return wrapped(*args, **kwargs)
[docs]class LDAP3GetResponseInstrumentation(AbstractInstrumentedModule):
"""LDAP3 response getter instrumentation"""
name = "ldap.get_response"
instrument_list = [
("ldap3.strategy.base", "BaseStrategy.get_response"),
("ldap3.strategy.reusable", "ReusableStrategy.get_response")
]
[docs] def call(self, module, method, wrapped, instance, args, kwargs):
# pylint: disable=too-many-arguments
"""Wrapped method call"""
with capture_span('LDAP.GET_RESPONSE', "db.ldap", leaf=True):
return wrapped(*args, **kwargs)