From fa1b560a917a1e457a3f822ab4b232d8e1c2f0dc Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 21 May 2024 12:58:17 +0200 Subject: [PATCH] Adds waiting for debug-mode start message --- .../CodexDiscordBotPlugin.cs | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs b/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs index f347805a..b2bb5973 100644 --- a/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs +++ b/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs @@ -1,11 +1,13 @@ using Core; using KubernetesWorkflow; using KubernetesWorkflow.Types; +using Utils; namespace CodexDiscordBotPlugin { public class CodexDiscordBotPlugin : IProjectPlugin, IHasLogPrefix, IHasMetadata { + private const string ExpectedStartupMessage = "Debug option is set. Discord connection disabled!"; private readonly IPluginTools tools; public CodexDiscordBotPlugin(IPluginTools tools) @@ -46,7 +48,9 @@ namespace CodexDiscordBotPlugin var startupConfig = new StartupConfig(); startupConfig.NameOverride = config.Name; startupConfig.Add(config); - return workflow.Start(1, new DiscordBotContainerRecipe(), startupConfig).WaitForOnline(); + var pod = workflow.Start(1, new DiscordBotContainerRecipe(), startupConfig).WaitForOnline(); + WaitForStartupMessage(workflow, pod); + return pod; } private RunningPod StartRewarderContainer(IStartupWorkflow workflow, RewarderBotStartupConfig config) @@ -55,5 +59,44 @@ namespace CodexDiscordBotPlugin startupConfig.Add(config); return workflow.Start(1, new RewarderBotContainerRecipe(), startupConfig).WaitForOnline(); } + + private void WaitForStartupMessage(IStartupWorkflow workflow, RunningPod pod) + { + var finder = new LogLineFinder(ExpectedStartupMessage, workflow); + Time.WaitUntil(() => + { + finder.FindLine(pod); + return finder.Found; + }, nameof(WaitForStartupMessage)); + } + + public class LogLineFinder : LogHandler + { + private readonly string message; + private readonly IStartupWorkflow workflow; + + public LogLineFinder(string message, IStartupWorkflow workflow) + { + this.message = message; + this.workflow = workflow; + } + + public void FindLine(RunningPod pod) + { + Found = false; + foreach (var c in pod.Containers) + { + workflow.DownloadContainerLog(c, this); + if (Found) return; + } + } + + public bool Found { get; private set; } + + protected override void ProcessLine(string line) + { + if (!Found && line.Contains(message)) Found = true; + } + } } }