/*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); }
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); } }