From 7d33c1c113e1d6606507706caf4bb585ee89f8aa Mon Sep 17 00:00:00 2001 From: benbierens Date: Wed, 31 Jan 2024 11:52:02 -0500 Subject: [PATCH] Sets up rewarder bot container recipe --- .../CodexDiscordBotPlugin.cs | 13 +++++++ .../CoreInterfaceExtensions.cs | 5 +++ .../DiscordBotStartupConfig.cs | 20 ++++++++++ .../RewarderBotContainerRecipe.cs | 39 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 ProjectPlugins/CodexDiscordBotPlugin/RewarderBotContainerRecipe.cs diff --git a/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs b/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs index 91c38e4b..cad50c12 100644 --- a/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs +++ b/ProjectPlugins/CodexDiscordBotPlugin/CodexDiscordBotPlugin.cs @@ -35,6 +35,12 @@ namespace CodexDiscordBotPlugin return StartContainer(workflow, config); } + public RunningContainers DeployRewarder(RewarderBotStartupConfig config) + { + var workflow = tools.CreateWorkflow(); + return StartRewarderContainer(workflow, config); + } + private RunningContainers StartContainer(IStartupWorkflow workflow, DiscordBotStartupConfig config) { var startupConfig = new StartupConfig(); @@ -42,5 +48,12 @@ namespace CodexDiscordBotPlugin startupConfig.Add(config); return workflow.Start(1, new DiscordBotContainerRecipe(), startupConfig); } + + private RunningContainers StartRewarderContainer(IStartupWorkflow workflow, RewarderBotStartupConfig config) + { + var startupConfig = new StartupConfig(); + startupConfig.Add(config); + return workflow.Start(1, new RewarderBotContainerRecipe(), startupConfig); + } } } diff --git a/ProjectPlugins/CodexDiscordBotPlugin/CoreInterfaceExtensions.cs b/ProjectPlugins/CodexDiscordBotPlugin/CoreInterfaceExtensions.cs index 1c3d6733..c17cec15 100644 --- a/ProjectPlugins/CodexDiscordBotPlugin/CoreInterfaceExtensions.cs +++ b/ProjectPlugins/CodexDiscordBotPlugin/CoreInterfaceExtensions.cs @@ -10,6 +10,11 @@ namespace CodexDiscordBotPlugin return Plugin(ci).Deploy(config); } + public static RunningContainers DeployRewarderBot(this CoreInterface ci, RewarderBotStartupConfig config) + { + return Plugin(ci).DeployRewarder(config); + } + private static CodexDiscordBotPlugin Plugin(CoreInterface ci) { return ci.GetPlugin(); diff --git a/ProjectPlugins/CodexDiscordBotPlugin/DiscordBotStartupConfig.cs b/ProjectPlugins/CodexDiscordBotPlugin/DiscordBotStartupConfig.cs index 85c103f2..1e8165d2 100644 --- a/ProjectPlugins/CodexDiscordBotPlugin/DiscordBotStartupConfig.cs +++ b/ProjectPlugins/CodexDiscordBotPlugin/DiscordBotStartupConfig.cs @@ -23,6 +23,26 @@ public string? DataPath { get; set; } } + public class RewarderBotStartupConfig + { + public RewarderBotStartupConfig(string discordBotHost, int discordBotPort, TimeSpan interval, DateTime historyStartUtc, DiscordBotGethInfo gethInfo, string? dataPath) + { + DiscordBotHost = discordBotHost; + DiscordBotPort = discordBotPort; + Interval = interval; + HistoryStartUtc = historyStartUtc; + GethInfo = gethInfo; + DataPath = dataPath; + } + + public string DiscordBotHost { get; } + public int DiscordBotPort { get; } + public TimeSpan Interval { get; } + public DateTime HistoryStartUtc { get; } + public DiscordBotGethInfo GethInfo { get; } + public string? DataPath { get; set; } + } + public class DiscordBotGethInfo { public DiscordBotGethInfo(string host, int port, string privKey, string marketplaceAddress, string tokenAddress, string abi) diff --git a/ProjectPlugins/CodexDiscordBotPlugin/RewarderBotContainerRecipe.cs b/ProjectPlugins/CodexDiscordBotPlugin/RewarderBotContainerRecipe.cs new file mode 100644 index 00000000..fd5159e8 --- /dev/null +++ b/ProjectPlugins/CodexDiscordBotPlugin/RewarderBotContainerRecipe.cs @@ -0,0 +1,39 @@ +using KubernetesWorkflow.Recipe; +using KubernetesWorkflow; +using Utils; + +namespace CodexDiscordBotPlugin +{ + public class RewarderBotContainerRecipe : ContainerRecipeFactory + { + public override string AppName => "discordbot-rewarder"; + public override string Image => "codexstorage/codex-rewarderbot"; + + protected override void Initialize(StartupConfig startupConfig) + { + var config = startupConfig.Get(); + + SetSchedulingAffinity(notIn: "false"); + + AddEnvVar("DISCORDBOTHOST", config.DiscordBotHost); + AddEnvVar("DISCORDBOTPORT", config.DiscordBotPort.ToString()); + AddEnvVar("INTERVALMINUTES", config.Interval.TotalMinutes.ToString()); + var offset = new DateTimeOffset(config.HistoryStartUtc); + AddEnvVar("CHECKHISTORY", offset.ToUnixTimeSeconds().ToString()); + + var gethInfo = config.GethInfo; + AddEnvVar("GETH_HOST", gethInfo.Host); + AddEnvVar("GETH_HTTP_PORT", gethInfo.Port.ToString()); + AddEnvVar("GETH_PRIVATE_KEY", gethInfo.PrivKey); + AddEnvVar("CODEXCONTRACTS_MARKETPLACEADDRESS", gethInfo.MarketplaceAddress); + AddEnvVar("CODEXCONTRACTS_TOKENADDRESS", gethInfo.TokenAddress); + AddEnvVar("CODEXCONTRACTS_ABI", gethInfo.Abi); + + if (!string.IsNullOrEmpty(config.DataPath)) + { + AddEnvVar("DATAPATH", config.DataPath); + AddVolume(config.DataPath, 1.GB()); + } + } + } +}