Beispiel #1
0
            public async Task <bool?> Register()
            {
                var logger = Utility.CreateLogger(nameof(KamajiClient), nameof(Register));

                try
                {
                    NodeRegisterModel model = new NodeRegisterModel();
                    model.Address = DataSources.Jsons.AppSettings.Config.Address;

                    IResourceMonitor resourceMonitor = SystemInfo.CreateResourceMonitor();
                    model.ThreadCount  = SystemInfo.ProcessorCount;
                    model.TotalMemory  = resourceMonitor.GetTotalMemory().ConvertTo <int>();
                    model.ComputerName = SystemInfo.ComputerName();
                    model.IpAddress    = SystemInfo.GetIpv4Address()?.ToString();

                    string[] arr = model.Address.Split(':');
                    if (arr.Length > 1 && int.TryParse(arr[arr.Length - 1], out int port))
                    {
                        model.Port = port;
                    }

                    bool success = await RestClient.Instance.PostAsync <bool>($"{KamajiNodeActions.Register}", model);

                    await logger.Code(1).Info("A token has been taken and conected to Kamaji").SaveAsync();

                    return(success);
                }
                catch (Exception ex)
                {
                    await logger.Code(1).Error(ex).SaveAsync();

                    return(null);
                }
            }
Beispiel #2
0
        public Task <IActionResult> Register([FromBody] NodeRegisterModel node)
        {
            return(this.ResultAsync(async() =>
            {
                bool ret = false;
                if (node.IsModelValid())
                {
                    INodeModel model = null;
                    if (!String.IsNullOrEmpty(node.Address))
                    {
                        model = await this.Db.Nodes.GetBy(node.Address);
                    }

                    if (null == model)
                    {
                        model = this.Db.ModelFactory.CreateNodeModel();
                    }

                    model.CopyPropertiesFrom(node);

                    model.ConnectionStatus = NodeConnectionStatus.Online;
                    model.LastConnectionTime = DateTime.Now;

                    model.CpuUsage = 0;
                    model.MemoryUsage = 0;
                    model.TotalBeatsCount = 0;

                    model = await this.Db.Nodes.Save(model);

                    NodeResourceUsages.Instance.Get(model.Address)?.Reset();

                    _ = this.HandleOfflineData(node.Address);

                    ret = true;

                    if (!_hasAny)
                    {
                        _hasAny = true;
                        StartNanoServices();
                    }
                }

                return ret;
            }));
        }