From 20f36e351069e95d84075bd5d5df1928c88188a5 Mon Sep 17 00:00:00 2001 From: Oliver Kieselbach Date: Fri, 6 Mar 2026 18:45:45 +0100 Subject: [PATCH] added patternid to ImeLogTracker events --- .../EnrollmentTracker.EventHandlers.cs | 40 +++++++++++++------ .../Tracking/ImeLogTracker.LogProcessing.cs | 1 + .../Monitoring/Tracking/ImeLogTracker.cs | 3 ++ .../AutopilotMonitor.Agent/buildcounter.txt | 2 +- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/EnrollmentTracker.EventHandlers.cs b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/EnrollmentTracker.EventHandlers.cs index 5dd461d7..7fa30f8d 100644 --- a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/EnrollmentTracker.EventHandlers.cs +++ b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/EnrollmentTracker.EventHandlers.cs @@ -13,6 +13,22 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking /// public partial class EnrollmentTracker { + /// + /// Wraps _emitEvent and automatically injects the current ImeLogTracker patternId into event Data. + /// Use this for all events emitted from ImeLogTracker callback handlers. + /// + private void EmitImeTrackerEvent(EnrollmentEvent evt) + { + var patternId = _imeLogTracker?.LastMatchedPatternId; + if (!string.IsNullOrEmpty(patternId)) + { + if (evt.Data == null) + evt.Data = new Dictionary(); + evt.Data["patternId"] = patternId; + } + _emitEvent(evt); + } + private void HandleEspPhaseChanged(string phase) { // WDP (v2) has no ESP - skip ESP phase handling entirely @@ -58,7 +74,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking if (string.Equals(phase, "AccountSetup", StringComparison.OrdinalIgnoreCase)) enrollmentPhase = EnrollmentPhase.AccountSetup; - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -89,7 +105,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking private void HandleImeAgentVersion(string version) { - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -123,7 +139,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking // Switch from DeviceSetup to AppsDevice _logger.Info($"EnrollmentTracker: First app activity detected during DeviceSetup, switching to AppsDevice phase"); _hasAutoSwitchedToAppsPhase = true; - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -140,7 +156,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking // Switch from AccountSetup to AppsUser _logger.Info($"EnrollmentTracker: First app activity detected during AccountSetup, switching to AppsUser phase"); _hasAutoSwitchedToAppsPhase = true; - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -174,7 +190,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking // Skip if no real download data (bytesTotal too small or zero) if (app.BytesTotal > 1024) // At least 1 KB to be a real download { - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -202,7 +218,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking case AppInstallationState.Installed: eventType = "app_install_completed"; // Emit download_progress event for download manager (shows as completed) - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -226,7 +242,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking eventType = "app_install_failed"; severity = EventSeverity.Error; // Emit download_progress event for download manager (shows as failed) - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -256,7 +272,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking if (newState == AppInstallationState.Error && !string.IsNullOrEmpty(app.ErrorDetail)) message = $"{app.Name ?? app.Id}: {app.ErrorDetail}"; - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -307,7 +323,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking var phase = EnrollmentPhase.Unknown; // Dedicated do_telemetry event for backend aggregation - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -320,7 +336,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking }); // Also emit download_progress so the UI picks up DO stats - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -384,7 +400,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking if (!string.IsNullOrEmpty(script.ScriptPart)) data["scriptPart"] = script.ScriptPart; - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, @@ -426,7 +442,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking _logger.Info("EnrollmentTracker: Windows Hello policy is configured but provisioning has not completed yet."); _logger.Info("EnrollmentTracker: Waiting for Hello provisioning to finish before marking enrollment as complete."); - _emitEvent(new EnrollmentEvent + EmitImeTrackerEvent(new EnrollmentEvent { SessionId = _sessionId, TenantId = _tenantId, diff --git a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.LogProcessing.cs b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.LogProcessing.cs index b2126968..f14ac336 100644 --- a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.LogProcessing.cs +++ b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.LogProcessing.cs @@ -113,6 +113,7 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking private void HandlePatternMatch(CompiledPattern pattern, Match match, string message) { + LastMatchedPatternId = pattern.PatternId; try { var id = match.Groups["id"]?.Value; diff --git a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.cs b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.cs index 825b7e45..f67d7559 100644 --- a/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.cs +++ b/src/Agent/AutopilotMonitor.Agent.Core/Monitoring/Tracking/ImeLogTracker.cs @@ -101,6 +101,9 @@ namespace AutopilotMonitor.Agent.Core.Monitoring.Tracking private string _lastPlatformScriptPolicyId; private const int MaxScriptOutputLength = 2048; + // Set synchronously during HandlePatternMatch so callbacks can read it + public string LastMatchedPatternId { get; private set; } + // Callbacks to EnrollmentTracker public Action OnEspPhaseChanged { get; set; } public Action OnImeAgentVersion { get; set; } diff --git a/src/Agent/AutopilotMonitor.Agent/buildcounter.txt b/src/Agent/AutopilotMonitor.Agent/buildcounter.txt index c9716b72..6cf44528 100644 --- a/src/Agent/AutopilotMonitor.Agent/buildcounter.txt +++ b/src/Agent/AutopilotMonitor.Agent/buildcounter.txt @@ -1 +1 @@ -284 +285