Adds events formatter
This commit is contained in:
parent
8341807d92
commit
0ef55abdf4
@ -1,4 +1,5 @@
|
|||||||
using CodexContractsPlugin.Marketplace;
|
using CodexContractsPlugin.Marketplace;
|
||||||
|
using GethPlugin;
|
||||||
using Logging;
|
using Logging;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Utils;
|
using Utils;
|
||||||
@ -11,7 +12,7 @@ namespace CodexContractsPlugin.ChainMonitor
|
|||||||
void OnRequestFinished(IChainStateRequest request);
|
void OnRequestFinished(IChainStateRequest request);
|
||||||
void OnRequestFulfilled(IChainStateRequest request);
|
void OnRequestFulfilled(IChainStateRequest request);
|
||||||
void OnRequestCancelled(IChainStateRequest request);
|
void OnRequestCancelled(IChainStateRequest request);
|
||||||
void OnSlotFilled(IChainStateRequest request, BigInteger slotIndex);
|
void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex);
|
||||||
void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex);
|
void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ namespace CodexContractsPlugin.ChainMonitor
|
|||||||
if (r == null) return;
|
if (r == null) return;
|
||||||
r.Hosts.Add(request.Host, (int)request.SlotIndex);
|
r.Hosts.Add(request.Host, (int)request.SlotIndex);
|
||||||
r.Log($"[{request.Block.BlockNumber}] SlotFilled (host:'{request.Host}', slotIndex:{request.SlotIndex})");
|
r.Log($"[{request.Block.BlockNumber}] SlotFilled (host:'{request.Host}', slotIndex:{request.SlotIndex})");
|
||||||
handler.OnSlotFilled(r, request.SlotIndex);
|
handler.OnSlotFilled(r, request.Host, request.SlotIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplyEvent(SlotFreedEventDTO request)
|
private void ApplyEvent(SlotFreedEventDTO request)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Numerics;
|
using GethPlugin;
|
||||||
|
using System.Numerics;
|
||||||
|
|
||||||
namespace CodexContractsPlugin.ChainMonitor
|
namespace CodexContractsPlugin.ChainMonitor
|
||||||
{
|
{
|
||||||
@ -20,7 +21,7 @@ namespace CodexContractsPlugin.ChainMonitor
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSlotFilled(IChainStateRequest request, BigInteger slotIndex)
|
public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
using Logging;
|
|
||||||
|
|
||||||
namespace TestNetRewarder
|
|
||||||
{
|
|
||||||
public class BufferLogger : ILog
|
|
||||||
{
|
|
||||||
private readonly List<string> lines = new List<string>();
|
|
||||||
|
|
||||||
public void AddStringReplace(string from, string to)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogFile CreateSubfile(string ext = "log")
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Debug(string message = "", int skipFrames = 0)
|
|
||||||
{
|
|
||||||
lines.Add(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Error(string message)
|
|
||||||
{
|
|
||||||
lines.Add($"Error: {message}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Log(string message)
|
|
||||||
{
|
|
||||||
lines.Add(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] Get()
|
|
||||||
{
|
|
||||||
var result = lines.ToArray();
|
|
||||||
lines.Clear();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,5 @@
|
|||||||
using CodexContractsPlugin.ChainMonitor;
|
using CodexContractsPlugin.ChainMonitor;
|
||||||
|
using GethPlugin;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace TestNetRewarder
|
namespace TestNetRewarder
|
||||||
@ -32,9 +33,9 @@ namespace TestNetRewarder
|
|||||||
foreach (var handler in handlers) handler.OnRequestFulfilled(request);
|
foreach (var handler in handlers) handler.OnRequestFulfilled(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSlotFilled(IChainStateRequest request, BigInteger slotIndex)
|
public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex)
|
||||||
{
|
{
|
||||||
foreach (var handler in handlers) handler.OnSlotFilled(request, slotIndex);
|
foreach (var handler in handlers) handler.OnSlotFilled(request, host, slotIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex)
|
public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex)
|
||||||
|
122
Tools/TestNetRewarder/EventsFormatter.cs
Normal file
122
Tools/TestNetRewarder/EventsFormatter.cs
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
using CodexContractsPlugin;
|
||||||
|
using CodexContractsPlugin.ChainMonitor;
|
||||||
|
using GethPlugin;
|
||||||
|
using System.Numerics;
|
||||||
|
using Utils;
|
||||||
|
|
||||||
|
namespace TestNetRewarder
|
||||||
|
{
|
||||||
|
public class EventsFormatter : IChainStateChangeHandler
|
||||||
|
{
|
||||||
|
private static readonly string nl = Environment.NewLine;
|
||||||
|
private readonly List<string> events = new List<string>();
|
||||||
|
|
||||||
|
public string[] GetEvents()
|
||||||
|
{
|
||||||
|
var result = events.ToArray();
|
||||||
|
events.Clear();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddError(string error)
|
||||||
|
{
|
||||||
|
AddBlock("📢 **Error**", error);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnNewRequest(IChainStateRequest request)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "New Request",
|
||||||
|
$"Client: {request.Client}",
|
||||||
|
$"Content: {request.Request.Content.Cid}",
|
||||||
|
$"Duration: {BigIntToDuration(request.Request.Ask.Duration)}",
|
||||||
|
$"Expiry: {BigIntToDuration(request.Request.Expiry)}",
|
||||||
|
$"Collateral: {BitIntToTestTokens(request.Request.Ask.Collateral)}",
|
||||||
|
$"Reward: {BitIntToTestTokens(request.Request.Ask.Reward)}",
|
||||||
|
$"Number of Slots: {request.Request.Ask.Slots}",
|
||||||
|
$"Slot Tolerance: {request.Request.Ask.MaxSlotLoss}",
|
||||||
|
$"Slot Size: {BigIntToByteSize(request.Request.Ask.SlotSize)}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnRequestCancelled(IChainStateRequest request)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "Cancelled");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnRequestFinished(IChainStateRequest request)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "Finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnRequestFulfilled(IChainStateRequest request)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "Started");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "Slot Filled",
|
||||||
|
$"Host: {host}",
|
||||||
|
$"Slot Index: {slotIndex}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnSlotFreed(IChainStateRequest request, BigInteger slotIndex)
|
||||||
|
{
|
||||||
|
AddRequestBlock(request, "Slot Freed",
|
||||||
|
$"Slot Index: {slotIndex}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddRequestBlock(IChainStateRequest request, string eventName, params string[] content)
|
||||||
|
{
|
||||||
|
var blockNumber = $"[{request.Request.Block.BlockNumber}]";
|
||||||
|
var title = $"{blockNumber} **{eventName}** `{request.Request.Id}`";
|
||||||
|
AddBlock(title, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddBlock(string title, params string[] content)
|
||||||
|
{
|
||||||
|
events.Add(FormatBlock(title, content));
|
||||||
|
}
|
||||||
|
|
||||||
|
private string FormatBlock(string title, params string[] content)
|
||||||
|
{
|
||||||
|
if (content == null || !content.Any())
|
||||||
|
{
|
||||||
|
return $"{title}{nl}{nl}";
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Join(nl,
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
title,
|
||||||
|
"```"
|
||||||
|
}
|
||||||
|
.Concat(content)
|
||||||
|
.Concat(new string[]
|
||||||
|
{
|
||||||
|
"```"
|
||||||
|
})
|
||||||
|
) + nl + nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string BigIntToDuration(BigInteger big)
|
||||||
|
{
|
||||||
|
var span = TimeSpan.FromSeconds((int)big);
|
||||||
|
return Time.FormatDuration(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string BigIntToByteSize(BigInteger big)
|
||||||
|
{
|
||||||
|
var size = new ByteSize((long)big);
|
||||||
|
return size.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private string BitIntToTestTokens(BigInteger big)
|
||||||
|
{
|
||||||
|
var tt = new TestToken(big);
|
||||||
|
return tt.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
using CodexContractsPlugin.ChainMonitor;
|
using CodexContractsPlugin.ChainMonitor;
|
||||||
using DiscordRewards;
|
using DiscordRewards;
|
||||||
|
using GethPlugin;
|
||||||
using Logging;
|
using Logging;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
@ -48,7 +49,7 @@ namespace TestNetRewarder
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSlotFilled(IChainStateRequest request, BigInteger slotIndex)
|
public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ namespace TestNetRewarder
|
|||||||
private readonly RequestBuilder builder;
|
private readonly RequestBuilder builder;
|
||||||
private readonly RewardChecker rewardChecker;
|
private readonly RewardChecker rewardChecker;
|
||||||
private readonly MarketTracker marketTracker;
|
private readonly MarketTracker marketTracker;
|
||||||
private readonly BufferLogger bufferLogger;
|
private readonly EventsFormatter eventsFormatter;
|
||||||
private readonly ChainState chainState;
|
private readonly ChainState chainState;
|
||||||
private readonly BotClient client;
|
private readonly BotClient client;
|
||||||
private readonly ILog log;
|
private readonly ILog log;
|
||||||
@ -23,14 +23,15 @@ namespace TestNetRewarder
|
|||||||
builder = new RequestBuilder();
|
builder = new RequestBuilder();
|
||||||
rewardChecker = new RewardChecker(builder);
|
rewardChecker = new RewardChecker(builder);
|
||||||
marketTracker = new MarketTracker(config, log);
|
marketTracker = new MarketTracker(config, log);
|
||||||
bufferLogger = new BufferLogger();
|
eventsFormatter = new EventsFormatter();
|
||||||
|
|
||||||
var handler = new ChainChangeMux(
|
var handler = new ChainChangeMux(
|
||||||
rewardChecker.Handler,
|
rewardChecker.Handler,
|
||||||
marketTracker
|
marketTracker,
|
||||||
|
eventsFormatter
|
||||||
);
|
);
|
||||||
|
|
||||||
chainState = new ChainState(new LogSplitter(log, bufferLogger), contracts, handler, config.HistoryStartUtc);
|
chainState = new ChainState(log, contracts, handler, config.HistoryStartUtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task OnNewSegment(TimeRange timeRange)
|
public async Task OnNewSegment(TimeRange timeRange)
|
||||||
@ -40,9 +41,9 @@ namespace TestNetRewarder
|
|||||||
chainState.Update(timeRange.To);
|
chainState.Update(timeRange.To);
|
||||||
|
|
||||||
var averages = marketTracker.GetAverages();
|
var averages = marketTracker.GetAverages();
|
||||||
var lines = RemoveFirstLine(bufferLogger.Get());
|
var events = eventsFormatter.GetEvents();
|
||||||
|
|
||||||
var request = builder.Build(averages, lines);
|
var request = builder.Build(averages, events);
|
||||||
if (request.HasAny())
|
if (request.HasAny())
|
||||||
{
|
{
|
||||||
await client.SendRewards(request);
|
await client.SendRewards(request);
|
||||||
@ -52,16 +53,9 @@ namespace TestNetRewarder
|
|||||||
{
|
{
|
||||||
var msg = "Exception processing time segment: " + ex;
|
var msg = "Exception processing time segment: " + ex;
|
||||||
log.Error(msg);
|
log.Error(msg);
|
||||||
bufferLogger.Error(msg);
|
eventsFormatter.AddError(msg);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string[] RemoveFirstLine(string[] lines)
|
|
||||||
{
|
|
||||||
//if (!lines.Any()) return Array.Empty<string>();
|
|
||||||
//return lines.Skip(1).ToArray();
|
|
||||||
return lines;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,11 +53,10 @@ namespace TestNetRewarder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSlotFilled(IChainStateRequest request, BigInteger slotIndex)
|
public void OnSlotFilled(IChainStateRequest request, EthAddress host, BigInteger slotIndex)
|
||||||
{
|
{
|
||||||
if (MeetsRequirements(CheckType.HostFilledSlot, request))
|
if (MeetsRequirements(CheckType.HostFilledSlot, request))
|
||||||
{
|
{
|
||||||
var host = request.Hosts.GetHost((int)slotIndex);
|
|
||||||
if (host != null)
|
if (host != null)
|
||||||
{
|
{
|
||||||
GiveReward(reward, host);
|
GiveReward(reward, host);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user