diff --git a/AgileConfig.Server.Apisite/AgileConfig.Server.Apisite.csproj b/AgileConfig.Server.Apisite/AgileConfig.Server.Apisite.csproj index 652fa0c..8d3b6c3 100644 --- a/AgileConfig.Server.Apisite/AgileConfig.Server.Apisite.csproj +++ b/AgileConfig.Server.Apisite/AgileConfig.Server.Apisite.csproj @@ -5,7 +5,7 @@ InProcess 1.5.3.1 1.5.2 - 1.5.3.1 + 1.5.3.2 Linux diff --git a/AgileConfig.Server.Apisite/InitService.cs b/AgileConfig.Server.Apisite/InitService.cs index 57134b2..bb8ba69 100644 --- a/AgileConfig.Server.Apisite/InitService.cs +++ b/AgileConfig.Server.Apisite/InitService.cs @@ -4,24 +4,34 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using AgileConfig.Server.IService; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace AgileConfig.Server.Apisite { public class InitService: IHostedService { - private IRemoteServerNodeProxy _remoteServerNodeProxy; - private IEventRegister _eventRegister; - public InitService(IRemoteServerNodeProxy proxy, IEventRegister eventRegister) + private readonly IRemoteServerNodeProxy _remoteServerNodeProxy; + private readonly IEventRegister _eventRegister; + private readonly ISettingService _settingService; + private readonly IServerNodeService _serverNodeService; + public InitService(IServiceScopeFactory serviceScopeFactory) { - _remoteServerNodeProxy = proxy; - _eventRegister = eventRegister; + using (var scope = serviceScopeFactory.CreateScope()) + { + _remoteServerNodeProxy = scope.ServiceProvider.GetService(); + _eventRegister = scope.ServiceProvider.GetService(); + _settingService = scope.ServiceProvider.GetService(); + _serverNodeService = scope.ServiceProvider.GetService(); + } } public Task StartAsync(CancellationToken cancellationToken) { if (Appsettings.IsAdminConsoleMode) { + _serverNodeService.InitWatchNodeAsync(); + _settingService.InitDefaultEnvironment(); _remoteServerNodeProxy.TestEchoAsync(); _eventRegister.Init(); } diff --git a/AgileConfig.Server.Apisite/appsettings.Development.json b/AgileConfig.Server.Apisite/appsettings.Development.json index 5c4e9f7..99ff1da 100644 --- a/AgileConfig.Server.Apisite/appsettings.Development.json +++ b/AgileConfig.Server.Apisite/appsettings.Development.json @@ -7,6 +7,7 @@ } }, "adminConsole": true, + "nodes": "", // 需è¦�监控的节点 "preview_mode": true, "db": { "provider": "sqlite", //sqlite,mysql,sqlserver,npgsql,oracle @@ -28,9 +29,9 @@ }, "JwtSetting": { - "SecurityKey": "dfasf343453fsdfa,./,./sdfasf34r3hfhfdb", // ÃÜÔ¿ - "Issuer": "agileconfig.admin", // °ä·¢Õß - "Audience": "agileconfig.admin", // ½ÓÊÕÕß - "ExpireSeconds": 86400 // ¹ýÆÚʱ¼ä + "SecurityKey": "dfasf343453fsdfa,./,./sdfasf34r3hfhfdb", // ��Կ + "Issuer": "agileconfig.admin", // �䷢�� + "Audience": "agileconfig.admin", // ������ + "ExpireSeconds": 86400 // ����ʱ�� } } diff --git a/AgileConfig.Server.Apisite/appsettings.json b/AgileConfig.Server.Apisite/appsettings.json index 0533fd4..774fe9b 100644 --- a/AgileConfig.Server.Apisite/appsettings.json +++ b/AgileConfig.Server.Apisite/appsettings.json @@ -7,6 +7,7 @@ } }, "adminConsole": false, + "nodes": "", // ÐèÒª¼à¿ØµÄ½Úµã "preview_mode": false, "db": { "provider": "", //sqlite,mysql,sqlserver,npgsql,oracle diff --git a/AgileConfig.Server.IService/IServerNodeService.cs b/AgileConfig.Server.IService/IServerNodeService.cs index 518193a..db97ceb 100644 --- a/AgileConfig.Server.IService/IServerNodeService.cs +++ b/AgileConfig.Server.IService/IServerNodeService.cs @@ -17,5 +17,11 @@ namespace AgileConfig.Server.IService Task UpdateAsync(ServerNode node); Task> GetAllNodesAsync(); + + /// + /// æ ¹æ�®appsettings里的nodesé…�ç½®åˆ�始化æœ�务器节点 + /// + /// + Task InitWatchNodeAsync(); } } diff --git a/AgileConfig.Server.Service/RemoteServerNodeProxy.cs b/AgileConfig.Server.Service/RemoteServerNodeProxy.cs index cd2fad6..0a044ce 100644 --- a/AgileConfig.Server.Service/RemoteServerNodeProxy.cs +++ b/AgileConfig.Server.Service/RemoteServerNodeProxy.cs @@ -33,7 +33,7 @@ namespace AgileConfig.Server.Service } } - private IServerNodeService GetGerverNodeService() + private IServerNodeService GetServerNodeService() { return new ServerNodeService(new FreeSqlContext(FreeSQL.Instance)); } @@ -222,7 +222,7 @@ namespace AgileConfig.Server.Service public async Task TestEchoAsync(string address) { - using var service = GetGerverNodeService(); + using var service = GetServerNodeService(); var node = await service.GetAsync(address); try { @@ -251,7 +251,7 @@ namespace AgileConfig.Server.Service { while (true) { - using var service = GetGerverNodeService(); + using var service = GetServerNodeService(); var nodes = await service.GetAllNodesAsync(); foreach (var node in nodes) diff --git a/AgileConfig.Server.Service/ServerNodeService.cs b/AgileConfig.Server.Service/ServerNodeService.cs index aac9d26..b16cd8c 100644 --- a/AgileConfig.Server.Service/ServerNodeService.cs +++ b/AgileConfig.Server.Service/ServerNodeService.cs @@ -76,5 +76,57 @@ namespace AgileConfig.Server.Service return result; } + + + public async Task InitWatchNodeAsync() + { + var count = await _dbContext.ServerNodes.Select.CountAsync(); + if (count > 0) + { + return false; + } + var nodes = Global.Config["nodes"]; + var addresses = new List(); + if (!string.IsNullOrEmpty(nodes)) + { + var arr = nodes.Split(','); + foreach (var item in arr) + { + var address = ""; + if (item.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + address = item; + } + else + { + address = "http://" + item; + } + + addresses.Add(address); + } + } + + foreach (var address in addresses) + { + var node = await _dbContext.ServerNodes.Where(n => n.Address == address).ToOneAsync(); + if (node == null) + { + node = new ServerNode() + { + Address = address, + CreateTime = DateTime.Now, + }; + await _dbContext.ServerNodes.AddAsync(node); + } + } + + var result = 0; + if (addresses.Count > 0) + { + result = await _dbContext.SaveChangesAsync(); + } + + return result > 0; + } } } diff --git a/AgileConfig.Server.Service/SettingService.cs b/AgileConfig.Server.Service/SettingService.cs index fa16326..f7df4ab 100644 --- a/AgileConfig.Server.Service/SettingService.cs +++ b/AgileConfig.Server.Service/SettingService.cs @@ -143,7 +143,6 @@ namespace AgileConfig.Server.Service public async Task GetEnvironmentList() { - await InitDefaultEnvironment(); var env = await _dbContext.Settings.Where(x => x.Id == DefaultEnvironmentKey).FirstAsync(); return env.Value.ToUpper().Split(',');