mirror of
https://github.com/logos-storage/logos-storage-nim-cs-dist-tests.git
synced 2026-05-08 02:19:31 +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>
91 lines
3.2 KiB
C#
91 lines
3.2 KiB
C#
using StoragePlugin.OverwatchSupport;
|
|
using OverwatchTranscript;
|
|
|
|
namespace TranscriptAnalysis.Receivers
|
|
{
|
|
public class DuplicateBlocksReceived : BaseReceiver<OverwatchLogosStorageEvent>
|
|
{
|
|
public static List<int> Counts = new List<int>();
|
|
private long uploadSize;
|
|
|
|
public override string Name => "BlocksReceived";
|
|
|
|
public override void Receive(ActivateEvent<OverwatchLogosStorageEvent> @event)
|
|
{
|
|
if (@event.Payload.BlockReceived != null)
|
|
{
|
|
Handle(@event.Payload, @event.Payload.BlockReceived);
|
|
}
|
|
if (@event.Payload.FileUploaded != null)
|
|
{
|
|
var uploadEvent = @event.Payload.FileUploaded;
|
|
uploadSize = uploadEvent.ByteSize;
|
|
}
|
|
}
|
|
|
|
public override void Finish()
|
|
{
|
|
Log("Number of BlockReceived events seen: " + seen);
|
|
var csv = CsvWriter.CreateNew();
|
|
|
|
var totalReceived = peerIdBlockAddrCount.Sum(a => a.Value.Sum(p => p.Value));
|
|
var maxRepeats = peerIdBlockAddrCount.Max(a => a.Value.Max(p => p.Value));
|
|
var occurances = new OccuranceMap();
|
|
|
|
foreach (var peerPair in peerIdBlockAddrCount)
|
|
{
|
|
foreach (var blockCountPair in peerPair.Value)
|
|
{
|
|
occurances.Add(blockCountPair.Value);
|
|
}
|
|
}
|
|
|
|
if (Counts.Any()) throw new Exception("Should be empty");
|
|
|
|
float t = totalReceived;
|
|
csv.GetColumn("numNodes", Header.Nodes.Length);
|
|
csv.GetColumn("filesize", uploadSize.ToString());
|
|
var receiveCountColumn = csv.GetColumn("receiveCount", 0.0f);
|
|
var occuranceColumn = csv.GetColumn("occurance", 0.0f);
|
|
occurances.PrintContinous((i, count) =>
|
|
{
|
|
float n = count;
|
|
float p = 100.0f * (n / t);
|
|
Log($"Block received {i} times = {count}x ({p}%)");
|
|
Counts.Add(count);
|
|
csv.AddRow(
|
|
new CsvCell(receiveCountColumn, i),
|
|
new CsvCell(occuranceColumn, count)
|
|
);
|
|
});
|
|
|
|
CsvWriter.Write(csv, SourceFilename + "_blockduplicates.csv");
|
|
}
|
|
|
|
private int seen = 0;
|
|
private readonly Dictionary<string, Dictionary<string, int>> peerIdBlockAddrCount = new Dictionary<string, Dictionary<string, int>>();
|
|
|
|
private void Handle(OverwatchLogosStorageEvent payload, BlockReceivedEvent blockReceived)
|
|
{
|
|
var receiverPeerId = GetPeerId(payload.NodeIdentity);
|
|
if (receiverPeerId == null) return;
|
|
var blockAddress = blockReceived.BlockAddress;
|
|
seen++;
|
|
|
|
if (!peerIdBlockAddrCount.ContainsKey(receiverPeerId))
|
|
{
|
|
peerIdBlockAddrCount.Add(receiverPeerId, new Dictionary<string, int>());
|
|
}
|
|
var blockAddCount = peerIdBlockAddrCount[receiverPeerId];
|
|
if (!blockAddCount.ContainsKey(blockAddress))
|
|
{
|
|
blockAddCount.Add(blockAddress, 1);
|
|
}
|
|
else
|
|
{
|
|
blockAddCount[blockAddress]++;
|
|
}
|
|
}
|
|
}
|
|
}
|