public async Task <NullableValue> RegisterApplicationAsync(string applicationCode, CancellationToken cancellationToken = default(CancellationToken)) { if (!_connectionManager.Ready) { return(NullableValue.Null); } var connection = _connectionManager.GetConnection(); var client = new ApplicationRegisterService.ApplicationRegisterServiceClient(connection); return(await new Call(_logger, _connectionManager).Execute(async() => { var applicationMapping = await client.applicationCodeRegisterAsync( new Application { ApplicationCode = applicationCode }, null, _config.GetTimeout(), cancellationToken); return new NullableValue(applicationMapping?.Application?.Value ?? 0); }, () => NullableValue.Null, () => ExceptionHelpers.RegisterApplicationError)); }
protected override async Task Initializing(CancellationToken token) { var application = new Application { ApplicationCode = AgentConfig.ApplicationCode }; var applicationRegisterService = new ApplicationRegisterService.ApplicationRegisterServiceClient(GrpcChannelManager.Instance.Channel); var applicationId = default(int?); while (!applicationId.HasValue || DictionaryUtil.IsNull(applicationId.Value)) { var applicationMapping = await applicationRegisterService.applicationCodeRegisterAsync(application); applicationId = applicationMapping?.Application?.Value; } RemoteDownstreamConfig.Agent.ApplicationId = applicationId.Value; var instanceDiscoveryService = new InstanceDiscoveryService.InstanceDiscoveryServiceClient(GrpcChannelManager.Instance.Channel); var agentUUID = Guid.NewGuid().ToString().Replace("-", ""); var registerTime = DateTime.UtcNow.GetTimeMillis(); var hostName = Dns.GetHostName(); var osInfo = new OSInfo { Hostname = hostName, OsName = Environment.OSVersion.ToString(), ProcessNo = Process.GetCurrentProcess().Id }; // todo fix Device not configured //var ipv4s = Dns.GetHostAddresses(hostName); //foreach (var ipAddress in ipv4s.Where(x => x.AddressFamily == AddressFamily.InterNetwork)) // osInfo.Ipv4S.Add(ipAddress.ToString()); var applicationInstance = new ApplicationInstance { ApplicationId = applicationId.Value, AgentUUID = agentUUID, RegisterTime = registerTime, Osinfo = osInfo }; var applicationInstanceId = 0; while (DictionaryUtil.IsNull(applicationInstanceId)) { var applicationInstanceMapping = await instanceDiscoveryService.registerInstanceAsync(applicationInstance); applicationInstanceId = applicationInstanceMapping.ApplicationInstanceId; } RemoteDownstreamConfig.Agent.ApplicationInstanceId = applicationInstanceId; }
private async Task RegisterApplication(GrpcConnection availableConnection, CancellationToken token) { if (DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationId)) { var application = new Application { ApplicationCode = AgentConfig.ApplicationCode }; var applicationRegisterService = new ApplicationRegisterService.ApplicationRegisterServiceClient(availableConnection.GrpcChannel); var retry = 0; var applicationId = 0; while (retry++ < 3 && DictionaryUtil.IsNull(applicationId)) { var applicationMapping = await applicationRegisterService.applicationCodeRegisterAsync(application); applicationId = applicationMapping?.Application?.Value ?? 0; if (!DictionaryUtil.IsNull(applicationId)) { break; } await Task.Delay(500, token); } if (DictionaryUtil.IsNull(applicationId)) { _logger.Warning( "Register application fail. Server response null."); return; } _logger.Info( $"Register application success. [applicationCode] = {application.ApplicationCode}. [applicationId] = {applicationId}"); RemoteDownstreamConfig.Agent.ApplicationId = applicationId; } }
protected override async Task Execute(CancellationToken token) { if (!DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationId) && !DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationInstanceId)) { return; } var availableConnection = GrpcConnectionManager.Instance.GetAvailableConnection(); if (availableConnection == null) { _logger.Warning( $"Register application fail. {GrpcConnectionManager.NotFoundErrorMessage}"); return; } try { if (DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationId)) { var application = new Application { ApplicationCode = AgentConfig.ApplicationCode }; var applicationRegisterService = new ApplicationRegisterService.ApplicationRegisterServiceClient(availableConnection .GrpcChannel); var applicationMapping = await applicationRegisterService.applicationCodeRegisterAsync(application); await Task.Delay(TimeSpan.FromSeconds(1), token); var applicationId = applicationMapping?.Application?.Value; if (!applicationId.HasValue || DictionaryUtil.IsNull(applicationId.Value)) { _logger.Warning( "Register application fail. Server response null."); return; } _logger.Info( $"Register application success. [applicationCode] = {application.ApplicationCode}. [applicationId] = {applicationId.Value}"); RemoteDownstreamConfig.Agent.ApplicationId = applicationId.Value; } if (DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationInstanceId)) { var instanceDiscoveryService = new InstanceDiscoveryService.InstanceDiscoveryServiceClient(availableConnection.GrpcChannel); var agentUUID = Guid.NewGuid().ToString("N"); var registerTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var hostName = Dns.GetHostName(); var osInfo = new OSInfo { Hostname = hostName, OsName = Environment.OSVersion.ToString(), ProcessNo = Process.GetCurrentProcess().Id }; // todo fix Device not configured //var ipv4s = Dns.GetHostAddresses(hostName); //foreach (var ipAddress in ipv4s.Where(x => x.AddressFamily == AddressFamily.InterNetwork)) // osInfo.Ipv4S.Add(ipAddress.ToString()); var applicationInstance = new ApplicationInstance { ApplicationId = RemoteDownstreamConfig.Agent.ApplicationId, AgentUUID = agentUUID, RegisterTime = registerTime, Osinfo = osInfo }; var applicationInstanceId = 0; var retry = 0; while (retry++ <= 3 && DictionaryUtil.IsNull(applicationInstanceId)) { var applicationInstanceMapping = await instanceDiscoveryService.registerInstanceAsync(applicationInstance); await Task.Delay(TimeSpan.FromSeconds(1), token); applicationInstanceId = applicationInstanceMapping.ApplicationInstanceId; } if (!DictionaryUtil.IsNull(applicationInstanceId)) { RemoteDownstreamConfig.Agent.ApplicationInstanceId = applicationInstanceId; _logger.Info( $"Register application instance success. [applicationInstanceId] = {applicationInstanceId}"); } else { _logger.Warning( "Register application instance fail. Server response null."); } } } catch (Exception exception) { _logger.Warning($"Try register application fail. {exception.Message}"); availableConnection?.Failure(); } }