File: Linux\LinuxResourceQuotaProvider.cs
Web Access
Project: src\src\Libraries\Microsoft.Extensions.Diagnostics.ResourceMonitoring\Microsoft.Extensions.Diagnostics.ResourceMonitoring.csproj (Microsoft.Extensions.Diagnostics.ResourceMonitoring)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Extensions.Options;
 
namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux;
 
internal sealed class LinuxResourceQuotaProvider : ResourceQuotaProvider
{
    private readonly ILinuxUtilizationParser _parser;
    private bool _useLinuxCalculationV2;
 
    public LinuxResourceQuotaProvider(ILinuxUtilizationParser parser, IOptions<ResourceMonitoringOptions> options)
    {
        _parser = parser;
        _useLinuxCalculationV2 = options.Value.UseLinuxCalculationV2;
    }
 
    public override ResourceQuota GetResourceQuota()
    {
        var resourceQuota = new ResourceQuota();
        if (_useLinuxCalculationV2)
        {
            resourceQuota.MaxCpuInCores = _parser.GetCgroupLimitV2();
            resourceQuota.BaselineCpuInCores = _parser.GetCgroupRequestCpuV2();
        }
        else
        {
            resourceQuota.MaxCpuInCores = _parser.GetCgroupLimitedCpus();
            resourceQuota.BaselineCpuInCores = _parser.GetCgroupRequestCpu();
        }
 
        resourceQuota.MaxMemoryInBytes = _parser.GetAvailableMemoryInBytes();
        resourceQuota.BaselineMemoryInBytes = _parser.GetMinMemoryInBytes();
 
        if (resourceQuota.BaselineMemoryInBytes == 0)
        {
            resourceQuota.BaselineMemoryInBytes = resourceQuota.MaxMemoryInBytes;
        }
 
        return resourceQuota;
    }
}