Пример #1
0
        public async Task <NullableValue> RegisterApplicationInstanceAsync(int applicationId, Guid agentUUID, long registerTime, AgentOsInfoRequest osInfoRequest,
                                                                           CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!_connectionManager.Ready)
            {
                return(NullableValue.Null);
            }

            var connection = _connectionManager.GetConnection();

            var client = new InstanceDiscoveryService.InstanceDiscoveryServiceClient(connection);

            var applicationInstance = new ApplicationInstance
            {
                ApplicationId = applicationId,
                AgentUUID     = agentUUID.ToString("N"),
                RegisterTime  = registerTime,
                Osinfo        = new OSInfo
                {
                    OsName    = osInfoRequest.OsName,
                    Hostname  = osInfoRequest.HostName,
                    ProcessNo = osInfoRequest.ProcessNo
                }
            };

            applicationInstance.Osinfo.Ipv4S.AddRange(osInfoRequest.IpAddress);

            return(await ExecuteWithCatch(async() =>
            {
                var applicationInstanceMapping = await client.registerInstanceAsync(applicationInstance, null, _config.GetTimeout(), cancellationToken);
                return new NullableValue(applicationInstanceMapping?.ApplicationInstanceId ?? 0);
            },
                                          () => NullableValue.Null,
                                          () => ExceptionHelpers.RegisterApplicationInstanceError));
        }
        private async Task RegisterApplicationInstance(GrpcConnection availableConnection, CancellationToken token)
        {
            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 retry = 0;
                var applicationInstanceId = 0;
                while (retry++ < 5 && DictionaryUtil.IsNull(applicationInstanceId))
                {
                    var applicationInstanceMapping = await instanceDiscoveryService.registerInstanceAsync(applicationInstance);

                    applicationInstanceId = applicationInstanceMapping.ApplicationInstanceId;
                    if (!DictionaryUtil.IsNull(applicationInstanceId))
                    {
                        break;
                    }
                    await Task.Delay(500, token);
                }

                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.");
                }
            }
        }
        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;
        }
Пример #4
0
        private async Task RegisterApplicationInstance(GrpcConnection availableConnection, CancellationToken token)
        {
            if (!DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationId) && 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    = PlatformInformation.GetOSName(),
                    ProcessNo = Process.GetCurrentProcess().Id
                };

                osInfo.Ipv4S.AddRange(GetIpV4S(hostName));

                var applicationInstance = new ApplicationInstance
                {
                    ApplicationId = RemoteDownstreamConfig.Agent.ApplicationId,
                    AgentUUID     = agentUUID,
                    RegisterTime  = registerTime,
                    Osinfo        = osInfo
                };

                var retry = 0;
                var applicationInstanceId = 0;
                while (retry++ < 5 && DictionaryUtil.IsNull(applicationInstanceId))
                {
                    var applicationInstanceMapping = await instanceDiscoveryService.registerInstanceAsync(applicationInstance);

                    applicationInstanceId = applicationInstanceMapping.ApplicationInstanceId;
                    if (!DictionaryUtil.IsNull(applicationInstanceId))
                    {
                        break;
                    }

                    await Task.Delay(500, token);
                }

                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.");
                }
            }
        }
        protected override async Task Execute(CancellationToken token)
        {
            var instanceDiscoveryService =
                new InstanceDiscoveryService.InstanceDiscoveryServiceClient(GrpcChannelManager.Instance.Channel);

            var heartbeat = new ApplicationInstanceHeartbeat
            {
                ApplicationInstanceId = RemoteDownstreamConfig.Agent.ApplicationInstanceId,
                HeartbeatTime         = DateTime.UtcNow.GetTimeMillis()
            };

            await instanceDiscoveryService.heartbeatAsync(heartbeat);
        }
Пример #6
0
        public async Task HeartbeatAsync(int applicationInstance, long heartbeatTime, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!_connectionManager.Ready)
            {
                return;
            }
            var connection = _connectionManager.GetConnection();

            var client = new InstanceDiscoveryService.InstanceDiscoveryServiceClient(connection);

            var heartbeat = new ApplicationInstanceHeartbeat
            {
                ApplicationInstanceId = applicationInstance,
                HeartbeatTime         = heartbeatTime
            };

            await ExecuteWithCatch(async() => await client.heartbeatAsync(heartbeat, null, _config.GetTimeout(), cancellationToken), () => ExceptionHelpers.HeartbeatError);
        }
Пример #7
0
        protected override async Task Execute(CancellationToken token)
        {
            if (DictionaryUtil.IsNull(RemoteDownstreamConfig.Agent.ApplicationInstanceId))
            {
                _logger.Debug($"{DateTime.Now} Heartbeat fail. Application instance is not registered.");
                return;
            }

            var availableConnection = GrpcConnectionManager.Instance.GetAvailableConnection();

            if (availableConnection == null)
            {
                _logger.Debug($"{DateTime.Now} Heartbeat fail. {GrpcConnectionManager.NotFoundErrorMessage}");
                return;
            }

            try
            {
                var instanceDiscoveryService =
                    new InstanceDiscoveryService.InstanceDiscoveryServiceClient(availableConnection.GrpcChannel);

                var heartbeat = new ApplicationInstanceHeartbeat
                {
                    ApplicationInstanceId = RemoteDownstreamConfig.Agent.ApplicationInstanceId,
                    HeartbeatTime         = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
                };

                await instanceDiscoveryService.heartbeatAsync(heartbeat);

                _logger.Debug($"{DateTime.Now} Heartbeat.");
            }
            catch (Exception e)
            {
                _logger.Debug($"{DateTime.Now} Heartbeat fail. {e.Message}");
                availableConnection.Failure();
            }
        }
        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();
            }
        }