/
ibavca1
/
A4.ControlPost
Обзор
Документация
Войти
/
ibavca1
/
A4.ControlPost
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/A4.ControlPost.Core/CpuHealthCheck.cs
50 строк
2 KB
ibavcagmailcom
Добавлен мониторинг системы
21 май 2026, 06:21
21 май 2026, 06:21
de1b8f0
Код
Авторство
О чём код?
using Microsoft.Extensions.Diagnostics.HealthChecks; using System.Diagnostics; #if WINDOWS using System.Runtime.InteropServices; #endif namespace A4.ControlPost.Core; public class CpuHealthCheck : IHealthCheck { private readonly TimeSpan _measurementInterval; private readonly double _maxCpuPercent; public CpuHealthCheck(TimeSpan measurementInterval = default, double maxCpuPercent = 90.0) { _measurementInterval = measurementInterval == default ? TimeSpan.FromSeconds(1) : measurementInterval; _maxCpuPercent = maxCpuPercent; } public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { if (OperatingSystem.IsLinux()) { await Task.CompletedTask; return HealthCheckResult.Unhealthy("CPU health check доступен только на Windows."); } else if (OperatingSystem.IsWindows()) { try { using var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); var firstValue = cpuCounter.NextValue(); await Task.Delay(_measurementInterval, cancellationToken); var cpuUsage = cpuCounter.NextValue(); if (cpuUsage < _maxCpuPercent) { return HealthCheckResult.Healthy($"CPU загружен на {cpuUsage:F2}%"); } else { return HealthCheckResult.Unhealthy($"Перегрузка CPU: {cpuUsage:F2}% > {_maxCpuPercent}%"); } } catch (System.Exception ex) { return HealthCheckResult.Unhealthy($"Ошибка мониторинга CPU: {ex.Message}"); } } return HealthCheckResult.Unhealthy("CPU health check не доступен."); } }