From c9fedac592a0d3f4e1fa1a80a3ed1d40543aaa96 Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 23 Sep 2024 10:52:12 +0200 Subject: [PATCH] Adds call to get availabilities --- .../Types/RunningContainer.cs | 3 +- .../CodexContractsContainerRecipe.cs | 2 +- ProjectPlugins/CodexPlugin/CodexAccess.cs | 8 ++++- ProjectPlugins/CodexPlugin/Mapper.cs | 34 +++++++++++++++++++ .../CodexPlugin/MarketplaceAccess.cs | 15 ++++++++ .../CodexPlugin/MarketplaceTypes.cs | 2 +- ProjectPlugins/GethPlugin/GethNode.cs | 2 +- ProjectPlugins/MetricsPlugin/MetricsQuery.cs | 2 +- .../MetricsPlugin/PrometheusStarter.cs | 2 +- Tests/CodexContinuousTests/StartupChecker.cs | 2 +- .../CodexTests/BasicTests/MarketplaceTests.cs | 2 ++ Tools/AutoClient/Purchaser.cs | 2 +- 12 files changed, 66 insertions(+), 10 deletions(-) diff --git a/Framework/KubernetesWorkflow/Types/RunningContainer.cs b/Framework/KubernetesWorkflow/Types/RunningContainer.cs index ad51265a..81faf154 100644 --- a/Framework/KubernetesWorkflow/Types/RunningContainer.cs +++ b/Framework/KubernetesWorkflow/Types/RunningContainer.cs @@ -24,13 +24,12 @@ namespace KubernetesWorkflow.Types [JsonIgnore] public RunningPod RunningPod { get; internal set; } = null!; - public Address GetAddress(ILog log, string portTag) + public Address GetAddress(string portTag) { var addresses = Addresses.Where(a => a.PortTag == portTag).ToArray(); if (!addresses.Any()) throw new Exception("No addresses found for portTag: " + portTag); var select = SelectAddress(addresses); - log.Debug($"Container '{Name}' selected for tag '{portTag}' address: '{select}'"); return select.Address; } diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsContainerRecipe.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsContainerRecipe.cs index e3814142..077f386b 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsContainerRecipe.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsContainerRecipe.cs @@ -19,7 +19,7 @@ namespace CodexContractsPlugin { var config = startupConfig.Get(); - var address = config.GethNode.StartResult.Container.GetAddress(new NullLog(), GethContainerRecipe.HttpPortTag); + var address = config.GethNode.StartResult.Container.GetAddress(GethContainerRecipe.HttpPortTag); SetSchedulingAffinity(notIn: "false"); diff --git a/ProjectPlugins/CodexPlugin/CodexAccess.cs b/ProjectPlugins/CodexPlugin/CodexAccess.cs index 704c74ba..8050f3ab 100644 --- a/ProjectPlugins/CodexPlugin/CodexAccess.cs +++ b/ProjectPlugins/CodexPlugin/CodexAccess.cs @@ -92,6 +92,12 @@ namespace CodexPlugin return mapper.Map(read); } + public StorageAvailability[] GetAvailabilities() + { + var collection = OnCodex>(api => api.GetOfferedStorageAsync()); + return mapper.Map(collection); + } + public string RequestStorage(StoragePurchaseRequest request) { var body = mapper.Map(request); @@ -189,7 +195,7 @@ namespace CodexPlugin private Address GetAddress() { - return Container.Containers.Single().GetAddress(log, CodexContainerRecipe.ApiPortTag); + return Container.Containers.Single().GetAddress(CodexContainerRecipe.ApiPortTag); } private string GetHttpId() diff --git a/ProjectPlugins/CodexPlugin/Mapper.cs b/ProjectPlugins/CodexPlugin/Mapper.cs index c175ae14..b752fe4e 100644 --- a/ProjectPlugins/CodexPlugin/Mapper.cs +++ b/ProjectPlugins/CodexPlugin/Mapper.cs @@ -63,6 +63,25 @@ namespace CodexPlugin }; } + public StorageAvailability[] Map(ICollection availabilities) + { + return availabilities.Select(a => Map(a)).ToArray(); + } + + public StorageAvailability Map(SalesAvailability availability) + { + return new StorageAvailability + ( + ToByteSize(availability.TotalSize), + ToTimespan(availability.Duration), + new TestToken(ToBigIng(availability.MinPrice)), + new TestToken(ToBigIng(availability.MaxCollateral)) + ) + { + Id = availability.Id, + }; + } + // TODO: Fix openapi spec for this call. //public StoragePurchase Map(CodexOpenApi.Purchase purchase) //{ @@ -222,5 +241,20 @@ namespace CodexPlugin { return t.TstWei.ToString("D"); } + + private BigInteger ToBigIng(string tokens) + { + return BigInteger.Parse(tokens); + } + + private TimeSpan ToTimespan(string duration) + { + return TimeSpan.FromSeconds(Convert.ToInt32(duration)); + } + + private ByteSize ToByteSize(string size) + { + return new ByteSize(Convert.ToInt64(size)); + } } } diff --git a/ProjectPlugins/CodexPlugin/MarketplaceAccess.cs b/ProjectPlugins/CodexPlugin/MarketplaceAccess.cs index 004450ca..a657e9b0 100644 --- a/ProjectPlugins/CodexPlugin/MarketplaceAccess.cs +++ b/ProjectPlugins/CodexPlugin/MarketplaceAccess.cs @@ -7,6 +7,7 @@ namespace CodexPlugin public interface IMarketplaceAccess { string MakeStorageAvailable(StorageAvailability availability); + StorageAvailability[] GetAvailabilities(); IStoragePurchaseContract RequestStorage(StoragePurchaseRequest purchase); } @@ -61,6 +62,14 @@ namespace CodexPlugin return response.Id; } + public StorageAvailability[] GetAvailabilities() + { + var result = codexAccess.GetAvailabilities(); + Log($"Got {result.Length} availabilities:"); + foreach (var a in result) a.Log(log); + return result; + } + private void Log(string msg) { log.Log($"{codexAccess.Container.Containers.Single().Name} {msg}"); @@ -81,6 +90,12 @@ namespace CodexPlugin throw new NotImplementedException(); } + public StorageAvailability[] GetAvailabilities() + { + Unavailable(); + throw new NotImplementedException(); + } + private void Unavailable() { FrameworkAssert.Fail("Incorrect test setup: Marketplace was not enabled for this group of Codex nodes. Add 'EnableMarketplace(...)' after 'SetupCodexNodes()' to enable it."); diff --git a/ProjectPlugins/CodexPlugin/MarketplaceTypes.cs b/ProjectPlugins/CodexPlugin/MarketplaceTypes.cs index 21aa86a6..f3163d2b 100644 --- a/ProjectPlugins/CodexPlugin/MarketplaceTypes.cs +++ b/ProjectPlugins/CodexPlugin/MarketplaceTypes.cs @@ -87,7 +87,7 @@ namespace CodexPlugin public void Log(ILog log) { - log.Log($"Making storage available... (" + + log.Log($"Storage Availability: (" + $"totalSize: {TotalSpace}, " + $"maxDuration: {Time.FormatDuration(MaxDuration)}, " + $"minPriceForTotalSpace: {MinPriceForTotalSpace}, " + diff --git a/ProjectPlugins/GethPlugin/GethNode.cs b/ProjectPlugins/GethPlugin/GethNode.cs index 08d07366..641aea4d 100644 --- a/ProjectPlugins/GethPlugin/GethNode.cs +++ b/ProjectPlugins/GethPlugin/GethNode.cs @@ -57,7 +57,7 @@ namespace GethPlugin protected override NethereumInteraction StartInteraction() { - var address = StartResult.Container.GetAddress(log, GethContainerRecipe.HttpPortTag); + var address = StartResult.Container.GetAddress(GethContainerRecipe.HttpPortTag); var account = StartResult.Account; var creator = new NethereumInteractionCreator(log, address.Host, address.Port, account.PrivateKey); diff --git a/ProjectPlugins/MetricsPlugin/MetricsQuery.cs b/ProjectPlugins/MetricsPlugin/MetricsQuery.cs index a66351c0..70b5d9d6 100644 --- a/ProjectPlugins/MetricsPlugin/MetricsQuery.cs +++ b/ProjectPlugins/MetricsPlugin/MetricsQuery.cs @@ -15,7 +15,7 @@ namespace MetricsPlugin { RunningContainer = runningContainer; log = tools.GetLog(); - var address = RunningContainer.GetAddress(log, PrometheusContainerRecipe.PortTag); + var address = RunningContainer.GetAddress(PrometheusContainerRecipe.PortTag); endpoint = tools .CreateHttp(address.ToString()) .CreateEndpoint(address, "/api/v1/"); diff --git a/ProjectPlugins/MetricsPlugin/PrometheusStarter.cs b/ProjectPlugins/MetricsPlugin/PrometheusStarter.cs index 159947a2..f8303f59 100644 --- a/ProjectPlugins/MetricsPlugin/PrometheusStarter.cs +++ b/ProjectPlugins/MetricsPlugin/PrometheusStarter.cs @@ -80,7 +80,7 @@ namespace MetricsPlugin { public static string FormatTarget(ILog log, IMetricsScrapeTarget target) { - var a = target.Container.GetAddress(log, target.MetricsPortTag); + var a = target.Container.GetAddress(target.MetricsPortTag); var host = a.Host.Replace("http://", "").Replace("https://", ""); return $"{host}:{a.Port}"; } diff --git a/Tests/CodexContinuousTests/StartupChecker.cs b/Tests/CodexContinuousTests/StartupChecker.cs index 57c383c8..ca4c8874 100644 --- a/Tests/CodexContinuousTests/StartupChecker.cs +++ b/Tests/CodexContinuousTests/StartupChecker.cs @@ -98,7 +98,7 @@ namespace ContinuousTests { cancelToken.ThrowIfCancellationRequested(); - var address = n.Container.GetAddress(log, CodexContainerRecipe.ApiPortTag); + var address = n.Container.GetAddress(CodexContainerRecipe.ApiPortTag); log.Log($"Checking {n.Container.Name} @ '{address}'..."); if (EnsureOnline(log, n)) diff --git a/Tests/CodexTests/BasicTests/MarketplaceTests.cs b/Tests/CodexTests/BasicTests/MarketplaceTests.cs index 596476e1..39ab8c4b 100644 --- a/Tests/CodexTests/BasicTests/MarketplaceTests.cs +++ b/Tests/CodexTests/BasicTests/MarketplaceTests.cs @@ -97,6 +97,8 @@ namespace CodexTests.BasicTests purchaseContract.WaitForStorageContractStarted(); + var availabilities = hosts.Select(h => h.Marketplace.GetAvailabilities()); + var request = GetOnChainStorageRequest(contracts, geth); AssertStorageRequest(request, purchase, contracts, client); AssertContractSlot(contracts, request, 0); diff --git a/Tools/AutoClient/Purchaser.cs b/Tools/AutoClient/Purchaser.cs index 41cc9c7a..34e19e40 100644 --- a/Tools/AutoClient/Purchaser.cs +++ b/Tools/AutoClient/Purchaser.cs @@ -151,7 +151,7 @@ namespace AutoClient { try { - var sp = await GetStoragePurchase(pid)!; + var sp = (await GetStoragePurchase(pid))!; return sp.Request.Content.Cid; } catch (Exception ex)