diff --git a/src/ScadaLink.CLI/Commands/SiteCommands.cs b/src/ScadaLink.CLI/Commands/SiteCommands.cs index af9f690..ff43eff 100644 --- a/src/ScadaLink.CLI/Commands/SiteCommands.cs +++ b/src/ScadaLink.CLI/Commands/SiteCommands.cs @@ -53,6 +53,8 @@ public static class SiteCommands var descOption = new Option("--description") { Description = "Site description" }; var nodeAOption = new Option("--node-a-address") { Description = "Akka address for Node A" }; var nodeBOption = new Option("--node-b-address") { Description = "Akka address for Node B" }; + var grpcNodeAOption = new Option("--grpc-node-a-address") { Description = "gRPC address for Node A" }; + var grpcNodeBOption = new Option("--grpc-node-b-address") { Description = "gRPC address for Node B" }; var cmd = new Command("create") { Description = "Create a new site" }; cmd.Add(nameOption); @@ -60,6 +62,8 @@ public static class SiteCommands cmd.Add(descOption); cmd.Add(nodeAOption); cmd.Add(nodeBOption); + cmd.Add(grpcNodeAOption); + cmd.Add(grpcNodeBOption); cmd.SetAction(async (ParseResult result) => { var name = result.GetValue(nameOption)!; @@ -67,9 +71,11 @@ public static class SiteCommands var desc = result.GetValue(descOption); var nodeA = result.GetValue(nodeAOption); var nodeB = result.GetValue(nodeBOption); + var grpcNodeA = result.GetValue(grpcNodeAOption); + var grpcNodeB = result.GetValue(grpcNodeBOption); return await CommandHelpers.ExecuteCommandAsync( result, urlOption, formatOption, usernameOption, passwordOption, - new CreateSiteCommand(name, identifier, desc, nodeA, nodeB)); + new CreateSiteCommand(name, identifier, desc, nodeA, nodeB, grpcNodeA, grpcNodeB)); }); return cmd; } @@ -81,6 +87,8 @@ public static class SiteCommands var descOption = new Option("--description") { Description = "Site description" }; var nodeAOption = new Option("--node-a-address") { Description = "Akka address for Node A" }; var nodeBOption = new Option("--node-b-address") { Description = "Akka address for Node B" }; + var grpcNodeAOption = new Option("--grpc-node-a-address") { Description = "gRPC address for Node A" }; + var grpcNodeBOption = new Option("--grpc-node-b-address") { Description = "gRPC address for Node B" }; var cmd = new Command("update") { Description = "Update an existing site" }; cmd.Add(idOption); @@ -88,6 +96,8 @@ public static class SiteCommands cmd.Add(descOption); cmd.Add(nodeAOption); cmd.Add(nodeBOption); + cmd.Add(grpcNodeAOption); + cmd.Add(grpcNodeBOption); cmd.SetAction(async (ParseResult result) => { var id = result.GetValue(idOption); @@ -95,9 +105,11 @@ public static class SiteCommands var desc = result.GetValue(descOption); var nodeA = result.GetValue(nodeAOption); var nodeB = result.GetValue(nodeBOption); + var grpcNodeA = result.GetValue(grpcNodeAOption); + var grpcNodeB = result.GetValue(grpcNodeBOption); return await CommandHelpers.ExecuteCommandAsync( result, urlOption, formatOption, usernameOption, passwordOption, - new UpdateSiteCommand(id, name, desc, nodeA, nodeB)); + new UpdateSiteCommand(id, name, desc, nodeA, nodeB, grpcNodeA, grpcNodeB)); }); return cmd; } diff --git a/src/ScadaLink.CentralUI/Components/Pages/Admin/Sites.razor b/src/ScadaLink.CentralUI/Components/Pages/Admin/Sites.razor index dbc4755..59b1538 100644 --- a/src/ScadaLink.CentralUI/Components/Pages/Admin/Sites.razor +++ b/src/ScadaLink.CentralUI/Components/Pages/Admin/Sites.razor @@ -75,6 +75,18 @@ placeholder="akka.tcp://scadalink@host:port/user/site-communication" /> +
+
+ + +
+
+ + +
+
@if (_formError != null) {
@_formError
@@ -92,6 +104,8 @@ Description Node A Node B + gRPC Node A + gRPC Node B Data Connections Actions @@ -100,7 +114,7 @@ @if (_sites.Count == 0) { - No sites configured. + No sites configured. } @foreach (var site in _sites) @@ -112,6 +126,8 @@ @(site.Description ?? "—") @(site.NodeAAddress ?? "—") @(site.NodeBAddress ?? "—") + @(site.GrpcNodeAAddress ?? "—") + @(site.GrpcNodeBAddress ?? "—") @{ var conns = _siteConnections.GetValueOrDefault(site.Id); @@ -163,6 +179,8 @@ private string? _formDescription; private string? _formNodeAAddress; private string? _formNodeBAddress; + private string? _formGrpcNodeAAddress; + private string? _formGrpcNodeBAddress; private string? _formError; private bool _deploying; @@ -207,6 +225,8 @@ _formDescription = null; _formNodeAAddress = null; _formNodeBAddress = null; + _formGrpcNodeAAddress = null; + _formGrpcNodeBAddress = null; _formError = null; _showForm = true; } @@ -219,6 +239,8 @@ _formDescription = site.Description; _formNodeAAddress = site.NodeAAddress; _formNodeBAddress = site.NodeBAddress; + _formGrpcNodeAAddress = site.GrpcNodeAAddress; + _formGrpcNodeBAddress = site.GrpcNodeBAddress; _formError = null; _showForm = true; } @@ -248,6 +270,8 @@ _editingSite.Description = _formDescription?.Trim(); _editingSite.NodeAAddress = _formNodeAAddress?.Trim(); _editingSite.NodeBAddress = _formNodeBAddress?.Trim(); + _editingSite.GrpcNodeAAddress = _formGrpcNodeAAddress?.Trim(); + _editingSite.GrpcNodeBAddress = _formGrpcNodeBAddress?.Trim(); await SiteRepository.UpdateSiteAsync(_editingSite); } else @@ -261,7 +285,9 @@ { Description = _formDescription?.Trim(), NodeAAddress = _formNodeAAddress?.Trim(), - NodeBAddress = _formNodeBAddress?.Trim() + NodeBAddress = _formNodeBAddress?.Trim(), + GrpcNodeAAddress = _formGrpcNodeAAddress?.Trim(), + GrpcNodeBAddress = _formGrpcNodeBAddress?.Trim() }; await SiteRepository.AddSiteAsync(site); } diff --git a/src/ScadaLink.Commons/Entities/Sites/Site.cs b/src/ScadaLink.Commons/Entities/Sites/Site.cs index 4cb1aeb..d7e71be 100644 --- a/src/ScadaLink.Commons/Entities/Sites/Site.cs +++ b/src/ScadaLink.Commons/Entities/Sites/Site.cs @@ -8,6 +8,8 @@ public class Site public string? Description { get; set; } public string? NodeAAddress { get; set; } public string? NodeBAddress { get; set; } + public string? GrpcNodeAAddress { get; set; } + public string? GrpcNodeBAddress { get; set; } public Site(string name, string siteIdentifier) { diff --git a/src/ScadaLink.Commons/Messages/Management/SiteCommands.cs b/src/ScadaLink.Commons/Messages/Management/SiteCommands.cs index 572eef0..7b90ccd 100644 --- a/src/ScadaLink.Commons/Messages/Management/SiteCommands.cs +++ b/src/ScadaLink.Commons/Messages/Management/SiteCommands.cs @@ -2,8 +2,8 @@ namespace ScadaLink.Commons.Messages.Management; public record ListSitesCommand; public record GetSiteCommand(int SiteId); -public record CreateSiteCommand(string Name, string SiteIdentifier, string? Description, string? NodeAAddress = null, string? NodeBAddress = null); -public record UpdateSiteCommand(int SiteId, string Name, string? Description, string? NodeAAddress = null, string? NodeBAddress = null); +public record CreateSiteCommand(string Name, string SiteIdentifier, string? Description, string? NodeAAddress = null, string? NodeBAddress = null, string? GrpcNodeAAddress = null, string? GrpcNodeBAddress = null); +public record UpdateSiteCommand(int SiteId, string Name, string? Description, string? NodeAAddress = null, string? NodeBAddress = null, string? GrpcNodeAAddress = null, string? GrpcNodeBAddress = null); public record DeleteSiteCommand(int SiteId); public record ListAreasCommand(int SiteId); public record CreateAreaCommand(int SiteId, string Name, int? ParentAreaId); diff --git a/src/ScadaLink.ManagementService/ManagementActor.cs b/src/ScadaLink.ManagementService/ManagementActor.cs index 9506100..150baf4 100644 --- a/src/ScadaLink.ManagementService/ManagementActor.cs +++ b/src/ScadaLink.ManagementService/ManagementActor.cs @@ -596,7 +596,9 @@ public class ManagementActor : ReceiveActor { Description = cmd.Description, NodeAAddress = cmd.NodeAAddress, - NodeBAddress = cmd.NodeBAddress + NodeBAddress = cmd.NodeBAddress, + GrpcNodeAAddress = cmd.GrpcNodeAAddress, + GrpcNodeBAddress = cmd.GrpcNodeBAddress }; await repo.AddSiteAsync(site); await repo.SaveChangesAsync(); @@ -615,6 +617,8 @@ public class ManagementActor : ReceiveActor site.Description = cmd.Description; site.NodeAAddress = cmd.NodeAAddress; site.NodeBAddress = cmd.NodeBAddress; + site.GrpcNodeAAddress = cmd.GrpcNodeAAddress; + site.GrpcNodeBAddress = cmd.GrpcNodeBAddress; await repo.UpdateSiteAsync(site); await repo.SaveChangesAsync(); var commService = sp.GetService();