mirror of
https://github.com/logos-storage/logos-storage-nim-cs-dist-tests.git
synced 2026-05-07 01:49:27 +00:00
* ci(docker): build dist-tests images * Update to .net 10, kubernetes client 18.0.13 Kubernetes client 18.0.13 is compatible with Kubernetes 1.34.x. The Kubernetes version is selected automatically by kubeadm in docker desktop (v1.34.1). See https://github.com/kubernetes-client/csharp#version-compatibility for a compatibility table. * Updates to support Kubernetes upgrade * bump openapi.yaml to match openapi.yaml in the logos-storage-nim docker image * bump doc to .net 10 * bump docker to .net 10 * Build image with latest tag always Always build an image with a latest tag (as well as a sha commit hash) when there's a push to master * docker image tag as "latest" only when pushing to master * Update docker image to install doctl * Remove doctl install kubeconfig is now created and uses a plain bearer token instead of using doctl as a credential mgr * Rename and remove all instances of Codex * Further remove CodexNetDeployer as it is no longer needed --------- Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
using Utils;
|
|
|
|
namespace LogosStorageClient
|
|
{
|
|
public interface ITransferSpeeds
|
|
{
|
|
BytesPerSecond? GetUploadSpeed();
|
|
BytesPerSecond? GetDownloadSpeed();
|
|
ITransferSpeeds Combine(ITransferSpeeds? other);
|
|
}
|
|
|
|
public class TransferSpeeds : ITransferSpeeds
|
|
{
|
|
private readonly List<BytesPerSecond> uploads = new List<BytesPerSecond>();
|
|
private readonly List<BytesPerSecond> downloads = new List<BytesPerSecond>();
|
|
|
|
public void AddUploadSample(ByteSize bytes, TimeSpan duration)
|
|
{
|
|
uploads.Add(Convert(bytes, duration));
|
|
}
|
|
|
|
public void AddDownloadSample(ByteSize bytes, TimeSpan duration)
|
|
{
|
|
downloads.Add(Convert(bytes, duration));
|
|
}
|
|
|
|
public BytesPerSecond? GetUploadSpeed()
|
|
{
|
|
if (!uploads.Any()) return null;
|
|
return uploads.Average();
|
|
}
|
|
|
|
public BytesPerSecond? GetDownloadSpeed()
|
|
{
|
|
if (!downloads.Any()) return null;
|
|
return downloads.Average();
|
|
}
|
|
|
|
public ITransferSpeeds Combine(ITransferSpeeds? other)
|
|
{
|
|
if (other == null) return this;
|
|
var o = (TransferSpeeds)other;
|
|
var result = new TransferSpeeds();
|
|
result.uploads.AddRange(uploads);
|
|
result.uploads.AddRange(o.uploads);
|
|
result.downloads.AddRange(downloads);
|
|
result.downloads.AddRange(o.downloads);
|
|
return result;
|
|
}
|
|
|
|
private static BytesPerSecond Convert(ByteSize size, TimeSpan duration)
|
|
{
|
|
double bytes = size.SizeInBytes;
|
|
double seconds = duration.TotalSeconds;
|
|
|
|
return new BytesPerSecond(System.Convert.ToInt64(Math.Round(bytes / seconds)));
|
|
}
|
|
}
|
|
|
|
public static class ListExtensions
|
|
{
|
|
public static BytesPerSecond Average(this List<BytesPerSecond> list)
|
|
{
|
|
double sum = list.Sum(i => i.SizeInBytes);
|
|
double num = list.Count;
|
|
|
|
return new BytesPerSecond(Convert.ToInt64(Math.Round(sum / num)));
|
|
}
|
|
|
|
public static BytesPerSecond? OptionalAverage(this List<BytesPerSecond?>? list)
|
|
{
|
|
if (list == null || !list.Any() || !list.Any(i => i != null)) return null;
|
|
var values = list.Where(i => i != null).Cast<BytesPerSecond>().ToArray();
|
|
double sum = values.Sum(i => i.SizeInBytes);
|
|
double num = values.Length;
|
|
|
|
return new BytesPerSecond(Convert.ToInt64(Math.Round(sum / num)));
|
|
}
|
|
}
|
|
}
|