mirror of
https://github.com/home-assistant/core.git
synced 2025-04-29 19:57:52 +00:00

* Increase websocket_api allowed peak time to 10s fixes #141624 During integration reload or startup, we can end up sending a message for each entity being created for integrations that create them from an external source (ie MQTT) because the messages come in one at a time. This can overload the loop and/or client for more than 5s. While we have done significant work to optimize for this path, we are at the limit at what we can expect clients to be able to process in the time window, so increase the time window. * adjust test
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""Websocket constants."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Awaitable, Callable
|
|
from typing import TYPE_CHECKING, Any, Final
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
if TYPE_CHECKING:
|
|
from .connection import ActiveConnection
|
|
|
|
|
|
type WebSocketCommandHandler = Callable[
|
|
[HomeAssistant, ActiveConnection, dict[str, Any]], None
|
|
]
|
|
type AsyncWebSocketCommandHandler = Callable[
|
|
[HomeAssistant, ActiveConnection, dict[str, Any]], Awaitable[None]
|
|
]
|
|
|
|
DOMAIN: Final = "websocket_api"
|
|
URL: Final = "/api/websocket"
|
|
PENDING_MSG_PEAK: Final = 1024
|
|
PENDING_MSG_PEAK_TIME: Final = 10
|
|
# Maximum number of messages that can be pending at any given time.
|
|
# This is effectively the upper limit of the number of entities
|
|
# that can fire state changes within ~1 second.
|
|
# Ideally we would use homeassistant.const.MAX_EXPECTED_ENTITY_IDS
|
|
# but since chrome will lock up with too many messages we need to
|
|
# limit it to a lower number.
|
|
MAX_PENDING_MSG: Final = 4096
|
|
|
|
# Maximum number of messages that are pending before we force
|
|
# resolve the ready future.
|
|
PENDING_MSG_MAX_FORCE_READY: Final = 256
|
|
|
|
ERR_ID_REUSE: Final = "id_reuse"
|
|
ERR_INVALID_FORMAT: Final = "invalid_format"
|
|
ERR_NOT_ALLOWED: Final = "not_allowed"
|
|
ERR_NOT_FOUND: Final = "not_found"
|
|
ERR_NOT_SUPPORTED: Final = "not_supported"
|
|
ERR_HOME_ASSISTANT_ERROR: Final = "home_assistant_error"
|
|
ERR_SERVICE_VALIDATION_ERROR: Final = "service_validation_error"
|
|
ERR_UNKNOWN_COMMAND: Final = "unknown_command"
|
|
ERR_UNKNOWN_ERROR: Final = "unknown_error"
|
|
ERR_UNAUTHORIZED: Final = "unauthorized"
|
|
ERR_TIMEOUT: Final = "timeout"
|
|
ERR_TEMPLATE_ERROR: Final = "template_error"
|
|
|
|
TYPE_RESULT: Final = "result"
|
|
|
|
|
|
# Event types
|
|
SIGNAL_WEBSOCKET_CONNECTED: Final = "websocket_connected"
|
|
SIGNAL_WEBSOCKET_DISCONNECTED: Final = "websocket_disconnected"
|
|
|
|
# Data used to store the current connection list
|
|
DATA_CONNECTIONS: Final = f"{DOMAIN}.connections"
|
|
|
|
FEATURE_COALESCE_MESSAGES = "coalesce_messages"
|