Coverage for custom_components/remote_logger/otel/const.py: 100%
25 statements
« prev ^ index » next coverage.py v7.10.6, created at 2026-04-07 04:46 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2026-04-07 04:46 +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" # noqa: S105 # nosec
16TOKEN_TYPE_BEARER = "bearer" # noqa: S105 # nosec
17TOKEN_TYPE_BASIC = "basic" # noqa: S105 # nosec
18TOKEN_TYPE_API_KEY = "api_key" # noqa: S105 # nosec
19TOKEN_TYPE_RAW_BASIC = "raw_basic" # noqa: S105 # 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"
53OTEL_DATA_SCHEMA = vol.Schema({
54 vol.Required(CONF_HOST): str,
55 vol.Optional(CONF_PORT, default=DEFAULT_HTTP_PORT): int,
56 vol.Optional(CONF_USE_TLS, default=DEFAULT_USE_TLS): bool,
57 vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): selector.SelectSelector(
58 selector.SelectSelectorConfig(options=[ENCODING_JSON, ENCODING_PROTOBUF])
59 ),
60 vol.Optional(CONF_BATCH_MAX_SIZE, default=DEFAULT_BATCH_MAX_SIZE): vol.All(int, vol.Range(min=1, max=10000)),
61 vol.Optional(CONF_RESOURCE_ATTRIBUTES, default=DEFAULT_RESOURCE_ATTRIBUTES): str,
62 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector(
63 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY])
64 ),
65 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector(
66 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD)
67 ),
68 vol.Optional(CONF_HEADERS, default=""): selector.TextSelector(selector.TextSelectorConfig(multiline=True)),
69 vol.Optional(CONF_PATH, default=OTLP_LOGS_PATH): str,
70 vol.Optional(CONF_CLIENT_TIMEOUT, default=DEFAULT_CLIENT_TIMEOUT): vol.All(int, vol.Range(min=1, max=300)),
71})
73REAUTH_OTEL_DATA_SCHEMA = vol.Schema({
74 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector(
75 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY])
76 ),
77 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector(
78 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD)
79 ),
80})