refactor: rename ScadaLink → ZB.MOM.WW.ScadaBridge (code + projects + namespaces)
Solution + 23 src projects + 26 test projects renamed; folders, csproj, namespaces, and ScadaLinkDbContext/ScadaBridgeDbContext class updated. ActorSystem "scadalink" → "scadabridge", Akka seed-node URLs migrated. SQL roles/logins, LDAP domains, CLI command name, and CLI config dir (~/.scadalink → ~/.scadabridge) also renamed. Build green; 5 Host.Tests fail awaiting SQL login rename in next commit. Pre-existing StaleTagMonitor timing flakes unchanged. Rename script committed at tools/rename-to-scadabridge.sh.
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using Akka.Actor;
|
||||
using Akka.Cluster;
|
||||
using ZB.MOM.WW.ScadaBridge.Commons.Messages.Health;
|
||||
using ZB.MOM.WW.ScadaBridge.HealthMonitoring;
|
||||
using ZB.MOM.WW.ScadaBridge.Host.Actors;
|
||||
|
||||
namespace ZB.MOM.WW.ScadaBridge.Host.Health;
|
||||
|
||||
/// <summary>
|
||||
/// Provides cluster node statuses from Akka.NET cluster membership for health reporting.
|
||||
/// </summary>
|
||||
public class AkkaClusterNodeProvider : IClusterNodeProvider
|
||||
{
|
||||
private readonly AkkaHostedService _akkaService;
|
||||
private readonly string _siteRole;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new <see cref="AkkaClusterNodeProvider"/>.
|
||||
/// </summary>
|
||||
/// <param name="akkaService">The Akka hosted service providing access to the actor system.</param>
|
||||
/// <param name="siteRole">The Akka cluster role used to filter relevant member nodes.</param>
|
||||
public AkkaClusterNodeProvider(AkkaHostedService akkaService, string siteRole)
|
||||
{
|
||||
_akkaService = akkaService;
|
||||
_siteRole = siteRole;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool SelfIsPrimary
|
||||
{
|
||||
get
|
||||
{
|
||||
var system = _akkaService.ActorSystem;
|
||||
if (system == null) return false;
|
||||
var cluster = Cluster.Get(system);
|
||||
if (cluster.SelfMember.Status != MemberStatus.Up) return false;
|
||||
var leader = cluster.State.Leader;
|
||||
return leader != null && leader.Equals(cluster.SelfAddress);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyList<NodeStatus> GetClusterNodes()
|
||||
{
|
||||
var system = _akkaService.ActorSystem;
|
||||
if (system == null) return [];
|
||||
|
||||
var cluster = Cluster.Get(system);
|
||||
var selfAddress = cluster.SelfAddress;
|
||||
var leader = cluster.State.Leader;
|
||||
|
||||
var nodes = new List<NodeStatus>();
|
||||
foreach (var member in cluster.State.Members)
|
||||
{
|
||||
if (!member.HasRole(_siteRole))
|
||||
continue;
|
||||
|
||||
var hostname = member.Address.Host ?? member.Address.ToString();
|
||||
var isOnline = member.Status == MemberStatus.Up;
|
||||
var isLeader = member.Address.Equals(leader);
|
||||
var role = isLeader ? "Primary" : "Standby";
|
||||
|
||||
nodes.Add(new NodeStatus(hostname, isOnline, role));
|
||||
}
|
||||
|
||||
// If we have unreachable members, add them as offline
|
||||
foreach (var unreachable in cluster.State.Unreachable)
|
||||
{
|
||||
if (!unreachable.HasRole(_siteRole))
|
||||
continue;
|
||||
|
||||
// Don't duplicate if already in members list
|
||||
if (nodes.Any(n => n.Hostname == (unreachable.Address.Host ?? unreachable.Address.ToString())))
|
||||
continue;
|
||||
|
||||
var hostname = unreachable.Address.Host ?? unreachable.Address.ToString();
|
||||
nodes.Add(new NodeStatus(hostname, false, "Standby"));
|
||||
}
|
||||
|
||||
return nodes;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user