('Datastore/allOther', 8),
    ('Datastore/MySQL/all', 8),
    ('Datastore/MySQL/allOther', 8),
    ('Datastore/operation/MySQL/select', 2),
    ('Datastore/operation/MySQL/commit', 4),
]

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

if len(DB_MULTIPLE_SETTINGS) > 1:
    mysql_1 = DB_MULTIPLE_SETTINGS[0]
    host_1 = instance_hostname(mysql_1['host'])
    port_1 = mysql_1['port']

    mysql_2 = DB_MULTIPLE_SETTINGS[1]
    host_2 = instance_hostname(mysql_2['host'])
    port_2 = mysql_2['port']

    instance_metric_name_1 = 'Datastore/instance/MySQL/%s/%s' % (host_1,
                                                                 port_1)
    instance_metric_name_2 = 'Datastore/instance/MySQL/%s/%s' % (host_2,
                                                                 port_2)

    _enable_rollup_metrics.extend([
        (instance_metric_name_1, 3),
        (instance_metric_name_2, 3),
    ])
_base_rollup_metrics = (
    ('Datastore/all', 2),
    ('Datastore/allOther', 2),
    ('Datastore/MySQL/all', 2),
    ('Datastore/MySQL/allOther', 2),
    ('Datastore/operation/MySQL/rollback', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

_host = instance_hostname(DB_SETTINGS['host'])
_port = DB_SETTINGS['port']

_instance_metric_name = 'Datastore/instance/MySQL/%s/%s' % (_host, _port)

_enable_rollup_metrics.append((_instance_metric_name, 1))

_disable_rollup_metrics.append((_instance_metric_name, None))

# Tests


@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
    'test_rollback:test_rollback_on_exception_enable',
    scoped_metrics=_enable_scoped_metrics,
Esempio n. 3
0
    ('Datastore/operation/Redis/get', 1),
    ('Datastore/operation/Redis/get', 1),
    ('Datastore/operation/Redis/client_list', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

if len(DB_MULTIPLE_SETTINGS) > 1:
    redis_1 = DB_MULTIPLE_SETTINGS[0]
    redis_2 = DB_MULTIPLE_SETTINGS[1]

    host_1 = instance_hostname(redis_1['host'])
    port_1 = redis_1['port']

    host_2 = instance_hostname(redis_2['host'])
    port_2 = redis_2['port']

    instance_metric_name_1 = 'Datastore/instance/Redis/%s/%s' % (host_1,
                                                                 port_1)
    instance_metric_name_2 = 'Datastore/instance/Redis/%s/%s' % (host_2,
                                                                 port_2)

    _enable_rollup_metrics.extend([
        (instance_metric_name_1, 2),
        (instance_metric_name_2, 1),
    ])
    ('Datastore/Postgres/allOther', 7),
    ('Datastore/statement/Postgres/pg_settings/select', 1),
    ('Datastore/operation/Postgres/drop', 1),
    ('Datastore/operation/Postgres/create', 1),
    ('Datastore/operation/Postgres/commit', 2),
]

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

if len(DB_MULTIPLE_SETTINGS) > 1:
    _postgresql_1 = DB_MULTIPLE_SETTINGS[0]
    _host_1 = instance_hostname(_postgresql_1['host'])
    _port_1 = _postgresql_1['port']

    _postgresql_2 = DB_MULTIPLE_SETTINGS[1]
    _host_2 = instance_hostname(_postgresql_2['host'])
    _port_2 = _postgresql_2['port']

    _instance_metric_name_1 = 'Datastore/instance/Postgres/%s/%s' % (_host_1,
                                                                     _port_1)
    _instance_metric_name_2 = 'Datastore/instance/Postgres/%s/%s' % (_host_2,
                                                                     _port_2)

    _enable_rollup_metrics.extend([
        (_instance_metric_name_1, 2),
        (_instance_metric_name_2, 3),
    ])
def test_span_events(instance_enabled, db_instance_enabled, loop):
    guid = 'dbb533c53b749e0b'
    priority = 0.5

    common = {
        'type': 'Span',
        'transactionId': guid,
        'priority': priority,
        'sampled': True,
        'category': 'datastore',
        'component': 'Redis',
        'span.kind': 'client',
    }
    exact_agents = {}

    if instance_enabled:
        settings = _enable_instance_settings.copy()
        hostname = instance_hostname(DB_SETTINGS['host'])
        exact_agents.update({
            'peer.address': '%s:%s' % (hostname, DB_SETTINGS['port']),
            'peer.hostname': hostname,
        })
    else:
        settings = _disable_instance_settings.copy()
        exact_agents.update({
            'peer.address': 'Unknown:Unknown',
            'peer.hostname': 'Unknown',
        })

    if db_instance_enabled and instance_enabled:
        exact_agents.update({
            'db.instance': str(DATABASE_NUMBER),
        })
        unexpected_agents = ()
    else:
        settings['attributes.exclude'] = ['db.instance']
        unexpected_agents = ('db.instance',)

    query_1 = common.copy()
    query_1['name'] = 'Datastore/operation/Redis/set'

    query_2 = common.copy()
    query_2['name'] = 'Datastore/operation/Redis/get'

    query_3 = common.copy()
    query_3['name'] = 'Datastore/operation/Redis/client_list'

    @validate_span_events(
            count=1,
            exact_intrinsics=query_1,
            unexpected_intrinsics=('db.instance'),
            exact_agents=exact_agents,
            unexpected_agents=unexpected_agents)
    @validate_span_events(
            count=1,
            exact_intrinsics=query_2,
            unexpected_intrinsics=('db.instance'),
            exact_agents=exact_agents,
            unexpected_agents=unexpected_agents)
    @validate_span_events(
            count=1,
            exact_intrinsics=query_3,
            unexpected_intrinsics=('db.instance'),
            exact_agents=exact_agents,
            unexpected_agents=unexpected_agents)
    @override_application_settings(settings)
    @background_task(name='span_events')
    def _test():
        txn = current_transaction()
        txn.guid = guid
        txn._priority = priority
        txn._sampled = True
        loop.run_until_complete(_exercise_db())

    _test()
    'datastore_tracer.instance_reporting.enabled': True,
    'datastore_tracer.database_name_reporting.enabled': True,
}
_disable_instance_settings = {
    'datastore_tracer.instance_reporting.enabled': False,
    'datastore_tracer.database_name_reporting.enabled': False,
}
_instance_only_settings = {
    'datastore_tracer.instance_reporting.enabled': True,
    'datastore_tracer.database_name_reporting.enabled': False,
}

# Expected parameters

_enabled_required = {
    'host': instance_hostname(ES_SETTINGS['host']),
    'port_path_or_id': str(ES_SETTINGS['port']),
}
_enabled_forgone = {
    'db.instance': 'VALUE NOT USED',
}

_disabled_required = {}
_disabled_forgone = {
    'host': 'VALUE NOT USED',
    'port_path_or_id': 'VALUE NOT USED',
    'db.instance': 'VALUE NOT USED',
}

_instance_only_required = {
    'host': instance_hostname(ES_SETTINGS['host']),
    ("Datastore/all", TOTAL_COUNT),
    ("Datastore/allOther", TOTAL_COUNT),
    ("Datastore/Postgres/all", TOTAL_COUNT),
    ("Datastore/Postgres/allOther", TOTAL_COUNT),
    ("Datastore/statement/Postgres/pg_settings/select", 2),
]

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

if len(DB_MULTIPLE_SETTINGS) > 1:
    _postgresql_1 = DB_MULTIPLE_SETTINGS[0]
    _host_1 = instance_hostname(_postgresql_1["host"])
    _port_1 = _postgresql_1["port"]

    _postgresql_2 = DB_MULTIPLE_SETTINGS[1]
    _host_2 = instance_hostname(_postgresql_2["host"])
    _port_2 = _postgresql_2["port"]

    _instance_metric_name_1 = "Datastore/instance/Postgres/%s/%s" % (_host_1,
                                                                     _port_1)
    _instance_metric_name_2 = "Datastore/instance/Postgres/%s/%s" % (_host_2,
                                                                     _port_2)

    _enable_rollup_metrics.extend([
        (_instance_metric_name_1, STATEMENT_COUNT),
        (_instance_metric_name_2, STATEMENT_COUNT),
    ])
Esempio n. 8
0
    ('Datastore/Memcached/allOther', 2),
    ('Datastore/operation/Memcached/set_multi', 1),
    ('Datastore/operation/Memcached/get_multi', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

if len(DB_MULTIPLE_SETTINGS) > 1:
    memcached_1 = DB_MULTIPLE_SETTINGS[0]
    memcached_2 = DB_MULTIPLE_SETTINGS[1]

    host_1 = instance_hostname(memcached_1['host'])
    port_1 = memcached_1['port']

    host_2 = instance_hostname(memcached_2['host'])
    port_2 = memcached_2['port']

    instance_metric_name_1 = 'Datastore/instance/Memcached/%s/%s' % (host_1,
                                                                     port_1)
    instance_metric_name_2 = 'Datastore/instance/Memcached/%s/%s' % (host_2,
                                                                     port_2)

    _enable_rollup_metrics.extend([
        (instance_metric_name_1, None),
        (instance_metric_name_2, None),
    ])
            await conn.cursor("SELECT 0")

    event_loop.run_until_complete(amain())


@pytest.mark.skipif(
    ASYNCPG_VERSION < (0, 11),
    reason="This is testing connect behavior which is only captured on newer asyncpg versions",
)
@validate_transaction_metrics(
    "test_unix_socket_connect",
    background_task=True,
    rollup_metrics=[
        (
            "Datastore/instance/Postgres/" + instance_hostname("localhost") + "//.s.PGSQL.THIS_FILE_BETTER_NOT_EXIST",
            1,
        )
    ],
)
@background_task(name="test_unix_socket_connect")
def test_unix_socket_connect(event_loop):
    with pytest.raises(OSError):
        event_loop.run_until_complete(asyncpg.connect("postgres://?host=/.s.PGSQL.THIS_FILE_BETTER_NOT_EXIST"))


@pytest.mark.skipif(
    ASYNCPG_VERSION < (0, 11),
    reason="This is testing connect behavior which is only captured on newer asyncpg versions",
)
@validate_transaction_metrics(
Esempio n. 10
0
            await conn.cursor("SELECT 0")

    loop = asyncio.get_event_loop()
    loop.run_until_complete(amain())


@pytest.mark.skipif(
    ASYNCPG_VERSION < (0, 11),
    reason=
    "This is testing connect behavior which is only captured on newer asyncpg versions",
)
@validate_transaction_metrics(
    "test_unix_socket_connect",
    background_task=True,
    rollup_metrics=[(
        "Datastore/instance/Postgres/" + instance_hostname("localhost") +
        "//.s.PGSQL.THIS_FILE_BETTER_NOT_EXIST",
        1,
    )],
)
@background_task(name="test_unix_socket_connect")
def test_unix_socket_connect():
    loop = asyncio.get_event_loop()
    with pytest.raises(OSError):
        loop.run_until_complete(
            asyncpg.connect(
                "postgres://?host=/.s.PGSQL.THIS_FILE_BETTER_NOT_EXIST"))


@pytest.mark.skipif(
    ASYNCPG_VERSION < (0, 11),
def test_span_events(instance_enabled):
    guid = 'dbb533c53b749e0b'
    priority = 0.5

    common = {
        'type': 'Span',
        'transactionId': guid,
        'priority': priority,
        'sampled': True,
        'category': 'datastore',
        'component': 'Memcached',
        'span.kind': 'client',
    }

    exact_agents = {}
    if instance_enabled:
        settings = _enable_instance_settings
        hostname = instance_hostname(DB_SETTINGS['host'])
        exact_agents.update({
            'peer.address':
            '%s:%s' % (hostname, DB_SETTINGS['port']),
            'peer.hostname':
            hostname,
        })
    else:
        settings = _disable_instance_settings
        exact_agents.update({
            'peer.address': 'Unknown:Unknown',
            'peer.hostname': 'Unknown',
        })

    query_1 = common.copy()
    query_1['name'] = 'Datastore/operation/Memcached/set'

    query_2 = common.copy()
    query_2['name'] = 'Datastore/operation/Memcached/get'

    query_3 = common.copy()
    query_3['name'] = 'Datastore/operation/Memcached/delete'

    @validate_span_events(count=1,
                          exact_intrinsics=query_1,
                          exact_agents=exact_agents,
                          unexpected_agents=('db.instance', ))
    @validate_span_events(count=1,
                          exact_intrinsics=query_2,
                          exact_agents=exact_agents,
                          unexpected_agents=('db.instance', ))
    @validate_span_events(count=1,
                          exact_intrinsics=query_3,
                          exact_agents=exact_agents,
                          unexpected_agents=('db.instance', ))
    @validate_span_events(count=0, expected_intrinsics=('db.statement', ))
    @override_application_settings(settings)
    @background_task(name='span_events')
    def _test():
        txn = current_transaction()
        txn.guid = guid
        txn._priority = priority
        txn._sampled = True

        client = memcache.Client([MEMCACHED_ADDR])
        _exercise_db(client)

    _test()