private async Task <string[]> GetFreeTierDeployments(IKubernetes client, CancellationToken cancellationToken = default) { var deployments = await K8sOperations.ListAllDeployments(client, "default"); var freeDeployments = deployments.Where(d => d.Spec.Replicas == 1).Select(d => d.Metadata.Name).ToArray(); return(freeDeployments); }
protected override async Task OnExecuteAsync(CommandLineApplication app) { if (!ValidateParameters()) { return; } var kubeClientCache = new KubernetesClientCache(); var kubeClient = kubeClientCache.Get("CheckPods", File.ReadAllText(this.K8sConfig)); var pods = await K8sOperations.ListPodsAsync(kubeClient, "default"); var freeTierDeployArray = await GetFreeTierDeployments(kubeClient); var mdmClient = new MdmClient(MdmClientCertPath, MdmClientCertPasswd, Region); var podMetrics = await mdmClient.GetDimensionCountMetricsAsync(MetricsName, TimeSpan.FromHours(1), "InstanceId"); if (podMetrics == null) { Console.WriteLine($"Fail to get metrics for {Region}"); return; } bool foundFreeTier = false; Parallel.ForEach(pods, pod => { bool isFreeTier = isFreeTierPod(freeTierDeployArray, pod.Metadata.Name); if (isFreeTier) { foundFreeTier = true; } var hasMetrics = podMetrics.TryGetValue(pod.Metadata.Name, out double count); if (!hasMetrics) { if (isFreeTier) { Console.WriteLine($"Free pod {pod.Metadata.Name} miss metrics"); } else { Console.WriteLine($"{pod.Metadata.Name} miss metrics"); } } }); if (!foundFreeTier) { Console.WriteLine("Does not see free tier"); } }