From 5fc0359e042304420ffc9cf0936afed1c2ff492d Mon Sep 17 00:00:00 2001 From: "Adam R. Grey" Date: Fri, 3 Sep 2021 04:22:51 -0400 Subject: [PATCH] yt handler checks just need to be issued, and events unsubscribed --- HumanCommunication.cs | 16 +++++---- schedulable/Show.cs | 5 ++- showHandlers/ShowHandler.cs | 1 - showHandlers/TwitchStreamHandler.cs | 1 - showHandlers/YoutubeHandler.cs | 56 +++++++++++++++++++---------- 5 files changed, 52 insertions(+), 27 deletions(-) diff --git a/HumanCommunication.cs b/HumanCommunication.cs index a9c14d8..b97db8c 100644 --- a/HumanCommunication.cs +++ b/HumanCommunication.cs @@ -41,14 +41,18 @@ namespace Director { Console.WriteLine($"[{DateTime.Now.ToLongTimeString()}] [{logLevel.ToString()}] {message}"); - var httpWebRequest = (HttpWebRequest)WebRequest.Create(call_for_humans_discord_webhook); - httpWebRequest.ContentType = "application/json"; - httpWebRequest.Method = "POST"; - using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) + //if(logLevel >= LogLevel.Warning && false) + if(false) //TODO: re-enable { - streamWriter.Write($"{{\"content\":\"[{DateTime.Now.ToLongTimeString()}] [{logLevel.ToString()}] {message}\"}}"); + var httpWebRequest = (HttpWebRequest)WebRequest.Create(call_for_humans_discord_webhook); + httpWebRequest.ContentType = "application/json"; + httpWebRequest.Method = "POST"; + using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) + { + streamWriter.Write($"{{\"content\":\"[{DateTime.Now.ToLongTimeString()}] [{logLevel.ToString()}] {message}\"}}"); + } + httpWebRequest.GetResponse(); } - httpWebRequest.GetResponse(); } public enum LogLevel { Trace, Verbose, Info, Warning, Error, Showstopper } } diff --git a/schedulable/Show.cs b/schedulable/Show.cs index 632e649..a5fca75 100644 --- a/schedulable/Show.cs +++ b/schedulable/Show.cs @@ -29,9 +29,12 @@ namespace Schedulable.Show { public string cmd { get; set; } public string args { get; set; } + public TimeSpan leadTime { get; set; } } - public class CommandLineCheck : CommandLine + public class CommandLineCheck { + public string cmd { get; set; } + public string args { get; set; } public string target { get; set; } } #endregion diff --git a/showHandlers/ShowHandler.cs b/showHandlers/ShowHandler.cs index a214784..39b64c6 100644 --- a/showHandlers/ShowHandler.cs +++ b/showHandlers/ShowHandler.cs @@ -5,7 +5,6 @@ namespace ShowHandlers { public abstract class ShowHandler { - protected abstract TimeSpan AgentsRespondingBuffer { get; } public abstract void Handle(iCalHoopJumping.CalendarOccurrence evt); } } \ No newline at end of file diff --git a/showHandlers/TwitchStreamHandler.cs b/showHandlers/TwitchStreamHandler.cs index f211bbb..7b8761c 100644 --- a/showHandlers/TwitchStreamHandler.cs +++ b/showHandlers/TwitchStreamHandler.cs @@ -5,7 +5,6 @@ namespace ShowHandlers { public class TwitchStreamHandler : ShowHandler { - protected override TimeSpan AgentsRespondingBuffer { get { return TimeSpan.FromHours(1); } } public override void Handle(iCalHoopJumping.CalendarOccurrence evt) { Console.WriteLine("I am a twitch stream handler, it falls to me to..."); diff --git a/showHandlers/YoutubeHandler.cs b/showHandlers/YoutubeHandler.cs index 6bf338f..cccc812 100644 --- a/showHandlers/YoutubeHandler.cs +++ b/showHandlers/YoutubeHandler.cs @@ -19,15 +19,12 @@ namespace ShowHandlers private Dictionary checksProgress = new Dictionary(); private readonly AutoResetEvent checkSignal = new AutoResetEvent(false); - protected override TimeSpan AgentsRespondingBuffer { get { return TimeSpan.FromHours(1); } } - public override void Handle(iCalHoopJumping.CalendarOccurrence evt) { Console.WriteLine($"begin youtube handler. current time {DateTime.Now.ToLongTimeString()}"); Console.WriteLine(JsonConvert.SerializeObject(evt)); var ytConfig = File.ReadAllText(Program.conf.show_template_yt_release); config = JsonConvert.DeserializeObject(ytConfig); - config.PreShow.AgentsNeeded = config.PreShow.AgentsNeeded.Select(s => s.ToLower()).ToList(); Task.Run(() => PreShow(evt)); Console.WriteLine("kicked off the pre-show"); if (evt.OccurrenceStart > DateTime.Now) @@ -44,12 +41,21 @@ namespace ShowHandlers protected void PreShow(iCalHoopJumping.CalendarOccurrence evt) { Console.WriteLine($"it's the pre-show, showtime at: {evt.OccurrenceStart}"); + config.PreShow.AgentsNeeded = config.PreShow.AgentsNeeded.Select(s => s.ToLower()).ToList(); - preShow_GetAgents(evt); - preShow_RunChecks(evt); + var commandLeadNeeded = TimeSpan.FromMinutes(15); + foreach(var cl in config.PreShow.Commands) + { + if(cl.leadTime > commandLeadNeeded){ + commandLeadNeeded = cl.leadTime; + } + } + + preShow_GetAgents(evt, commandLeadNeeded + TimeSpan.FromMinutes(10)); + preShow_RunChecks(evt, commandLeadNeeded); preShow_RunCommands(evt); } - protected void preShow_GetAgents(iCalHoopJumping.CalendarOccurrence evt) + protected void preShow_GetAgents(iCalHoopJumping.CalendarOccurrence evt, TimeSpan leadNeeded) { Console.WriteLine($"preshow agents needed: {string.Join(", ", config.PreShow.AgentsNeeded)}"); agentsPresent.Clear(); @@ -59,8 +65,8 @@ namespace ShowHandlers //Telefranz.Instance.ProduceMessage(new silver_messages.global.sound_off()); while (config.PreShow.AgentsNeeded.Where(ap => !agentsPresent.Contains(ap))?.Count() > 0) { - checkSignal.WaitOne(TimeSpan.FromMinutes(1)); - if(DateTime.Now > evt.OccurrenceStart - AgentsRespondingBuffer) + checkSignal.WaitOne(TimeSpan.FromSeconds(15)); + if(DateTime.Now > evt.OccurrenceStart - leadNeeded) { var miaAgents = string.Join(", ", config.PreShow.AgentsNeeded.Where(ap => !agentsPresent.Contains(ap))); HumanCommunication.Instance.Say($"Youtube handler getting antsy and going forward. mia agents: {miaAgents}", @@ -70,27 +76,41 @@ namespace ShowHandlers } Console.WriteLine("going forward"); } - protected void preShow_RunChecks(iCalHoopJumping.CalendarOccurrence evt) + protected void preShow_RunChecks(iCalHoopJumping.CalendarOccurrence evt, TimeSpan leadNeeded) { Console.WriteLine("pre show: run checks:"); - //TODO checksProgress.Clear(); var argsList = new List() { JsonConvert.SerializeObject(evt) }; //Telefranz.Instance.addHandler() foreach (var c in config.PreShow.Checks) { checksProgress.Add(c.cmd, false); - Telefranz.Instance.ProduceMessage(new silver_messages.directorial.execute_check() + } + Action issueChecks = () => { + foreach (var checkCmd in checksProgress.Where(cp => cp.Value == false).Select(kvp => kvp.Key)) { - check = c.cmd, - args = argsList.Append(c.args).ToList() - }); - } - while (true) + var check = config.PreShow.Checks.First(clc => clc.cmd == checkCmd); + // Telefranz.Instance.ProduceMessage(new silver_messages.directorial.execute_check() + // { + // check = check.cmd, + // args = argsList.Append(check.args).ToList() + // }); + } + }; + issueChecks(); + while (checksProgress.ContainsValue(false)) { - checkSignal.WaitOne(TimeSpan.FromSeconds(45)); - + checkSignal.WaitOne(TimeSpan.FromSeconds(15)); + if(DateTime.Now > evt.OccurrenceStart - leadNeeded) + { + var stillFailing = string.Join(", ", checksProgress.Where(cp => cp.Value == false).Select(cp => cp.Key)); + HumanCommunication.Instance.Say($"Youtube handler getting antsy and going forward. checks still failing: {stillFailing}", + HumanCommunication.LogLevel.Error); + break; + } + issueChecks(); } + Console.WriteLine("going forward"); } protected void preShow_RunCommands(iCalHoopJumping.CalendarOccurrence evt) {