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>
106 lines
2.9 KiB
C#
106 lines
2.9 KiB
C#
using StoragePlugin.OverwatchSupport;
|
|
using Logging;
|
|
using OverwatchTranscript;
|
|
using TranscriptAnalysis.Receivers;
|
|
|
|
namespace TranscriptAnalysis
|
|
{
|
|
public interface IEventReceiver
|
|
{
|
|
void Init(string sourceFilename, ILog log, OverwatchLogosStorageHeader header);
|
|
void Finish();
|
|
}
|
|
|
|
public interface IEventReceiver<T> : IEventReceiver
|
|
{
|
|
void Receive(ActivateEvent<T> @event);
|
|
}
|
|
|
|
public class ReceiverSet
|
|
{
|
|
private readonly string sourceFilename;
|
|
private readonly ILog log;
|
|
private readonly ITranscriptReader reader;
|
|
private readonly OverwatchLogosStorageHeader header;
|
|
private readonly List<IEventReceiver> receivers = new List<IEventReceiver>();
|
|
|
|
public ReceiverSet(string sourceFilename, ILog log, ITranscriptReader reader, OverwatchLogosStorageHeader header)
|
|
{
|
|
this.sourceFilename = sourceFilename;
|
|
this.log = log;
|
|
this.reader = reader;
|
|
this.header = header;
|
|
}
|
|
|
|
public void InitAll()
|
|
{
|
|
Add(new LogReplaceReceiver());
|
|
Add(new DuplicateBlocksReceived());
|
|
Add(new NodesDegree());
|
|
}
|
|
|
|
public void FinishAll()
|
|
{
|
|
foreach (var r in receivers)
|
|
{
|
|
r.Finish();
|
|
}
|
|
receivers.Clear();
|
|
}
|
|
|
|
|
|
private void Add<T>(IEventReceiver<T> receiver)
|
|
{
|
|
var mux = GetMux<T>();
|
|
mux.Add(receiver);
|
|
|
|
receivers.Add(receiver);
|
|
receiver.Init(sourceFilename, log, header);
|
|
}
|
|
|
|
// We use a mux here because, for each time we call reader.AddEventHandler,
|
|
// The reader will perform one separate round of JSON deserialization.
|
|
// TODO: Move the mux into the reader.
|
|
private readonly Dictionary<string, IEventMux> muxes = new Dictionary<string, IEventMux>();
|
|
private IEventMux GetMux<T>()
|
|
{
|
|
var typeName = typeof(T).FullName;
|
|
if (string.IsNullOrEmpty(typeName)) throw new Exception("A!");
|
|
|
|
if (!muxes.ContainsKey(typeName))
|
|
{
|
|
muxes.Add(typeName, new EventMux<T>(reader));
|
|
}
|
|
return muxes[typeName];
|
|
}
|
|
}
|
|
|
|
public interface IEventMux
|
|
{
|
|
void Add(IEventReceiver receiver);
|
|
}
|
|
|
|
public class EventMux<T> : IEventMux
|
|
{
|
|
private readonly List<IEventReceiver<T>> receivers = new List<IEventReceiver<T>>();
|
|
|
|
public EventMux(ITranscriptReader reader)
|
|
{
|
|
reader.AddEventHandler<T>(Handle);
|
|
}
|
|
|
|
public void Add(IEventReceiver receiver)
|
|
{
|
|
if (receiver is IEventReceiver<T> r)
|
|
{
|
|
receivers.Add(r);
|
|
}
|
|
}
|
|
|
|
public void Handle(ActivateEvent<T> @event)
|
|
{
|
|
foreach (var r in receivers) r.Receive(@event);
|
|
}
|
|
}
|
|
}
|