debugging reward api

This commit is contained in:
benbierens 2024-02-19 09:11:36 +01:00
parent dd5baeda46
commit 3c210f96fc
No known key found for this signature in database
GPG Key ID: 877D2C2E09A22F3A
8 changed files with 56 additions and 63 deletions

View File

@ -9,6 +9,8 @@ namespace CodexDiscordBotPlugin
public override string AppName => "discordbot-bibliotech"; public override string AppName => "discordbot-bibliotech";
public override string Image => "thatbenbierens/codex-discordbot:initial"; public override string Image => "thatbenbierens/codex-discordbot:initial";
public static string RewardsPort = "bot_rewards_port";
protected override void Initialize(StartupConfig startupConfig) protected override void Initialize(StartupConfig startupConfig)
{ {
var config = startupConfig.Get<DiscordBotStartupConfig>(); var config = startupConfig.Get<DiscordBotStartupConfig>();
@ -19,6 +21,7 @@ namespace CodexDiscordBotPlugin
AddEnvVar("SERVERNAME", config.ServerName); AddEnvVar("SERVERNAME", config.ServerName);
AddEnvVar("ADMINROLE", config.AdminRoleName); AddEnvVar("ADMINROLE", config.AdminRoleName);
AddEnvVar("ADMINCHANNELNAME", config.AdminChannelName); AddEnvVar("ADMINCHANNELNAME", config.AdminChannelName);
AddEnvVar("REWARDSCHANNELNAME", config.RewardChannelName);
AddEnvVar("KUBECONFIG", "/opt/kubeconfig.yaml"); AddEnvVar("KUBECONFIG", "/opt/kubeconfig.yaml");
AddEnvVar("KUBENAMESPACE", config.KubeNamespace); AddEnvVar("KUBENAMESPACE", config.KubeNamespace);
@ -30,6 +33,8 @@ namespace CodexDiscordBotPlugin
AddEnvVar("CODEXCONTRACTS_TOKENADDRESS", gethInfo.TokenAddress); AddEnvVar("CODEXCONTRACTS_TOKENADDRESS", gethInfo.TokenAddress);
AddEnvVar("CODEXCONTRACTS_ABI", gethInfo.Abi); AddEnvVar("CODEXCONTRACTS_ABI", gethInfo.Abi);
AddInternalPortAndVar("REWARDAPIPORT", RewardsPort);
if (!string.IsNullOrEmpty(config.DataPath)) if (!string.IsNullOrEmpty(config.DataPath))
{ {
AddEnvVar("DATAPATH", config.DataPath); AddEnvVar("DATAPATH", config.DataPath);

View File

@ -2,7 +2,7 @@
{ {
public class DiscordBotStartupConfig public class DiscordBotStartupConfig
{ {
public DiscordBotStartupConfig(string name, string token, string serverName, string adminRoleName, string adminChannelName, string kubeNamespace, DiscordBotGethInfo gethInfo) public DiscordBotStartupConfig(string name, string token, string serverName, string adminRoleName, string adminChannelName, string kubeNamespace, DiscordBotGethInfo gethInfo, string rewardChannelName)
{ {
Name = name; Name = name;
Token = token; Token = token;
@ -11,6 +11,7 @@
AdminChannelName = adminChannelName; AdminChannelName = adminChannelName;
KubeNamespace = kubeNamespace; KubeNamespace = kubeNamespace;
GethInfo = gethInfo; GethInfo = gethInfo;
RewardChannelName = rewardChannelName;
} }
public string Name { get; } public string Name { get; }
@ -18,6 +19,7 @@
public string ServerName { get; } public string ServerName { get; }
public string AdminRoleName { get; } public string AdminRoleName { get; }
public string AdminChannelName { get; } public string AdminChannelName { get; }
public string RewardChannelName { get; }
public string KubeNamespace { get; } public string KubeNamespace { get; }
public DiscordBotGethInfo GethInfo { get; } public DiscordBotGethInfo GethInfo { get; }
public string? DataPath { get; set; } public string? DataPath { get; set; }
@ -25,7 +27,7 @@
public class RewarderBotStartupConfig public class RewarderBotStartupConfig
{ {
public RewarderBotStartupConfig(string discordBotHost, int discordBotPort, TimeSpan interval, DateTime historyStartUtc, DiscordBotGethInfo gethInfo, string? dataPath) public RewarderBotStartupConfig(string discordBotHost, int discordBotPort, string interval, DateTime historyStartUtc, DiscordBotGethInfo gethInfo, string? dataPath)
{ {
DiscordBotHost = discordBotHost; DiscordBotHost = discordBotHost;
DiscordBotPort = discordBotPort; DiscordBotPort = discordBotPort;
@ -37,7 +39,7 @@
public string DiscordBotHost { get; } public string DiscordBotHost { get; }
public int DiscordBotPort { get; } public int DiscordBotPort { get; }
public TimeSpan Interval { get; } public string Interval { get; }
public DateTime HistoryStartUtc { get; } public DateTime HistoryStartUtc { get; }
public DiscordBotGethInfo GethInfo { get; } public DiscordBotGethInfo GethInfo { get; }
public string? DataPath { get; set; } public string? DataPath { get; set; }

View File

@ -17,7 +17,7 @@ namespace CodexDiscordBotPlugin
AddEnvVar("DISCORDBOTHOST", config.DiscordBotHost); AddEnvVar("DISCORDBOTHOST", config.DiscordBotHost);
AddEnvVar("DISCORDBOTPORT", config.DiscordBotPort.ToString()); AddEnvVar("DISCORDBOTPORT", config.DiscordBotPort.ToString());
AddEnvVar("INTERVALMINUTES", config.Interval.TotalMinutes.ToString()); AddEnvVar("INTERVALMINUTES", config.Interval);
var offset = new DateTimeOffset(config.HistoryStartUtc); var offset = new DateTimeOffset(config.HistoryStartUtc);
AddEnvVar("CHECKHISTORY", offset.ToUnixTimeSeconds().ToString()); AddEnvVar("CHECKHISTORY", offset.ToUnixTimeSeconds().ToString());

View File

@ -1,8 +1,8 @@
using CodexContractsPlugin; using CodexContractsPlugin;
using CodexDiscordBotPlugin;
using CodexPlugin; using CodexPlugin;
using DistTestCore; using DistTestCore;
using GethPlugin; using GethPlugin;
using MetricsPlugin;
using Nethereum.Hex.HexConvertors.Extensions; using Nethereum.Hex.HexConvertors.Extensions;
using NUnit.Framework; using NUnit.Framework;
using Utils; using Utils;
@ -13,44 +13,7 @@ namespace CodexTests.BasicTests
public class ExampleTests : CodexDistTest public class ExampleTests : CodexDistTest
{ {
[Test] [Test]
public void CodexLogExample() public void BotRewardTest()
{
var primary = AddCodex(s => s.WithLogLevel(CodexLogLevel.Trace, new CodexLogCustomTopics(CodexLogLevel.Warn, CodexLogLevel.Warn)));
var cid = primary.UploadFile(GenerateTestFile(5.MB()));
var content = primary.LocalFiles();
CollectionAssert.Contains(content.Select(c => c.Cid), cid);
var log = Ci.DownloadLog(primary);
log.AssertLogContains("Uploaded file");
}
[Test]
public void TwoMetricsExample()
{
var group = AddCodex(2, s => s.EnableMetrics());
var group2 = AddCodex(2, s => s.EnableMetrics());
var primary = group[0];
var secondary = group[1];
var primary2 = group2[0];
var secondary2 = group2[1];
var metrics = Ci.GetMetricsFor(primary, primary2);
primary.ConnectToPeer(secondary);
primary2.ConnectToPeer(secondary2);
Thread.Sleep(TimeSpan.FromMinutes(2));
metrics[0].AssertThat("libp2p_peers", Is.EqualTo(1));
metrics[1].AssertThat("libp2p_peers", Is.EqualTo(1));
}
[Test]
public void MarketplaceExample()
{ {
var sellerInitialBalance = 234.TestTokens(); var sellerInitialBalance = 234.TestTokens();
var buyerInitialBalance = 1000.TestTokens(); var buyerInitialBalance = 1000.TestTokens();
@ -80,6 +43,42 @@ namespace CodexTests.BasicTests
AssertBalance(contracts, buyer, Is.EqualTo(buyerInitialBalance)); AssertBalance(contracts, buyer, Is.EqualTo(buyerInitialBalance));
// start bot and rewarder
var gethInfo = new DiscordBotGethInfo(
host: geth.Container.GetInternalAddress(GethContainerRecipe.HttpPortTag).Host,
port: geth.Container.GetInternalAddress(GethContainerRecipe.HttpPortTag).Port,
privKey: geth.StartResult.Account.PrivateKey,
marketplaceAddress: contracts.Deployment.MarketplaceAddress,
tokenAddress: contracts.Deployment.TokenAddress,
abi: contracts.Deployment.Abi
);
var bot = Ci.DeployCodexDiscordBot(new DiscordBotStartupConfig(
name: "bot",
token: "MTE2NDEyNzk3MDU4NDE3NDU5Mw.GTpoV6.aDR7zxMNf7vDgMjKASJBQs-RtNP_lYJEY-OglI",
serverName: "ThatBen's server",
adminRoleName: "bottest-admins",
adminChannelName: "admin-channel",
rewardChannelName: "rewards-channel",
kubeNamespace: "notneeded",
gethInfo: gethInfo
));
var botContainer = bot.Containers.Single();
Ci.DeployRewarderBot(new RewarderBotStartupConfig(
//discordBotHost: "http://" + botContainer.GetAddress(GetTestLog(), DiscordBotContainerRecipe.RewardsPort).Host,
//discordBotPort: botContainer.GetAddress(GetTestLog(), DiscordBotContainerRecipe.RewardsPort).Port,
discordBotHost: botContainer.GetInternalAddress(DiscordBotContainerRecipe.RewardsPort).Host,
discordBotPort: botContainer.GetInternalAddress(DiscordBotContainerRecipe.RewardsPort).Port,
interval: "60",
historyStartUtc: DateTime.UtcNow.AddHours(-1),
gethInfo: gethInfo,
dataPath: null
));
var sellerAddress = seller.EthAddress;
var buyerAddress = buyer.EthAddress;
var i = 0;
var contentId = buyer.UploadFile(testFile); var contentId = buyer.UploadFile(testFile);
var purchaseContract = buyer.Marketplace.RequestStorage(contentId, var purchaseContract = buyer.Marketplace.RequestStorage(contentId,
pricePerSlotPerSecond: 2.TestTokens(), pricePerSlotPerSecond: 2.TestTokens(),
@ -126,21 +125,5 @@ namespace CodexTests.BasicTests
//CheckLogForErrors(seller, buyer); //CheckLogForErrors(seller, buyer);
} }
[Test]
public void GethBootstrapTest()
{
var boot = Ci.StartGethNode(s => s.WithName("boot").IsMiner());
var disconnected = Ci.StartGethNode(s => s.WithName("disconnected"));
var follow = Ci.StartGethNode(s => s.WithBootstrapNode(boot).WithName("follow"));
Thread.Sleep(12000);
var bootN = boot.GetSyncedBlockNumber();
var discN = disconnected.GetSyncedBlockNumber();
var followN = follow.GetSyncedBlockNumber();
Assert.That(bootN, Is.EqualTo(followN));
Assert.That(discN, Is.LessThan(bootN));
}
} }
} }

View File

@ -14,6 +14,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\ProjectPlugins\CodexContractsPlugin\CodexContractsPlugin.csproj" /> <ProjectReference Include="..\..\ProjectPlugins\CodexContractsPlugin\CodexContractsPlugin.csproj" />
<ProjectReference Include="..\..\ProjectPlugins\CodexDiscordBotPlugin\CodexDiscordBotPlugin.csproj" />
<ProjectReference Include="..\..\ProjectPlugins\CodexPlugin\CodexPlugin.csproj" /> <ProjectReference Include="..\..\ProjectPlugins\CodexPlugin\CodexPlugin.csproj" />
<ProjectReference Include="..\..\ProjectPlugins\GethPlugin\GethPlugin.csproj" /> <ProjectReference Include="..\..\ProjectPlugins\GethPlugin\GethPlugin.csproj" />
<ProjectReference Include="..\..\ProjectPlugins\MetricsPlugin\MetricsPlugin.csproj" /> <ProjectReference Include="..\..\ProjectPlugins\MetricsPlugin\MetricsPlugin.csproj" />

View File

@ -58,9 +58,6 @@ namespace BiblioTech.Rewards
{ {
Program.Log.Error("Exception during HTTP handler: " + ex); Program.Log.Error("Exception during HTTP handler: " + ex);
} }
// Whatever happens, everything's always OK.
context.Response.StatusCode = 200;
context.Response.OutputStream.Close();
}, nameof(HandleConnection)); }, nameof(HandleConnection));
} }
} }

View File

@ -113,6 +113,9 @@ namespace CodexNetDeployer
[Uniform("dbot-adminchannelname", "dbotacn", "DBOTADMINCHANNELNAME", false, "Required if discord-bot is true. Name of the Discord channel in which admin commands are allowed.")] [Uniform("dbot-adminchannelname", "dbotacn", "DBOTADMINCHANNELNAME", false, "Required if discord-bot is true. Name of the Discord channel in which admin commands are allowed.")]
public string DiscordBotAdminChannelName { get; set; } = string.Empty; public string DiscordBotAdminChannelName { get; set; } = string.Empty;
[Uniform("dbot-rewardchannelname", "dbotrcn", "DBOTREWARDCHANNELNAME", false, "Required if discord-bot is true. Name of the Discord channel in which reward updates are posted.")]
public string DiscordBotRewardChannelName { get; set; } = string.Empty;
[Uniform("dbot-datapath", "dbotdp", "DBOTDATAPATH", false, "Optional. Path in container where bot will save all data.")] [Uniform("dbot-datapath", "dbotdp", "DBOTDATAPATH", false, "Optional. Path in container where bot will save all data.")]
public string DiscordBotDataPath { get; set; } = string.Empty; public string DiscordBotDataPath { get; set; } = string.Empty;
@ -159,6 +162,7 @@ namespace CodexNetDeployer
StringIsSet(nameof(DiscordBotServerName), DiscordBotServerName, errors); StringIsSet(nameof(DiscordBotServerName), DiscordBotServerName, errors);
StringIsSet(nameof(DiscordBotAdminRoleName), DiscordBotAdminRoleName, errors); StringIsSet(nameof(DiscordBotAdminRoleName), DiscordBotAdminRoleName, errors);
StringIsSet(nameof(DiscordBotAdminChannelName), DiscordBotAdminChannelName, errors); StringIsSet(nameof(DiscordBotAdminChannelName), DiscordBotAdminChannelName, errors);
StringIsSet(nameof(DiscordBotRewardChannelName), DiscordBotRewardChannelName, errors);
} }
return errors; return errors;

View File

@ -142,7 +142,8 @@ namespace CodexNetDeployer
adminRoleName: config.DiscordBotAdminRoleName, adminRoleName: config.DiscordBotAdminRoleName,
adminChannelName: config.DiscordBotAdminChannelName, adminChannelName: config.DiscordBotAdminChannelName,
kubeNamespace: config.KubeNamespace, kubeNamespace: config.KubeNamespace,
gethInfo: info) gethInfo: info,
rewardChannelName: config.DiscordBotRewardChannelName)
{ {
DataPath = config.DiscordBotDataPath DataPath = config.DiscordBotDataPath
}); });