def test_default_library_paths(version_tuple, python_implementation, system): cases = ( ("Linux", ("3", "5", "1"), "CPython", ["*/lib/python3.5/*", "*/lib64/python3.5/*"]), ("Linux", ("2", "7", "9"), "CPython", ["*/lib/python2.7/*", "*/lib64/python2.7/*"]), ("Windows", ("3", "5", "1"), "CPython", ["*\\lib\\*"]), ("Windows", ("2", "7", "9"), "CPython", ["*\\lib\\*"]), ("Linux", ("3", "6", "3"), "PyPy", ["*/lib-python/3/*", "*/site-packages/*"]), ("Linux", ("2", "7", "9"), "PyPy", ["*/lib-python/2.7/*", "*/site-packages/*"]), ) for system_name, version, implementation, expected in cases: system.return_value = system_name version_tuple.return_value = version python_implementation.return_value = implementation assert compat.get_default_library_patters() == expected
def test_default_library_paths(version_tuple, python_implementation, system): cases = ( ('Linux', ('3', '5', '1'), 'CPython', ['*/lib/python3.5/*', '*/lib64/python3.5/*']), ('Linux', ('2', '7', '9'), 'CPython', ['*/lib/python2.7/*', '*/lib64/python2.7/*']), ('Windows', ('3', '5', '1'), 'CPython', ['*\\lib\\*']), ('Windows', ('2', '7', '9'), 'CPython', ['*\\lib\\*']), ('Linux', ('3', '6', '3'), 'PyPy', ['*/lib-python/3/*', '*/site-packages/*']), ('Linux', ('2', '7', '9'), 'PyPy', ['*/lib-python/2.7/*', '*/site-packages/*']), ) for system_name, version, implementation, expected in cases: system.return_value = system_name version_tuple.return_value = version python_implementation.return_value = implementation assert compat.get_default_library_patters() == expected
class Config(_ConfigBase): service_name = _ConfigValue( "SERVICE_NAME", validators=[RegexValidator("^[a-zA-Z0-9 _-]+$")], default="unknown-python-service", required=True, ) service_node_name = _ConfigValue("SERVICE_NODE_NAME") environment = _ConfigValue("ENVIRONMENT") secret_token = _ConfigValue("SECRET_TOKEN") api_key = _ConfigValue("API_KEY") debug = _BoolConfigValue("DEBUG", default=False) server_url = _ConfigValue("SERVER_URL", default="http://localhost:8200", required=True) server_cert = _ConfigValue("SERVER_CERT", validators=[FileIsReadableValidator()]) verify_server_cert = _BoolConfigValue("VERIFY_SERVER_CERT", default=True) use_certifi = _BoolConfigValue("USE_CERTIFI", default=True) include_paths = _ListConfigValue("INCLUDE_PATHS") exclude_paths = _ListConfigValue( "EXCLUDE_PATHS", default=compat.get_default_library_patters()) filter_exception_types = _ListConfigValue("FILTER_EXCEPTION_TYPES") server_timeout = _ConfigValue( "SERVER_TIMEOUT", type=float, validators=[ UnitValidator(r"^((?:-)?\d+)(ms|s|m)?$", r"\d+(ms|s|m)", { "ms": 0.001, "s": 1, "m": 60, None: 1000 }) ], default=5, ) hostname = _ConfigValue("HOSTNAME", default=socket.gethostname()) auto_log_stacks = _BoolConfigValue("AUTO_LOG_STACKS", default=True) transport_class = _ConfigValue( "TRANSPORT_CLASS", default="elasticapm.transport.http.Transport", required=True) processors = _ListConfigValue( "PROCESSORS", default=[ "elasticapm.processors.sanitize_stacktrace_locals", "elasticapm.processors.sanitize_http_request_cookies", "elasticapm.processors.sanitize_http_response_cookies", "elasticapm.processors.sanitize_http_headers", "elasticapm.processors.sanitize_http_wsgi_env", "elasticapm.processors.sanitize_http_request_body", ], ) sanitize_field_names = _ListConfigValue("SANITIZE_FIELD_NAMES", type=starmatch_to_regex, default=BASE_SANITIZE_FIELD_NAMES) metrics_sets = _ListConfigValue( "METRICS_SETS", default=[ "elasticapm.metrics.sets.cpu.CPUMetricSet", ], ) metrics_interval = _ConfigValue( "METRICS_INTERVAL", type=int, validators=[ duration_validator, ExcludeRangeValidator(1, 999, "{range_start} - {range_end} ms") ], default=30000, ) breakdown_metrics = _BoolConfigValue("BREAKDOWN_METRICS", default=True) prometheus_metrics = _BoolConfigValue("PROMETHEUS_METRICS", default=False) prometheus_metrics_prefix = _ConfigValue("PROMETHEUS_METRICS_PREFIX", default="prometheus.metrics.") disable_metrics = _ListConfigValue("DISABLE_METRICS", type=starmatch_to_regex, default=[]) central_config = _BoolConfigValue("CENTRAL_CONFIG", default=True) api_request_size = _ConfigValue("API_REQUEST_SIZE", type=int, validators=[size_validator], default=768 * 1024) api_request_time = _ConfigValue("API_REQUEST_TIME", type=int, validators=[duration_validator], default=10 * 1000) transaction_sample_rate = _ConfigValue( "TRANSACTION_SAMPLE_RATE", type=float, validators=[PrecisionValidator(4, 0.0001)], default=1.0) transaction_max_spans = _ConfigValue("TRANSACTION_MAX_SPANS", type=int, default=500) stack_trace_limit = _ConfigValue("STACK_TRACE_LIMIT", type=int, default=500) span_frames_min_duration = _ConfigValue( "SPAN_FRAMES_MIN_DURATION", default=5, validators=[ UnitValidator(r"^((?:-)?\d+)(ms|s|m)?$", r"\d+(ms|s|m)", { "ms": 1, "s": 1000, "m": 60000, None: 1 }) ], type=int, ) span_compression_enabled = _BoolConfigValue("SPAN_COMPRESSION_ENABLED", default=False) span_compression_exact_match_max_duration = _ConfigValue( "SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION", default=50, validators=[duration_validator], type=int, ) span_compression_same_kind_max_duration = _ConfigValue( "SPAN_COMPRESSION_SAME_KIND_MAX_DURATION", default=5, validators=[duration_validator], type=int, ) exit_span_min_duration = _ConfigValue( "EXIT_SPAN_MIN_DURATION", default=1, validators=[duration_validator], type=float, ) collect_local_variables = _ConfigValue("COLLECT_LOCAL_VARIABLES", default="errors") source_lines_error_app_frames = _ConfigValue( "SOURCE_LINES_ERROR_APP_FRAMES", type=int, default=5) source_lines_error_library_frames = _ConfigValue( "SOURCE_LINES_ERROR_LIBRARY_FRAMES", type=int, default=5) source_lines_span_app_frames = _ConfigValue("SOURCE_LINES_SPAN_APP_FRAMES", type=int, default=0) source_lines_span_library_frames = _ConfigValue( "SOURCE_LINES_SPAN_LIBRARY_FRAMES", type=int, default=0) local_var_max_length = _ConfigValue("LOCAL_VAR_MAX_LENGTH", type=int, default=200) local_var_list_max_length = _ConfigValue("LOCAL_VAR_LIST_MAX_LENGTH", type=int, default=10) local_var_dict_max_length = _ConfigValue("LOCAL_VAR_DICT_MAX_LENGTH", type=int, default=10) capture_body = _ConfigValue( "CAPTURE_BODY", default="off", validators=[ lambda val, _: { "errors": "error", "transactions": "transaction" }.get(val, val) ], ) async_mode = _BoolConfigValue("ASYNC_MODE", default=True) instrument_django_middleware = _BoolConfigValue( "INSTRUMENT_DJANGO_MIDDLEWARE", default=True) autoinsert_django_middleware = _BoolConfigValue( "AUTOINSERT_DJANGO_MIDDLEWARE", default=True) transactions_ignore_patterns = _ListConfigValue( "TRANSACTIONS_IGNORE_PATTERNS", default=[]) transaction_ignore_urls = _ListConfigValue("TRANSACTION_IGNORE_URLS", type=starmatch_to_regex, default=[]) service_version = _ConfigValue("SERVICE_VERSION") framework_name = _ConfigValue("FRAMEWORK_NAME") framework_version = _ConfigValue("FRAMEWORK_VERSION") global_labels = _DictConfigValue("GLOBAL_LABELS") disable_send = _BoolConfigValue("DISABLE_SEND", default=False) enabled = _BoolConfigValue("ENABLED", default=True) recording = _BoolConfigValue("RECORDING", default=True) instrument = _BoolConfigValue("INSTRUMENT", default=True) enable_distributed_tracing = _BoolConfigValue("ENABLE_DISTRIBUTED_TRACING", default=True) capture_headers = _BoolConfigValue("CAPTURE_HEADERS", default=True) django_transaction_name_from_route = _BoolConfigValue( "DJANGO_TRANSACTION_NAME_FROM_ROUTE", default=False) disable_log_record_factory = _BoolConfigValue("DISABLE_LOG_RECORD_FACTORY", default=False) use_elastic_traceparent_header = _BoolConfigValue( "USE_ELASTIC_TRACEPARENT_HEADER", default=True) use_elastic_excepthook = _BoolConfigValue("USE_ELASTIC_EXCEPTHOOK", default=False) cloud_provider = _ConfigValue("CLOUD_PROVIDER", default=True) log_level = _ConfigValue( "LOG_LEVEL", validators=[ EnumerationValidator([ "trace", "debug", "info", "warning", "warn", "error", "critical", "off" ]) ], callbacks=[_log_level_callback], ) log_file = _ConfigValue("LOG_FILE", default="") log_file_size = _ConfigValue("LOG_FILE_SIZE", validators=[size_validator], type=int, default=50 * 1024 * 1024) log_ecs_reformatting = _ConfigValue( "LOG_ECS_REFORMATTING", validators=[EnumerationValidator(["off", "override"])], callbacks=[_log_ecs_reformatting_callback], default="off", ) @property def is_recording(self): if not self.enabled: return False else: return self.recording
class Config(_ConfigBase): service_name = _ConfigValue( 'SERVICE_NAME', validators=[lambda val: re.match('^[a-zA-Z0-9 _-]+$', val)], required=True) environment = _ConfigValue('ENVIRONMENT', default=None) secret_token = _ConfigValue('SECRET_TOKEN') debug = _BoolConfigValue('DEBUG', default=False) server_url = _ConfigValue('SERVER_URL', default='http://localhost:8200', required=True) verify_server_cert = _BoolConfigValue('VERIFY_SERVER_CERT', default=True) include_paths = _ListConfigValue('INCLUDE_PATHS') exclude_paths = _ListConfigValue( 'EXCLUDE_PATHS', default=compat.get_default_library_patters()) filter_exception_types = _ListConfigValue('FILTER_EXCEPTION_TYPES') server_timeout = _ConfigValue('SERVER_TIMEOUT', type=float, default=5) hostname = _ConfigValue('HOSTNAME', default=socket.gethostname()) auto_log_stacks = _BoolConfigValue('AUTO_LOG_STACKS', default=True) transport_class = _ConfigValue( 'TRANSPORT_CLASS', default='elasticapm.transport.http.AsyncTransport', required=True) processors = _ListConfigValue( 'PROCESSORS', default=[ 'elasticapm.processors.sanitize_stacktrace_locals', 'elasticapm.processors.sanitize_http_request_cookies', 'elasticapm.processors.sanitize_http_headers', 'elasticapm.processors.sanitize_http_wsgi_env', 'elasticapm.processors.sanitize_http_request_querystring', 'elasticapm.processors.sanitize_http_request_body', ]) flush_interval = _ConfigValue('FLUSH_INTERVAL', type=int, default=10) transaction_sample_rate = _ConfigValue('TRANSACTION_SAMPLE_RATE', type=float, default=1.0) transaction_max_spans = _ConfigValue('TRANSACTION_MAX_SPANS', type=int, default=500) span_frames_min_duration_ms = _ConfigValue('SPAN_FRAMES_MIN_DURATION', default=-1, type=int) max_queue_size = _ConfigValue('MAX_QUEUE_SIZE', type=int, default=500) collect_local_variables = _ConfigValue('COLLECT_LOCAL_VARIABLES', default='errors') source_lines_error_app_frames = _ConfigValue( 'SOURCE_LINES_ERROR_APP_FRAMES', type=int, default=5) source_lines_error_library_frames = _ConfigValue( 'SOURCE_LINES_ERROR_LIBRARY_FRAMES', type=int, default=5) source_lines_span_app_frames = _ConfigValue('SOURCE_LINES_SPAN_APP_FRAMES', type=int, default=0) source_lines_span_library_frames = _ConfigValue( 'SOURCE_LINES_SPAN_LIBRARY_FRAMES', type=int, default=0) local_var_max_length = _ConfigValue('LOCAL_VAR_MAX_LENGTH', type=int, default=200) local_var_list_max_length = _ConfigValue('LOCAL_VAR_LIST_MAX_LENGTH', type=int, default=10) capture_body = _ConfigValue('CAPTURE_BODY', default='off') async_mode = _BoolConfigValue('ASYNC_MODE', default=True) instrument_django_middleware = _BoolConfigValue( 'INSTRUMENT_DJANGO_MIDDLEWARE', default=True) transactions_ignore_patterns = _ListConfigValue( 'TRANSACTIONS_IGNORE_PATTERNS', default=[]) service_version = _ConfigValue('SERVICE_VERSION') framework_name = _ConfigValue('FRAMEWORK_NAME', default=None) framework_version = _ConfigValue('FRAMEWORK_VERSION', default=None) disable_send = _BoolConfigValue('DISABLE_SEND', default=False) instrument = _BoolConfigValue('DISABLE_INSTRUMENTATION', default=True) # undocumented configuration _wait_to_first_send = _ConfigValue('_WAIT_TO_FIRST_SEND', type=int, default=5)
class Config(_ConfigBase): service_name = _ConfigValue( "SERVICE_NAME", validators=[RegexValidator("^[a-zA-Z0-9 _-]+$")], required=True) environment = _ConfigValue("ENVIRONMENT", default=None) secret_token = _ConfigValue("SECRET_TOKEN") debug = _BoolConfigValue("DEBUG", default=False) server_url = _ConfigValue("SERVER_URL", default="http://localhost:8200", required=True) server_cert = _ConfigValue("SERVER_CERT", default=None, required=False, validators=[FileIsReadableValidator()]) verify_server_cert = _BoolConfigValue("VERIFY_SERVER_CERT", default=True) include_paths = _ListConfigValue("INCLUDE_PATHS") exclude_paths = _ListConfigValue( "EXCLUDE_PATHS", default=compat.get_default_library_patters()) filter_exception_types = _ListConfigValue("FILTER_EXCEPTION_TYPES") server_timeout = _ConfigValue( "SERVER_TIMEOUT", type=float, validators=[ UnitValidator(r"^((?:-)?\d+)(ms|s|m)?$", r"\d+(ms|s|m)", { "ms": 0.001, "s": 1, "m": 60, None: 1000 }) ], default=5, ) hostname = _ConfigValue("HOSTNAME", default=socket.gethostname()) auto_log_stacks = _BoolConfigValue("AUTO_LOG_STACKS", default=True) transport_class = _ConfigValue( "TRANSPORT_CLASS", default="elasticapm.transport.http.AsyncTransport", required=True) processors = _ListConfigValue( "PROCESSORS", default=[ "elasticapm.processors.sanitize_stacktrace_locals", "elasticapm.processors.sanitize_http_request_cookies", "elasticapm.processors.sanitize_http_response_cookies", "elasticapm.processors.sanitize_http_headers", "elasticapm.processors.sanitize_http_wsgi_env", "elasticapm.processors.sanitize_http_request_querystring", "elasticapm.processors.sanitize_http_request_body", ], ) metrics_sets = _ListConfigValue( "METRICS_SETS", default=[ "elasticapm.metrics.sets.cpu.CPUMetricSet", "elasticapm.metrics.sets.transactions.TransactionsMetricSet", ], ) metrics_interval = _ConfigValue( "METRICS_INTERVAL", type=int, validators=[ duration_validator, ExcludeRangeValidator(1, 999, "{range_start} - {range_end} ms") ], default=30000, ) breakdown_metrics = _BoolConfigValue("BREAKDOWN_METRICS", default=True) disable_metrics = _ListConfigValue("DISABLE_METRICS", type=starmatch_to_regex, default=[]) central_config = _BoolConfigValue("CENTRAL_CONFIG", default=True) api_request_size = _ConfigValue("API_REQUEST_SIZE", type=int, validators=[size_validator], default=750 * 1024) api_request_time = _ConfigValue("API_REQUEST_TIME", type=int, validators=[duration_validator], default=10 * 1000) transaction_sample_rate = _ConfigValue("TRANSACTION_SAMPLE_RATE", type=float, default=1.0) transaction_max_spans = _ConfigValue("TRANSACTION_MAX_SPANS", type=int, default=500) stack_trace_limit = _ConfigValue("STACK_TRACE_LIMIT", type=int, default=500) span_frames_min_duration = _ConfigValue( "SPAN_FRAMES_MIN_DURATION", default=5, validators=[ UnitValidator(r"^((?:-)?\d+)(ms|s|m)?$", r"\d+(ms|s|m)", { "ms": 1, "s": 1000, "m": 60000, None: 1 }) ], type=int, ) collect_local_variables = _ConfigValue("COLLECT_LOCAL_VARIABLES", default="errors") source_lines_error_app_frames = _ConfigValue( "SOURCE_LINES_ERROR_APP_FRAMES", type=int, default=5) source_lines_error_library_frames = _ConfigValue( "SOURCE_LINES_ERROR_LIBRARY_FRAMES", type=int, default=5) source_lines_span_app_frames = _ConfigValue("SOURCE_LINES_SPAN_APP_FRAMES", type=int, default=0) source_lines_span_library_frames = _ConfigValue( "SOURCE_LINES_SPAN_LIBRARY_FRAMES", type=int, default=0) local_var_max_length = _ConfigValue("LOCAL_VAR_MAX_LENGTH", type=int, default=200) local_var_list_max_length = _ConfigValue("LOCAL_VAR_LIST_MAX_LENGTH", type=int, default=10) local_var_dict_max_length = _ConfigValue("LOCAL_VAR_DICT_MAX_LENGTH", type=int, default=10) capture_body = _ConfigValue("CAPTURE_BODY", default="off") async_mode = _BoolConfigValue("ASYNC_MODE", default=True) instrument_django_middleware = _BoolConfigValue( "INSTRUMENT_DJANGO_MIDDLEWARE", default=True) autoinsert_django_middleware = _BoolConfigValue( "AUTOINSERT_DJANGO_MIDDLEWARE", default=True) transactions_ignore_patterns = _ListConfigValue( "TRANSACTIONS_IGNORE_PATTERNS", default=[]) service_version = _ConfigValue("SERVICE_VERSION") framework_name = _ConfigValue("FRAMEWORK_NAME", default=None) framework_version = _ConfigValue("FRAMEWORK_VERSION", default=None) global_labels = _DictConfigValue("GLOBAL_LABELS", default=None) disable_send = _BoolConfigValue("DISABLE_SEND", default=False) instrument = _BoolConfigValue("INSTRUMENT", default=True) enable_distributed_tracing = _BoolConfigValue("ENABLE_DISTRIBUTED_TRACING", default=True) capture_headers = _BoolConfigValue("CAPTURE_HEADERS", default=True) django_transaction_name_from_route = _BoolConfigValue( "DJANGO_TRANSACTION_NAME_FROM_ROUTE", default=False) disable_log_record_factory = _BoolConfigValue("DISABLE_LOG_RECORD_FACTORY", default=False) use_elastic_traceparent_header = _BoolConfigValue( "USE_ELASTIC_TRACEPARENT_HEADER", default=True)
class Config(_ConfigBase): service_name = _ConfigValue( "SERVICE_NAME", validators=[RegexValidator("^[a-zA-Z0-9 _-]+$")], required=True) environment = _ConfigValue("ENVIRONMENT", default=None) secret_token = _ConfigValue("SECRET_TOKEN") debug = _BoolConfigValue("DEBUG", default=False) server_url = _ConfigValue("SERVER_URL", default="http://localhost:8200", required=True) verify_server_cert = _BoolConfigValue("VERIFY_SERVER_CERT", default=True) include_paths = _ListConfigValue("INCLUDE_PATHS") exclude_paths = _ListConfigValue( "EXCLUDE_PATHS", default=compat.get_default_library_patters()) filter_exception_types = _ListConfigValue("FILTER_EXCEPTION_TYPES") server_timeout = _ConfigValue( "SERVER_TIMEOUT", type=float, validators=[ UnitValidator("^((?:-)?\d+)(ms|s|m)?$", "\d+(ms|s|m)", { "ms": 0.001, "s": 1, "m": 60, None: 1000 }) ], default=5, ) hostname = _ConfigValue("HOSTNAME", default=socket.gethostname()) auto_log_stacks = _BoolConfigValue("AUTO_LOG_STACKS", default=True) transport_class = _ConfigValue( "TRANSPORT_CLASS", default="elasticapm.transport.http.AsyncTransport", required=True) processors = _ListConfigValue( "PROCESSORS", default=[ "elasticapm.processors.sanitize_stacktrace_locals", "elasticapm.processors.sanitize_http_request_cookies", "elasticapm.processors.sanitize_http_response_cookies", "elasticapm.processors.sanitize_http_headers", "elasticapm.processors.sanitize_http_wsgi_env", "elasticapm.processors.sanitize_http_request_querystring", "elasticapm.processors.sanitize_http_request_body", ], ) api_request_size = _ConfigValue("API_REQUEST_SIZE", type=int, validators=[size_validator], default=750 * 1024) api_request_time = _ConfigValue("API_REQUEST_TIME", type=int, validators=[duration_validator], default=10 * 1000) transaction_sample_rate = _ConfigValue("TRANSACTION_SAMPLE_RATE", type=float, default=1.0) transaction_max_spans = _ConfigValue("TRANSACTION_MAX_SPANS", type=int, default=500) span_frames_min_duration = _ConfigValue( "SPAN_FRAMES_MIN_DURATION", default=5, validators=[ UnitValidator("^((?:-)?\d+)(ms|s|m)?$", "\d+(ms|s|m)", { "ms": 1, "s": 1000, "m": 60000, None: 1 }) ], type=int, ) collect_local_variables = _ConfigValue("COLLECT_LOCAL_VARIABLES", default="errors") source_lines_error_app_frames = _ConfigValue( "SOURCE_LINES_ERROR_APP_FRAMES", type=int, default=5) source_lines_error_library_frames = _ConfigValue( "SOURCE_LINES_ERROR_LIBRARY_FRAMES", type=int, default=5) source_lines_span_app_frames = _ConfigValue("SOURCE_LINES_SPAN_APP_FRAMES", type=int, default=0) source_lines_span_library_frames = _ConfigValue( "SOURCE_LINES_SPAN_LIBRARY_FRAMES", type=int, default=0) local_var_max_length = _ConfigValue("LOCAL_VAR_MAX_LENGTH", type=int, default=200) local_var_list_max_length = _ConfigValue("LOCAL_VAR_LIST_MAX_LENGTH", type=int, default=10) capture_body = _ConfigValue("CAPTURE_BODY", default="off") async_mode = _BoolConfigValue("ASYNC_MODE", default=True) instrument_django_middleware = _BoolConfigValue( "INSTRUMENT_DJANGO_MIDDLEWARE", default=True) transactions_ignore_patterns = _ListConfigValue( "TRANSACTIONS_IGNORE_PATTERNS", default=[]) service_version = _ConfigValue("SERVICE_VERSION") framework_name = _ConfigValue("FRAMEWORK_NAME", default=None) framework_version = _ConfigValue("FRAMEWORK_VERSION", default=None) disable_send = _BoolConfigValue("DISABLE_SEND", default=False) instrument = _BoolConfigValue("DISABLE_INSTRUMENTATION", default=True) enable_distributed_tracing = _BoolConfigValue("ENABLE_DISTRIBUTED_TRACING", default=True)