('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,
('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), ])
('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(
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()