From fb4d520ba4a8666f41c0602fc554fc0fe559278a Mon Sep 17 00:00:00 2001 From: benbierens Date: Fri, 26 Jul 2024 10:56:22 +0200 Subject: [PATCH] Debugging transcripts for all tests --- .../OverwatchSupport/CodexTranscriptWriter.cs | 12 ++++++++- Tools/OverwatchTranscript/Model.cs | 10 ++++++-- Tools/OverwatchTranscript/TranscriptReader.cs | 22 ++++++++++------ Tools/OverwatchTranscript/TranscriptWriter.cs | 25 +++++++++++++++---- 4 files changed, 54 insertions(+), 15 deletions(-) diff --git a/ProjectPlugins/CodexPlugin/OverwatchSupport/CodexTranscriptWriter.cs b/ProjectPlugins/CodexPlugin/OverwatchSupport/CodexTranscriptWriter.cs index 6388680b..a357d22b 100644 --- a/ProjectPlugins/CodexPlugin/OverwatchSupport/CodexTranscriptWriter.cs +++ b/ProjectPlugins/CodexPlugin/OverwatchSupport/CodexTranscriptWriter.cs @@ -38,7 +38,12 @@ namespace CodexPlugin.OverwatchSupport foreach (var log in downloadedLogs) { writer.IncludeArtifact(log.GetFilepath()); - converter.ProcessLog(log); + // Not all of these logs are necessarily Codex logs. + // Check, and process only the Codex ones. + if (IsCodexLog(log)) + { + converter.ProcessLog(log); + } } } @@ -54,6 +59,11 @@ namespace CodexPlugin.OverwatchSupport } }); } + + private bool IsCodexLog(IDownloadedLog log) + { + return log.GetLinesContaining("Run Codex node").Any(); + } } public class CodexNodeTranscriptWriter : ICodexNodeHooks diff --git a/Tools/OverwatchTranscript/Model.cs b/Tools/OverwatchTranscript/Model.cs index 7130cc22..233b7f68 100644 --- a/Tools/OverwatchTranscript/Model.cs +++ b/Tools/OverwatchTranscript/Model.cs @@ -4,7 +4,7 @@ public class OverwatchTranscript { public OverwatchHeader Header { get; set; } = new(); - public OverwatchEvent[] Events { get; set; } = Array.Empty(); + public OverwatchMoment[] Moments { get; set; } = Array.Empty(); } [Serializable] @@ -21,9 +21,15 @@ } [Serializable] - public class OverwatchEvent + public class OverwatchMoment { public DateTime Utc { get; set; } + public OverwatchEvent[] Events { get; set; } = Array.Empty(); + } + + [Serializable] + public class OverwatchEvent + { public string Type { get; set; } = string.Empty; public string Payload { get; set; } = string.Empty; } diff --git a/Tools/OverwatchTranscript/TranscriptReader.cs b/Tools/OverwatchTranscript/TranscriptReader.cs index fd0f8f2c..85da3533 100644 --- a/Tools/OverwatchTranscript/TranscriptReader.cs +++ b/Tools/OverwatchTranscript/TranscriptReader.cs @@ -18,7 +18,7 @@ namespace OverwatchTranscript private readonly Dictionary> handlers = new Dictionary>(); private readonly string workingDir; private OverwatchTranscript model = null!; - private int eventIndex = 0; + private int momentIndex = 0; private bool closed; public TranscriptReader(string workingDir, string inputFilename) @@ -56,12 +56,12 @@ namespace OverwatchTranscript public void Next() { CheckClosed(); - if (eventIndex >= model.Events.Length) return; + if (momentIndex >= model.Moments.Length) return; - var @event = model.Events[eventIndex]; - eventIndex++; + var moment = model.Moments[momentIndex]; + momentIndex++; - PlayEvent(@event); + PlayMoment(moment); } public void Close() @@ -71,12 +71,20 @@ namespace OverwatchTranscript closed = true; } - private void PlayEvent(OverwatchEvent @event) + private void PlayMoment(OverwatchMoment moment) + { + foreach (var @event in moment.Events) + { + PlayEvent(moment.Utc, @event); + } + } + + private void PlayEvent(DateTime utc, OverwatchEvent @event) { if (!handlers.ContainsKey(@event.Type)) return; var handler = handlers[@event.Type]; - handler(@event.Utc, @event.Payload); + handler(utc, @event.Payload); } private void LoadModel(string inputFilename) diff --git a/Tools/OverwatchTranscript/TranscriptWriter.cs b/Tools/OverwatchTranscript/TranscriptWriter.cs index 95dafff8..d7f99e32 100644 --- a/Tools/OverwatchTranscript/TranscriptWriter.cs +++ b/Tools/OverwatchTranscript/TranscriptWriter.cs @@ -16,7 +16,7 @@ namespace OverwatchTranscript private readonly string transcriptFile; private readonly string artifactsFolder; private readonly Dictionary header = new Dictionary(); - private readonly SortedList buffer = new SortedList(); + private readonly SortedList> buffer = new SortedList>(); private readonly string workingDir; private bool closed; @@ -37,12 +37,20 @@ namespace OverwatchTranscript var typeName = payload.GetType().FullName; if (string.IsNullOrEmpty(typeName)) throw new Exception("Empty typename for payload"); - buffer.Add(utc, new OverwatchEvent + var newEvent = new OverwatchEvent { - Utc = utc, Type = typeName, Payload = JsonConvert.SerializeObject(payload) - }); + }; + + if (buffer.ContainsKey(utc)) + { + buffer[utc].Add(newEvent); + } + else + { + buffer.Add(utc, new List { newEvent }); + } } public void AddHeader(string key, object value) @@ -78,7 +86,14 @@ namespace OverwatchTranscript }; }).ToArray() }, - Events = buffer.Values.ToArray() + Moments = buffer.Select(p => + { + return new OverwatchMoment + { + Utc = p.Key, + Events = p.Value.ToArray() + }; + }).ToArray() }; header.Clear();