| File: KubernetesResourceQuotaProvider.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes\Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.csproj (Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes; internal sealed class KubernetesResourceQuotaProvider : ResourceQuotaProvider { private const double MillicoresPerCore = 1000.0; private KubernetesMetadata _kubernetesMetadata; public KubernetesResourceQuotaProvider(KubernetesMetadata kubernetesMetadata) { _ = Throw.IfNull(kubernetesMetadata); _kubernetesMetadata = kubernetesMetadata; } public override ResourceQuota GetResourceQuota() { ResourceQuota quota = new() { BaselineCpuInCores = ConvertMillicoreToCpuUnit(_kubernetesMetadata.RequestsCpu), MaxCpuInCores = ConvertMillicoreToCpuUnit(_kubernetesMetadata.LimitsCpu), BaselineMemoryInBytes = _kubernetesMetadata.RequestsMemory, MaxMemoryInBytes = _kubernetesMetadata.LimitsMemory, }; if (quota.BaselineCpuInCores <= 0.0) { quota.BaselineCpuInCores = quota.MaxCpuInCores; } if (quota.BaselineMemoryInBytes == 0) { quota.BaselineMemoryInBytes = quota.MaxMemoryInBytes; } return quota; } private static double ConvertMillicoreToCpuUnit(ulong millicores) { return millicores / MillicoresPerCore; } }