Coverage for custom_components/remote_logger/otel/const.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-10-06 00:18 +0000

1import voluptuous as vol 

2from homeassistant.const import CONF_HEADERS, CONF_HOST, CONF_PATH, CONF_PORT, CONF_TOKEN 

3from homeassistant.helpers import selector 

4 

5from custom_components.remote_logger.const import ( 

6 CONF_BATCH_MAX_SIZE, 

7 CONF_CLIENT_TIMEOUT, 

8 CONF_ENCODING, 

9 CONF_RESOURCE_ATTRIBUTES, 

10 CONF_USE_TLS, 

11 DEFAULT_BATCH_MAX_SIZE, 

12 DEFAULT_CLIENT_TIMEOUT, 

13) 

14 

15CONF_TOKEN_TYPE = "token_type" # nosec 

16TOKEN_TYPE_BEARER = "bearer" # nosec 

17TOKEN_TYPE_BASIC = "basic" # nosec 

18TOKEN_TYPE_API_KEY = "api_key" # nosec 

19TOKEN_TYPE_RAW_BASIC = "raw_basic" # nosec 

20DEFAULT_TOKEN_TYPE = TOKEN_TYPE_BEARER 

21 

22# OTLP endpoint path 

23OTLP_LOGS_PATH = "/v1/logs" 

24 

25# Severity mapping: HA log level string -> (OTLP severityNumber, OTLP severityText) 

26SEVERITY_MAP: dict[str, tuple[int, str]] = { 

27 "DEBUG": (5, "DEBUG"), 

28 "INFO": (9, "INFO"), 

29 "WARNING": (13, "WARN"), 

30 "ERROR": (17, "ERROR"), 

31 "CRITICAL": (21, "FATAL"), 

32} 

33 

34DEFAULT_SEVERITY = (9, "INFO") 

35 

36# OTel defaults 

37DEFAULT_HTTP_PORT = 4318 

38DEFAULT_GRPC_PORT = 4317 

39DEFAULT_USE_TLS = False 

40DEFAULT_RESOURCE_ATTRIBUTES = "" 

41ENCODING_JSON = "json" 

42ENCODING_PROTOBUF = "protobuf" 

43DEFAULT_ENCODING = ENCODING_PROTOBUF 

44 

45 

46# Integration metadata (used in InstrumentationScope) 

47SCOPE_NAME = "homeassistant" 

48SCOPE_VERSION = "1.0.0" 

49 

50# Default resource attribute 

51DEFAULT_SERVICE_NAME = "homeassistant.core" 

52 

53# Log record sent when validating the endpoint during configuration 

54VALIDATION_MESSAGE = "Home Assistant remote_logger configuration validation, safe to ignore" 

55VALIDATION_EVENT_NAME = "remote_logger.validation" 

56 

57OTEL_DATA_SCHEMA = vol.Schema({ 

58 vol.Required(CONF_HOST): str, 

59 vol.Optional(CONF_PORT, default=DEFAULT_HTTP_PORT): int, 

60 vol.Optional(CONF_USE_TLS, default=DEFAULT_USE_TLS): bool, 

61 vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): selector.SelectSelector( 

62 selector.SelectSelectorConfig(options=[ENCODING_JSON, ENCODING_PROTOBUF]), 

63 ), 

64 vol.Optional(CONF_BATCH_MAX_SIZE, default=DEFAULT_BATCH_MAX_SIZE): vol.All(int, vol.Range(min=1, max=10000)), 

65 vol.Optional(CONF_RESOURCE_ATTRIBUTES, default=DEFAULT_RESOURCE_ATTRIBUTES): str, 

66 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector( 

67 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY]), 

68 ), 

69 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector( 

70 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD), 

71 ), 

72 vol.Optional(CONF_HEADERS, default=[]): selector.TextSelector(selector.TextSelectorConfig(multiple=True)), 

73 vol.Optional(CONF_PATH, default=OTLP_LOGS_PATH): str, 

74 vol.Optional(CONF_CLIENT_TIMEOUT, default=DEFAULT_CLIENT_TIMEOUT): vol.All(int, vol.Range(min=1, max=300)), 

75}) 

76 

77REAUTH_OTEL_DATA_SCHEMA = vol.Schema({ 

78 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector( 

79 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY]), 

80 ), 

81 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector( 

82 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD), 

83 ), 

84})