Add max_exceeded log level option to automations & scripts (#39448)
This commit is contained in:
parent
603707aa85
commit
4486251382
4 changed files with 75 additions and 2 deletions
|
@ -24,6 +24,7 @@ import voluptuous as vol
|
|||
|
||||
from homeassistant import exceptions
|
||||
import homeassistant.components.device_automation as device_automation
|
||||
from homeassistant.components.logger import LOGSEVERITY
|
||||
import homeassistant.components.scene as scene
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID,
|
||||
|
@ -88,6 +89,10 @@ DEFAULT_SCRIPT_MODE = SCRIPT_MODE_SINGLE
|
|||
CONF_MAX = "max"
|
||||
DEFAULT_MAX = 10
|
||||
|
||||
CONF_MAX_EXCEEDED = "max_exceeded"
|
||||
_MAX_EXCEEDED_CHOICES = list(LOGSEVERITY) + ["SILENT"]
|
||||
DEFAULT_MAX_EXCEEDED = "WARNING"
|
||||
|
||||
ATTR_CUR = "current"
|
||||
ATTR_MAX = "max"
|
||||
ATTR_MODE = "mode"
|
||||
|
@ -113,6 +118,9 @@ def make_script_schema(schema, default_script_mode, extra=vol.PREVENT_EXTRA):
|
|||
vol.Optional(CONF_MAX, default=DEFAULT_MAX): vol.All(
|
||||
vol.Coerce(int), vol.Range(min=2)
|
||||
),
|
||||
vol.Optional(CONF_MAX_EXCEEDED, default=DEFAULT_MAX_EXCEEDED): vol.All(
|
||||
vol.Upper, vol.In(_MAX_EXCEEDED_CHOICES)
|
||||
),
|
||||
},
|
||||
extra=extra,
|
||||
)
|
||||
|
@ -710,6 +718,7 @@ class Script:
|
|||
change_listener: Optional[Callable[..., Any]] = None,
|
||||
script_mode: str = DEFAULT_SCRIPT_MODE,
|
||||
max_runs: int = DEFAULT_MAX,
|
||||
max_exceeded: str = DEFAULT_MAX_EXCEEDED,
|
||||
logger: Optional[logging.Logger] = None,
|
||||
log_exceptions: bool = True,
|
||||
top_level: bool = True,
|
||||
|
@ -743,6 +752,7 @@ class Script:
|
|||
|
||||
self._runs: List[_ScriptRun] = []
|
||||
self.max_runs = max_runs
|
||||
self._max_exceeded = max_exceeded
|
||||
if script_mode == SCRIPT_MODE_QUEUED:
|
||||
self._queue_lck = asyncio.Lock()
|
||||
self._config_cache: Dict[Set[Tuple], Callable[..., bool]] = {}
|
||||
|
@ -871,13 +881,18 @@ class Script:
|
|||
|
||||
if self.is_running:
|
||||
if self.script_mode == SCRIPT_MODE_SINGLE:
|
||||
self._log("Already running", level=logging.WARNING)
|
||||
if self._max_exceeded != "SILENT":
|
||||
self._log("Already running", level=LOGSEVERITY[self._max_exceeded])
|
||||
return
|
||||
if self.script_mode == SCRIPT_MODE_RESTART:
|
||||
self._log("Restarting")
|
||||
await self.async_stop(update_state=False)
|
||||
elif len(self._runs) == self.max_runs:
|
||||
self._log("Maximum number of runs exceeded", level=logging.WARNING)
|
||||
if self._max_exceeded != "SILENT":
|
||||
self._log(
|
||||
"Maximum number of runs exceeded",
|
||||
level=LOGSEVERITY[self._max_exceeded],
|
||||
)
|
||||
return
|
||||
|
||||
# If this is a top level Script then make a copy of the variables in case they
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue