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
« 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
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)
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
22# OTLP endpoint path
23OTLP_LOGS_PATH = "/v1/logs"
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}
34DEFAULT_SEVERITY = (9, "INFO")
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
46# Integration metadata (used in InstrumentationScope)
47SCOPE_NAME = "homeassistant"
48SCOPE_VERSION = "1.0.0"
50# Default resource attribute
51DEFAULT_SERVICE_NAME = "homeassistant.core"
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"
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})
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})