Removes marketaverages from discordbot and rewarderbot
This commit is contained in:
parent
3d347a936d
commit
daad6468c6
@ -3,12 +3,11 @@
|
||||
public class GiveRewardsCommand
|
||||
{
|
||||
public RewardUsersCommand[] Rewards { get; set; } = Array.Empty<RewardUsersCommand>();
|
||||
public MarketAverage[] Averages { get; set; } = Array.Empty<MarketAverage>();
|
||||
public string[] EventsOverview { get; set; } = Array.Empty<string>();
|
||||
|
||||
public bool HasAny()
|
||||
{
|
||||
return Rewards.Any() || Averages.Any() || EventsOverview.Any();
|
||||
return Rewards.Any() || EventsOverview.Any();
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,15 +16,4 @@
|
||||
public ulong RewardId { get; set; }
|
||||
public string[] UserAddresses { get; set; } = Array.Empty<string>();
|
||||
}
|
||||
|
||||
public class MarketAverage
|
||||
{
|
||||
public int NumberOfFinished { get; set; }
|
||||
public int TimeRangeSeconds { get; set; }
|
||||
public float Price { get; set; }
|
||||
public float Size { get; set; }
|
||||
public float Duration { get; set; }
|
||||
public float Collateral { get; set; }
|
||||
public float ProofProbability { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ namespace CodexTests.UtilityTests
|
||||
private readonly List<ulong> rewardsSeen = new List<ulong>();
|
||||
private readonly TimeSpan rewarderInterval = TimeSpan.FromMinutes(1);
|
||||
private readonly List<string> receivedEvents = new List<string>();
|
||||
private readonly List<MarketAverage> receivedAverages = new List<MarketAverage>();
|
||||
|
||||
[Test]
|
||||
[DontDownloadLogs]
|
||||
@ -56,8 +55,6 @@ namespace CodexTests.UtilityTests
|
||||
AssertEventOccurance("Transit: New -> Started", 1);
|
||||
AssertEventOccurance("Transit: Started -> Finished", 1);
|
||||
|
||||
AssertMarketAverage();
|
||||
|
||||
foreach (var r in repo.Rewards)
|
||||
{
|
||||
var seen = rewardsSeen.Any(s => r.RoleId == s);
|
||||
@ -80,28 +77,9 @@ namespace CodexTests.UtilityTests
|
||||
$"Event '{msg}' did not occure correct number of times.");
|
||||
}
|
||||
|
||||
private void AssertMarketAverage()
|
||||
{
|
||||
Assert.That(receivedAverages.Count, Is.EqualTo(1));
|
||||
var a = receivedAverages.Single();
|
||||
|
||||
Assert.That(a.NumberOfFinished, Is.EqualTo(1));
|
||||
Assert.That(a.TimeRangeSeconds, Is.EqualTo(5760));
|
||||
Assert.That(a.Price, Is.EqualTo(2.0f).Within(0.1f));
|
||||
Assert.That(a.Size, Is.EqualTo(GetMinFileSize().SizeInBytes).Within(1.0f));
|
||||
Assert.That(a.Duration, Is.EqualTo(GetMinRequiredRequestDuration().TotalSeconds).Within(1.0f));
|
||||
Assert.That(a.Collateral, Is.EqualTo(10.0f).Within(0.1f));
|
||||
Assert.That(a.ProofProbability, Is.EqualTo(5.0f).Within(0.1f));
|
||||
}
|
||||
|
||||
private void OnCommand(string timestamp, GiveRewardsCommand call)
|
||||
{
|
||||
Log($"<API call {timestamp}>");
|
||||
receivedAverages.AddRange(call.Averages);
|
||||
foreach (var a in call.Averages)
|
||||
{
|
||||
Log("\tAverage: " + JsonConvert.SerializeObject(a));
|
||||
}
|
||||
receivedEvents.AddRange(call.EventsOverview);
|
||||
foreach (var e in call.EventsOverview)
|
||||
{
|
||||
|
@ -1,58 +0,0 @@
|
||||
using BiblioTech.Options;
|
||||
using DiscordRewards;
|
||||
using System.Globalization;
|
||||
using Utils;
|
||||
|
||||
namespace BiblioTech.Commands
|
||||
{
|
||||
public class MarketCommand : BaseCommand
|
||||
{
|
||||
public override string Name => "market";
|
||||
public override string StartingMessage => RandomBusyMessage.Get();
|
||||
public override string Description => "Fetch some insights about current market conditions.";
|
||||
|
||||
protected override async Task Invoke(CommandContext context)
|
||||
{
|
||||
await context.Followup(GetInsights());
|
||||
}
|
||||
|
||||
private string[] GetInsights()
|
||||
{
|
||||
var result = Program.Averages.SelectMany(GetInsight).ToArray();
|
||||
if (result.Length > 0)
|
||||
{
|
||||
result = new[]
|
||||
{
|
||||
"No market insights available."
|
||||
};
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private string[] GetInsight(MarketAverage avg)
|
||||
{
|
||||
var timeRange = TimeSpan.FromSeconds(avg.TimeRangeSeconds);
|
||||
var headerLine = $"[Last {Time.FormatDuration(timeRange)}] ({avg.NumberOfFinished} Contracts finished)";
|
||||
|
||||
if (avg.NumberOfFinished == 0)
|
||||
{
|
||||
return new[] { headerLine };
|
||||
}
|
||||
|
||||
return new[]
|
||||
{
|
||||
headerLine,
|
||||
$"Price: {Format(avg.Price)}",
|
||||
$"Size: {Format(avg.Size)}",
|
||||
$"Duration: {Format(avg.Duration)}",
|
||||
$"Collateral: {Format(avg.Collateral)}",
|
||||
$"ProofProbability: {Format(avg.ProofProbability)}"
|
||||
};
|
||||
}
|
||||
|
||||
private string Format(float f)
|
||||
{
|
||||
return f.ToString("F3", CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
@ -18,7 +18,6 @@ namespace BiblioTech
|
||||
public static AdminChecker AdminChecker { get; private set; } = null!;
|
||||
public static IDiscordRoleDriver RoleDriver { get; set; } = null!;
|
||||
public static ILog Log { get; private set; } = null!;
|
||||
public static MarketAverage[] Averages { get; set; } = Array.Empty<MarketAverage>();
|
||||
|
||||
public static Task Main(string[] args)
|
||||
{
|
||||
@ -91,8 +90,7 @@ namespace BiblioTech
|
||||
sprCommand,
|
||||
associateCommand,
|
||||
notifyCommand,
|
||||
new AdminCommand(sprCommand, replacement),
|
||||
new MarketCommand()
|
||||
new AdminCommand(sprCommand, replacement)
|
||||
);
|
||||
|
||||
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
||||
|
@ -23,10 +23,6 @@ namespace BiblioTech.Rewards
|
||||
{
|
||||
try
|
||||
{
|
||||
if (cmd.Averages != null && cmd.Averages.Any())
|
||||
{
|
||||
Program.Averages = cmd.Averages;
|
||||
}
|
||||
await Program.RoleDriver.GiveRewards(cmd);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -1,74 +0,0 @@
|
||||
using CodexContractsPlugin.ChainMonitor;
|
||||
using CodexContractsPlugin.Marketplace;
|
||||
using DiscordRewards;
|
||||
using System.Numerics;
|
||||
|
||||
namespace TestNetRewarder
|
||||
{
|
||||
public class MarketBuffer
|
||||
{
|
||||
private readonly List<RequestEvent> requestEvents = new List<RequestEvent>();
|
||||
private readonly TimeSpan bufferSpan;
|
||||
|
||||
public MarketBuffer(TimeSpan bufferSpan)
|
||||
{
|
||||
this.bufferSpan = bufferSpan;
|
||||
}
|
||||
|
||||
public void Add(RequestEvent requestEvent)
|
||||
{
|
||||
requestEvents.Add(requestEvent);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
var now = DateTime.UtcNow;
|
||||
requestEvents.RemoveAll(r => (now - r.Request.FinishedUtc) > bufferSpan);
|
||||
}
|
||||
|
||||
public MarketAverage? GetAverage()
|
||||
{
|
||||
if (requestEvents.Count == 0) return null;
|
||||
|
||||
return new MarketAverage
|
||||
{
|
||||
NumberOfFinished = requestEvents.Count,
|
||||
TimeRangeSeconds = (int)bufferSpan.TotalSeconds,
|
||||
Price = Average(s => s.Request.Ask.Reward),
|
||||
Duration = Average(s => s.Request.Ask.Duration),
|
||||
Size = Average(s => GetTotalSize(s.Request.Ask)),
|
||||
Collateral = Average(s => s.Request.Ask.Collateral),
|
||||
ProofProbability = Average(s => s.Request.Ask.ProofProbability)
|
||||
};
|
||||
}
|
||||
|
||||
private float Average(Func<IChainStateRequest, BigInteger> getValue)
|
||||
{
|
||||
return Average(s =>
|
||||
{
|
||||
var value = getValue(s);
|
||||
return (int)value;
|
||||
});
|
||||
}
|
||||
|
||||
private float Average(Func<IChainStateRequest, int> getValue)
|
||||
{
|
||||
var sum = 0.0f;
|
||||
float count = requestEvents.Count;
|
||||
foreach (var r in requestEvents)
|
||||
{
|
||||
sum += getValue(r.Request);
|
||||
}
|
||||
|
||||
if (count < 1.0f) return 0.0f;
|
||||
return sum / count;
|
||||
}
|
||||
|
||||
private int GetTotalSize(Ask ask)
|
||||
{
|
||||
var nSlots = Convert.ToInt32(ask.Slots);
|
||||
var slotSize = (int)ask.SlotSize;
|
||||
return nSlots * slotSize;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
using CodexContractsPlugin.ChainMonitor;
|
||||
using DiscordRewards;
|
||||
using GethPlugin;
|
||||
using Logging;
|
||||
using System.Numerics;
|
||||
|
||||
namespace TestNetRewarder
|
||||
{
|
||||
public class MarketTracker : IChainStateChangeHandler
|
||||
{
|
||||
private readonly List<MarketBuffer> buffers = new List<MarketBuffer>();
|
||||
private readonly ILog log;
|
||||
|
||||
public MarketTracker(Configuration config, ILog log)
|
||||
{
|
||||
var intervals = GetInsightCounts(config);
|
||||
|
||||
foreach (var i in intervals)
|
||||
{
|
||||
buffers.Add(new MarketBuffer(
|
||||
config.Interval * i
|
||||
));
|
||||
}
|
||||
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
public MarketAverage[] GetAverages()
|
||||
{
|
||||
foreach (var b in buffers) b.Update();
|
||||
|
||||
return buffers.Select(b => b.GetAverage()).Where(a => a != null).Cast<MarketAverage>().ToArray();
|
||||
}
|
||||
|
||||
public void OnNewRequest(RequestEvent requestEvent)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnRequestFinished(RequestEvent requestEvent)
|
||||
{
|
||||
foreach (var b in buffers) b.Add(requestEvent);
|
||||
}
|
||||
|
||||
public void OnRequestFulfilled(RequestEvent requestEvent)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnRequestCancelled(RequestEvent requestEvent)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex)
|
||||
{
|
||||
}
|
||||
|
||||
private int[] GetInsightCounts(Configuration config)
|
||||
{
|
||||
try
|
||||
{
|
||||
var tokens = config.MarketInsights.Split(';').ToArray();
|
||||
return tokens.Select(t => Convert.ToInt32(t)).ToArray();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error($"Exception when parsing MarketInsights config parameters: {ex}");
|
||||
}
|
||||
return Array.Empty<int>();
|
||||
}
|
||||
|
||||
public void OnRequestFailed(RequestEvent requestEvent)
|
||||
{
|
||||
throw new NotImplementedException("being removed");
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,6 @@ namespace TestNetRewarder
|
||||
{
|
||||
private readonly RequestBuilder builder;
|
||||
private readonly RewardChecker rewardChecker;
|
||||
private readonly MarketTracker marketTracker;
|
||||
private readonly EventsFormatter eventsFormatter;
|
||||
private readonly ChainState chainState;
|
||||
private readonly BotClient client;
|
||||
@ -22,12 +21,10 @@ namespace TestNetRewarder
|
||||
|
||||
builder = new RequestBuilder();
|
||||
rewardChecker = new RewardChecker(builder);
|
||||
marketTracker = new MarketTracker(config, log);
|
||||
eventsFormatter = new EventsFormatter();
|
||||
|
||||
var handler = new ChainStateChangeHandlerMux(
|
||||
rewardChecker.Handler,
|
||||
marketTracker,
|
||||
eventsFormatter
|
||||
);
|
||||
|
||||
@ -40,10 +37,9 @@ namespace TestNetRewarder
|
||||
{
|
||||
chainState.Update(timeRange.To);
|
||||
|
||||
var averages = marketTracker.GetAverages();
|
||||
var events = eventsFormatter.GetEvents();
|
||||
|
||||
var request = builder.Build(averages, events);
|
||||
var request = builder.Build(events);
|
||||
if (request.HasAny())
|
||||
{
|
||||
await client.SendRewards(request);
|
||||
|
@ -19,7 +19,7 @@ namespace TestNetRewarder
|
||||
}
|
||||
}
|
||||
|
||||
public GiveRewardsCommand Build(MarketAverage[] marketAverages, string[] lines)
|
||||
public GiveRewardsCommand Build(string[] lines)
|
||||
{
|
||||
var result = new GiveRewardsCommand
|
||||
{
|
||||
@ -28,7 +28,6 @@ namespace TestNetRewarder
|
||||
RewardId = p.Key,
|
||||
UserAddresses = p.Value.Select(v => v.Address).ToArray()
|
||||
}).ToArray(),
|
||||
Averages = marketAverages,
|
||||
EventsOverview = lines
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user