/*public Task SendMessage(string message)
         * {
         *  return Clients.Others.SendAsync("Send", message);
         * }*/

        public async Task SendSystemReport(SystemReportDto report)
        {
            // клиент прислал данные, сохраняем в БД
            var ctx           = Context.GetHttpContext();
            var clientAddress = $"{ctx.Connection.RemoteIpAddress.MapToIPv4()}:{ctx.Connection.RemotePort}";

            await _reportRepository.StoreSystemReport(clientAddress, report.RAMInfo, report.CPUInfo, report.DisksInfo);
        }
Ejemplo n.º 2
0
        private static async void SendReportLoop()
        {
            while (true)
            {
                // собираем данные
                // диски
                List <DriveInfo> drives = DriveInfo.GetDrives().Where(d => d.IsReady).ToList();
                var totalDiskSpace      = drives.Sum(d => d.TotalSize / 1024 / 1024);
                var freeDiskSpace       = drives.Sum(d => d.AvailableFreeSpace / 1024 / 1024);
                var disksInfo           = new DisksInfo {
                    TotalMb = (int)totalDiskSpace, FreeMb = (int)freeDiskSpace
                };
                // ОЗУ
                var ramInfo = new RAMInfo();
                if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
                {
                    ramInfo = GetUnixMetrics();
                }
                else
                {
                    ramInfo = GetWindowsMetrics();
                }
                // ЦП
                var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
                var value      = cpuCounter.NextValue();
                if (Math.Abs(value) <= 0.00)
                {
                    value = cpuCounter.NextValue();
                }
                var cpuInfo = new CPUInfo {
                    UsedPercent = (int)value
                };

                // подготавливаем данные
                var data = new SystemReportDto {
                    DisksInfo = disksInfo, RAMInfo = ramInfo, CPUInfo = cpuInfo
                };

                // отправляем данные на сервер
                Console.WriteLine($"{DateTime.Now}: отправка данных на сервер.");
                if (_HubConnection.State != HubConnectionState.Connected)
                {
                    await _HubConnection.StartAsync();
                }
                await _HubConnection.SendAsync("SendSystemReport", data);

                Thread.Sleep(_delaySeconds * 1000);
            }
        }