103 lines
3.3 KiB
C#
Raw Normal View History

2025-05-20 14:16:33 +02:00
using BlockchainUtils;
2025-05-20 10:19:07 +02:00
using CodexContractsPlugin;
using CodexContractsPlugin.Marketplace;
using Core;
using GethPlugin;
using Logging;
using Utils;
namespace TraceContract
{
public class Program
{
public static void Main(string[] args)
{
2025-05-20 14:16:33 +02:00
ProjectPlugin.Load<GethPlugin.GethPlugin>();
ProjectPlugin.Load<CodexContractsPlugin.CodexContractsPlugin>();
2025-05-20 10:19:07 +02:00
var p = new Program();
p.Run();
}
private readonly ILog log = new ConsoleLog();
private readonly Input input = new();
private readonly Config config = new();
2025-05-20 12:47:36 +02:00
private readonly Output output;
public Program()
{
2025-05-20 14:16:33 +02:00
output = new(log, input, config);
2025-05-20 12:47:36 +02:00
}
2025-05-20 10:19:07 +02:00
private void Run()
{
try
{
TracePurchase();
}
catch (Exception exc)
{
log.Error(exc.ToString());
}
}
private void TracePurchase()
{
Log("Setting up...");
2025-05-20 14:16:33 +02:00
var entryPoint = new EntryPoint(log, new KubernetesWorkflow.Configuration(null, TimeSpan.FromMinutes(1.0), TimeSpan.FromSeconds(10.0), "_Unused!_"), Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
entryPoint.Announce();
var ci = entryPoint.CreateInterface();
var contracts = ConnectCodexContracts(ci);
2025-05-20 10:19:07 +02:00
var chainTracer = new ChainTracer(log, contracts, input, output);
2025-05-20 12:47:36 +02:00
var requestTimeRange = chainTracer.TraceChainTimeline();
2025-05-20 10:19:07 +02:00
2025-05-20 14:16:33 +02:00
Log("Downloading storage nodes logs for the request timerange...");
DownloadStorageNodeLogs(requestTimeRange, entryPoint.Tools);
2025-05-20 15:09:38 +02:00
Log("Packaging...");
var zipFilename = output.Package();
Log($"Saved to '{zipFilename}'");
2025-05-20 14:16:33 +02:00
entryPoint.Decommission(false, false, false);
2025-05-20 10:19:07 +02:00
Log("Done");
}
2025-05-20 14:16:33 +02:00
private ICodexContracts ConnectCodexContracts(CoreInterface ci)
2025-05-20 10:19:07 +02:00
{
var account = EthAccountGenerator.GenerateNew();
var blockCache = new BlockCache();
var geth = new CustomGethNode(log, blockCache, config.RpcEndpoint, config.GethPort, account.PrivateKey);
var deployment = new CodexContractsDeployment(
2025-05-20 14:16:33 +02:00
config: new MarketplaceConfig(),
2025-05-20 10:19:07 +02:00
marketplaceAddress: config.MarketplaceAddress,
abi: config.Abi,
tokenAddress: config.TokenAddress
);
return ci.WrapCodexContractsDeployment(geth, deployment);
}
2025-05-20 14:16:33 +02:00
private void DownloadStorageNodeLogs(TimeRange requestTimeRange, IPluginTools tools)
2025-05-20 10:19:07 +02:00
{
2025-05-20 14:16:33 +02:00
var start = requestTimeRange.From - config.LogStartBeforeStorageContractStarts;
2025-05-20 10:19:07 +02:00
2025-05-20 14:16:33 +02:00
foreach (var node in config.StorageNodesKubernetesContainerNames)
2025-05-20 12:47:36 +02:00
{
2025-05-20 14:16:33 +02:00
Log($"Downloading logs from '{node}'...");
2025-05-20 10:19:07 +02:00
2025-05-20 14:16:33 +02:00
var targetFile = output.CreateNodeLogTargetFile(node);
2025-05-20 15:09:38 +02:00
targetFile.Write("TODO!");
//var downloader = new ElasticSearchLogDownloader(log, tools, config);
//downloader.Download(targetFile, node, start, requestTimeRange.To);
2025-05-20 10:19:07 +02:00
}
}
2025-05-20 14:16:33 +02:00
private void Log(string msg)
2025-05-20 12:47:36 +02:00
{
2025-05-20 14:16:33 +02:00
log.Log(msg);
2025-05-20 10:19:07 +02:00
}
}
}