From 3aa0120e3db923f7e6404af25d28b8e62748c716 Mon Sep 17 00:00:00 2001 From: Pierre Gironde Date: Sun, 4 Oct 2026 14:29:14 +0200 Subject: [PATCH] Simplify the log grouping logic --- eventsforwarder.py | 36 ++++++++++--------- smartcondition.py | 16 ++++++--- smartobject.py | 8 ++--- unit_tests/test_logger_interface_grouping.py | 17 +++++++-- virtualsensors.py | 16 ++++++--- vscode-appdaemon/README.md | 2 +- vscode-appdaemon/media/logExplorer.js | 30 ++++++++-------- vscode-appdaemon/src/logExplorer.ts | 29 +-------------- vscode-appdaemon/src/logModel.ts | 12 +++---- vscode-appdaemon/vscode-appdaemon-0.2.0.vsix | Bin 57130 -> 54973 bytes 10 files changed, 82 insertions(+), 84 deletions(-) diff --git a/eventsforwarder.py b/eventsforwarder.py index 8d7c757..96ea8b4 100644 --- a/eventsforwarder.py +++ b/eventsforwarder.py @@ -43,23 +43,25 @@ class ServiceCaller(ConditionalAction): class EventsForwarder(hass.Hass, LoggerInterface): def initialize(self): - self.initialize_logger_interface(self.get_ad_api()) - self.mute_logger(self.args.get('mute', False)) - self.forwarders = {} - self.services_caller = {} - self.event_handlers = [] - for key, block in self.args.get('forwarders', {}).items(): - try: - senders = [EventSender(self, config) - for config in block.get('events_to_send', {}).values()] - callers = [ServiceCaller(self, config) - for config in block.get('services_to_call', {}).values()] - self.forwarders[key] = senders - self.services_caller[key] = callers - self.event_handlers.append(EventHandler( - self, block['events_to_listen'], self.on_event, key)) - except ParsingException as error: - self.log_error(f"Invalid forwarder {key}: {error}") + with self.log_group("App Initialization"): + self.initialize_logger_interface(self.get_ad_api()) + self.mute_logger(self.args.get('mute', False)) + self.forwarders = {} + self.services_caller = {} + self.event_handlers = [] + for key, block in self.args.get('forwarders', {}).items(): + try: + senders = [EventSender(self, config) + for config in block.get('events_to_send', {}).values()] + callers = [ServiceCaller(self, config) + for config in block.get('services_to_call', {}).values()] + self.forwarders[key] = senders + self.services_caller[key] = callers + self.event_handlers.append(EventHandler( + self, block['events_to_listen'], self.on_event, key)) + except ParsingException as error: + self.log_error(f"Invalid forwarder {key}: {error}") + self.log_info("Initialisation completed") def on_event(self, event_name, event_data, forwarder_key): for sender in self.forwarders.get(forwarder_key, []): diff --git a/smartcondition.py b/smartcondition.py index eff2d75..4c6f5f5 100644 --- a/smartcondition.py +++ b/smartcondition.py @@ -57,7 +57,13 @@ class Evaluator(): self.__no_log_prefix = parser.parse_args('no_log_prefix',False) #as no_log_prefix is used to feedback parser error, it need to be defined first condition_name = parser.parse_args('condition_name',None,['log_prefix']) - self.__trace_name = ', '.join(map(str, condition_name)) if isinstance(condition_name, list) else str(condition_name or 'condition') + log_group = parser.parse_args('log_group',None) + if log_group is not None: + self.__log_group = str(log_group) + elif isinstance(condition_name, list): + self.__log_group = ', '.join(map(str, condition_name)) + else: + self.__log_group = str(condition_name or 'condition') if condition_name: if isinstance(condition_name,list): for name in condition_name: @@ -163,17 +169,17 @@ class Evaluator(): raise e - def __log_group(self): + def __log_group_scope(self): # SmartObject itself implements LoggerInterface, but many evaluators are # constructed with only the app as their API and no logger_interface kwarg. logger = self.__logger_interface or self.__appdaemon_api group_scope = getattr(logger, 'log_group', None) if callable(group_scope): - return group_scope('smartcondition', self.__trace_name) + return group_scope(self.__log_group) return nullcontext() def evaluate(self,log = True): - with self.__log_group(): + with self.__log_group_scope(): try: result = self.__evaluate() except EvaluationException as e: self.__log(f"{e}",level = "ERROR") @@ -503,7 +509,7 @@ class Evaluator(): self.__last_evaluation_result = new_result def __trigger_callbacks(self,trigger_reason,triggered_from_activation = False): - with self.__log_group(): + with self.__log_group_scope(): return self.__trigger_callbacks_in_group(trigger_reason, triggered_from_activation) def __trigger_callbacks_in_group(self,trigger_reason,triggered_from_activation = False): diff --git a/smartobject.py b/smartobject.py index 4cec20f..d00332c 100644 --- a/smartobject.py +++ b/smartobject.py @@ -184,16 +184,16 @@ class SmartObject(hass.Hass,LoggerInterface): # → attributes_override → dataset restore → on_initialize_smart_object() def initialize(self): self.initialize_logger_interface(self.get_ad_api()) - with self.log_group('initialization', self.name) as group: - self.log(f"Initialization started [group=initialization:{group['id']}]") + with self.log_group('App Initialization') as group: + self.log(f"Initialization started [group={group['kind']}:{group['id']}]") try: succeeded = self._initialize_smart_object() except BaseException: - self.log(f"Initialization failed [group=initialization:{group['id']}]", level='ERROR') + self.log(f"Initialization failed [group={group['kind']}:{group['id']}]", level='ERROR') raise status = 'completed' if succeeded else 'failed' level = 'INFO' if succeeded else 'ERROR' - self.log(f"Initialization {status} [group=initialization:{group['id']}]", level=level) + self.log(f"Initialization {status} [group={group['kind']}:{group['id']}]", level=level) def _initialize_smart_object(self): try: diff --git a/unit_tests/test_logger_interface_grouping.py b/unit_tests/test_logger_interface_grouping.py index 7fb4a78..4691ff4 100644 --- a/unit_tests/test_logger_interface_grouping.py +++ b/unit_tests/test_logger_interface_grouping.py @@ -78,8 +78,8 @@ class LoggerGroupingTests(unittest.TestCase): evaluator = smartcondition.Evaluator.__new__(smartcondition.Evaluator) evaluator._Evaluator__logger_interface = None evaluator._Evaluator__appdaemon_api = app - evaluator._Evaluator__trace_name = 'smart_conditions' - with evaluator._Evaluator__log_group(): + evaluator._Evaluator__log_group = 'smart_conditions' + with evaluator._Evaluator__log_group_scope(): app.log_info('Callback trigger by sensor.example(0 => 1)') app.log_info('[smart_conditions][Evaluating] Triggered by condition') marker_a = app.rows[0][1].split('[group=')[1].rstrip(']') @@ -87,6 +87,19 @@ class LoggerGroupingTests(unittest.TestCase): self.assertEqual(marker_a, marker_b) self.assertTrue(marker_a.startswith('smartcondition:')) + def test_log_group_takes_priority_over_condition_name(self): + app = FakeApp() + evaluator = smartcondition.Evaluator(app, {}, activated=False, + condition_name='condition-a', log_group='group-a') + self.assertEqual(evaluator._Evaluator__log_group, 'group-a') + self.assertEqual(evaluator._Evaluator__log_to_string('message'), '[condition-a] message') + with evaluator._Evaluator__log_group_scope() as group: + self.assertEqual(group['label'], 'group-a') + + fallback = smartcondition.Evaluator(app, {}, activated=False, + condition_name=['condition-a', 'condition-b']) + self.assertEqual(fallback._Evaluator__log_group, 'condition-a, condition-b') + def test_nested_scopes_inherit_outer_group_and_reset_after_exception(self): app = FakeApp() with app.log_group('value_selector', 'sensor.a') as outer: diff --git a/virtualsensors.py b/virtualsensors.py index 5bf9511..75a61b0 100644 --- a/virtualsensors.py +++ b/virtualsensors.py @@ -542,10 +542,18 @@ class BinarySensor(VirtualSensorBase): self.output_sensor.set_state(state = new_value) def on_sensor_change(self,prev_result,result): - if result == SmartCondition.Result.Unavailable: self.output_sensor.set_state(state = 'unavailable') - elif result == SmartCondition.Result.Succeeded: self.output_sensor.set_state(state = 'on') - elif result == SmartCondition.Result.Failed: self.output_sensor.set_state(state = 'off') - # else: Disabled means we keep the previous value + target_state = None + if result == SmartCondition.Result.Unavailable: target_state = 'unavailable' + elif result == SmartCondition.Result.Succeeded: target_state = 'on' + elif result == SmartCondition.Result.Failed: target_state = 'off' + else: target_state = None #Disabled means we keep the previous value + + if target_state != None: + self.output_sensor.set_state(state = target_state) + self.log_info(f"{self.sensor_name} = {target_state}") + else: + self.log_info(f"SmartCondition of {self.sensor_name} is disabled") + def generate_dependencies_list(self): dependencies = list() diff --git a/vscode-appdaemon/README.md b/vscode-appdaemon/README.md index 5c26a6b..f91b6cf 100644 --- a/vscode-appdaemon/README.md +++ b/vscode-appdaemon/README.md @@ -21,7 +21,7 @@ The explorer groups lines by the app name in the standard AppDaemon log format. **AD Logs** turns red when the loaded logs contain an ERROR or CRITICAL entry. **Clear logs** empties the configured log files and clears the current explorer history. -The standard AppDaemon text logs do not contain causal links or reliable initialization boundaries. The details panel will say so for ordinary entries. Existing messages that already contain trace or initialization metadata can still be grouped or linked; the explorer does not create that metadata. No AppDaemon Python changes are needed for this raw-log view. +Lines carrying the same `[group=:]` marker are grouped together, and the supplied name is shown in the explorer. Ordinary AppDaemon lines without a group marker remain individual log entries. Trace metadata can still be used for causal links where present. ## Settings diff --git a/vscode-appdaemon/media/logExplorer.js b/vscode-appdaemon/media/logExplorer.js index 1e4f27c..9121205 100644 --- a/vscode-appdaemon/media/logExplorer.js +++ b/vscode-appdaemon/media/logExplorer.js @@ -26,7 +26,7 @@ && (level === 'all' || normalLevel(e) === level) && `${e.app} ${e.entity || ''} ${e.message}`.toLowerCase().includes(q)); } - const cleanMessage = e => e.message.replace(/ \[event=[\w-]+ trace=[\w-]+\]/g, '').replace(/ \[init=[\w-]+\]/g, '').replace(/ \[group=(?:initialization|smartcondition|value_selector):[a-f0-9]{12}\]/gi, ''); + const cleanMessage = e => e.message.replace(/ \[event=[\w-]+ trace=[\w-]+\]/g, '').replace(/ \[init=[^\]]+\]/g, '').replace(/ \[group=[^\]]+:[a-f0-9]{12}\]/gi, ''); const formatTime = (entry, includeYear = false) => { if (!Number.isFinite(entry.time)) return entry.timestamp; try { @@ -68,13 +68,12 @@ }); return container; } - function blockTitle(items, groupKey) { + function blockTitle(items) { const first = items[0]; - const kind = groupKey?.startsWith('initialization:') || first.initialization_id ? 'initialization' : items.find(entry => entry.group_kind)?.group_kind; - const names = { initialization: 'Initialization', smartcondition: 'Smart condition', value_selector: 'Value selector' }; - const name = names[kind] || (items.length > 1 || first.trace_id ? 'Event' : 'Log'); - const label = kind === 'initialization' ? first.app : items.map(entry => entry.group_label || cleanMessage(entry).match(/^\[([^\]]+)\]/)?.[1]).find(Boolean) || first.entity || first.app; - return node('div', `${name} · ${label}`, 'block-title'); + const kind = items.find(entry => entry.group_kind)?.group_kind; + const name = kind || (items.length > 1 || first.trace_id ? 'Event' : 'Log'); + const label = items.map(entry => entry.group_label).find(Boolean) || first.entity || first.app; + return node('div', kind ? name : `${name} · ${label}`, 'block-title'); } function row(e) { const item = node('div', undefined, `row${selected === e.event_id ? ' selected' : ''}${recentEvents.has(e.event_id) ? ' recent-log' : ''}`); @@ -188,25 +187,24 @@ detail.querySelector('.rows')?.remove(); if (!detail.open) return; const rows = node('div', undefined, 'rows'); - const units = [], initGroups = new Map(); + const units = [], groupUnits = new Map(); logs.forEach(e => { - if (e.initialization_id) { - if (!initGroups.has(e.initialization_id)) { const unit = { id: e.initialization_id, entries: [] }; initGroups.set(e.initialization_id, unit); units.push(unit); } - initGroups.get(e.initialization_id).entries.push(e); + if (e.group_id) { + const key = `group:${e.group_id}`; + if (!groupUnits.has(key)) { const unit = { key, entries: [] }; groupUnits.set(key, unit); units.push(unit); } + groupUnits.get(key).entries.push(e); } else { - const key = e.group_id ? `group:${e.group_id}` : e.kind === 'log' && e.trace_id ? `trace:${e.trace_id}` : undefined; + const key = e.kind === 'log' && e.trace_id ? `trace:${e.trace_id}` : undefined; const previous = units[units.length - 1]; if (key && previous && !previous.id && previous.key === key) previous.entries.push(e); else units.push({ key, entries: [e] }); } }); - const startTime = unit => unit.id - ? (entries.find(e => e.app === app && e.initialization_id === unit.id && e.kind === 'initialization_started') || unit.entries[0]).time - : unit.entries[0].time; + const startTime = unit => unit.entries[0].time; units.sort((a, b) => startTime(a) - startTime(b)); if (units.length > 150) rows.append(node('div', `${units.length - 150} older rows/groups: narrow the time range or search.`, 'more')); units.slice(-150).forEach(unit => { - appendEventRows(rows, unit.entries, unit.id ? `initialization:${unit.id}` : undefined); + appendEventRows(rows, unit.entries, unit.key); }); detail.append(rows); const position = logScrollPositions.get(app); diff --git a/vscode-appdaemon/src/logExplorer.ts b/vscode-appdaemon/src/logExplorer.ts index 6b2e836..a2c93e2 100644 --- a/vscode-appdaemon/src/logExplorer.ts +++ b/vscode-appdaemon/src/logExplorer.ts @@ -223,14 +223,7 @@ export class LogExplorer implements vscode.Disposable { } private publish() { const publication = ++this.publication; - const entries = [...this.entries.values()].sort((a, b) => { - const time = a.time - b.time; - if (time) { return time; } - // Include raw app.log() lines written in the same second as initialization markers. - const priority = (entry: LogEntry) => /Initialization (?:started|completed|failed)/.test(entry.message) - ? (entry.message.includes('started') ? -1 : 1) : 0; - return priority(a) - priority(b); - }); + const entries = [...this.entries.values()].sort((a, b) => a.time - b.time); // Legacy errors duplicated across main/error logs are merged only on exact match. const seen = new Set(); const unique = entries.filter(e => { @@ -238,26 +231,6 @@ export class LogExplorer implements vscode.Disposable { if (seen.has(key)) { return false; } seen.add(key); return true; }); this.onErrorCountChanged?.(unique.filter(e => (e.kind === 'log' || e.kind.startsWith('initialization_')) && (e.level === 'ERROR' || e.level === 'CRITICAL')).length); - // Direct app.log() calls have no LoggerInterface tag. Infer their initialization - // group while an explicit per-app initialize() scope is open. - const activeInitialization = new Map(); - for (const entry of unique) { - const marker = entry.message.match(/Initialization (started|completed|failed) \[group=initialization:([a-f0-9]{12})\]/i); - if (marker?.[1] === 'started') { activeInitialization.set(entry.app, marker[2]); } - const activeId = activeInitialization.get(entry.app); - if (activeId && !entry.group_id) { - entry.group_id = activeId; - entry.group_kind = 'initialization'; - entry.initialization_id = activeId; - entry.phase = 'initialization'; - entry.group_inferred = true; - } - if (entry.group_kind === 'initialization') { - entry.initialization_id = entry.initialization_id || entry.group_id; - entry.phase = 'initialization'; - } - if (marker && (marker[1] === 'completed' || marker[1] === 'failed')) { activeInitialization.delete(entry.app); } - } const zone = vscode.workspace.getConfiguration('appdaemon').get('logTimezone', 'Europe/Berlin'); this.activeWebview?.postMessage({ type: 'entries', entries: unique, warnings: [...this.warnings], limit: 10000, timezone: zone }); void this.resolveSources(unique, publication); diff --git a/vscode-appdaemon/src/logModel.ts b/vscode-appdaemon/src/logModel.ts index 887e29e..1b1eb11 100644 --- a/vscode-appdaemon/src/logModel.ts +++ b/vscode-appdaemon/src/logModel.ts @@ -3,8 +3,8 @@ export interface LogEntry { kind: string; cause_ids: string[]; probable_cause_ids?: string[]; entity?: string; values?: Record; source?: { path: string; line: number }; - initialization_id?: string; phase?: string; status?: string; - group_id?: string; group_kind?: string; group_inferred?: boolean; + status?: string; + group_id?: string; group_kind?: string; file?: string; raw?: string; time: number; trace_id?: string; [key: string]: unknown; } @@ -38,12 +38,10 @@ export function parseLine(line: string, file: string, offset: number, zone = 'Eu } const m = line.match(/^(\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)?)\s+(DEBUG|INFO|WARNING|ERROR|CRITICAL)\s+([^:]+):\s?(.*)$/); if (!m) { return undefined; } - const init = m[4].match(/\[init=([\w-]+)\]/); - const group = m[4].match(/\[group=(initialization|smartcondition|value_selector):([a-f0-9]{12})\]/i); + const group = m[4].match(/\[group=([^\]\r\n]+):([a-f0-9]{12})\]/i); const id = m[4].match(/\[event=([\w-]+) trace=([\w-]+)\]/); - const groupKind = group?.[1]?.toLowerCase(); - const initializationId = groupKind === 'initialization' ? group?.[2] : init?.[1]; - return { event_id: id?.[1] || `${file}:${offset}`, trace_id: id?.[2], initialization_id: initializationId, phase: initializationId ? 'initialization' : undefined, group_id: group?.[2], group_kind: groupKind, timestamp: m[1], time: rawTime(m[1], zone), app: m[3].trim(), level: m[2], message: m[4], kind: 'log', cause_ids: [], file, raw: line }; + const groupKind = group?.[1]?.trim(); + return { event_id: id?.[1] || `${file}:${offset}`, trace_id: id?.[2], group_id: group?.[2], group_kind: groupKind, timestamp: m[1], time: rawTime(m[1], zone), app: m[3].trim(), level: m[2], message: m[4], kind: 'log', cause_ids: [], file, raw: line }; } /** Preserve valid UTF-8 spans, including files containing mixed legacy bytes. */ diff --git a/vscode-appdaemon/vscode-appdaemon-0.2.0.vsix b/vscode-appdaemon/vscode-appdaemon-0.2.0.vsix index 36c94e5a571ec916050e49c9e0b0aca5053970c0..cbdadbf4c7e24bc1de71411e75428fab69ec80c0 100644 GIT binary patch delta 23849 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 delta 26073 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