in source/plugins/ruby/KubernetesApiClient.rb [673:793]
def getMetricNumericValue(metricName, metricVal)
metricValue = metricVal.downcase
begin
case metricName
when "memory"
if (metricValue.end_with?("ki"))
metricValue.chomp!("ki")
metricValue = Float(metricValue) * 1024.0 ** 1
elsif (metricValue.end_with?("mi"))
metricValue.chomp!("mi")
metricValue = Float(metricValue) * 1024.0 ** 2
elsif (metricValue.end_with?("gi"))
metricValue.chomp!("gi")
metricValue = Float(metricValue) * 1024.0 ** 3
elsif (metricValue.end_with?("ti"))
metricValue.chomp!("ti")
metricValue = Float(metricValue) * 1024.0 ** 4
elsif (metricValue.end_with?("pi"))
metricValue.chomp!("pi")
metricValue = Float(metricValue) * 1024.0 ** 5
elsif (metricValue.end_with?("ei"))
metricValue.chomp!("ei")
metricValue = Float(metricValue) * 1024.0 ** 6
elsif (metricValue.end_with?("zi"))
metricValue.chomp!("zi")
metricValue = Float(metricValue) * 1024.0 ** 7
elsif (metricValue.end_with?("yi"))
metricValue.chomp!("yi")
metricValue = Float(metricValue) * 1024.0 ** 8
elsif (metricValue.end_with?("k"))
metricValue.chomp!("k")
metricValue = Float(metricValue) * 1000.0 ** 1
elsif (metricValue.end_with?("m"))
metricValue.chomp!("m")
metricValue = Float(metricValue) * 1000.0 ** 2
elsif (metricValue.end_with?("g"))
metricValue.chomp!("g")
metricValue = Float(metricValue) * 1000.0 ** 3
elsif (metricValue.end_with?("t"))
metricValue.chomp!("t")
metricValue = Float(metricValue) * 1000.0 ** 4
elsif (metricValue.end_with?("p"))
metricValue.chomp!("p")
metricValue = Float(metricValue) * 1000.0 ** 5
elsif (metricValue.end_with?("e"))
metricValue.chomp!("e")
metricValue = Float(metricValue) * 1000.0 ** 6
elsif (metricValue.end_with?("z"))
metricValue.chomp!("z")
metricValue = Float(metricValue) * 1000.0 ** 7
elsif (metricValue.end_with?("y"))
metricValue.chomp!("y")
metricValue = Float(metricValue) * 1000.0 ** 8
else
metricValue = Float(metricValue)
end
when "cpu"
if (metricValue.end_with?("m"))
metricValue.chomp!("m")
metricValue = Float(metricValue) * 1000.0 ** 2
elsif (metricValue.end_with?("k"))
metricValue.chomp!("k")
metricValue = Float(metricValue) * 1000.0
else
metricValue = Float(metricValue) * 1000.0 ** 3
end
when "nvidia.com/gpu"
metricValue = Float(metricValue) * 1.0
when "amd.com/gpu"
metricValue = Float(metricValue) * 1.0
else
@Log.warn("getMetricNumericValue: Unsupported metric #{metricName}. Returning 0 for metric value")
metricValue = 0
end
rescue => error
@Log.warn("getMetricNumericValue failed: #{error} for metric #{metricName} with value #{metricVal}. Returning 0 for metric value")
return 0
end
return metricValue
end
def getResourcesAndContinuationToken(uri, api_group: nil)
continuationToken = nil
resourceInventory = nil
begin
@Log.info "KubernetesApiClient::getResourcesAndContinuationToken : Getting resources from Kube API using url: #{uri} @ #{Time.now.utc.iso8601}"
resourceInfo = getKubeResourceInfo(uri, api_group: api_group)
@Log.info "KubernetesApiClient::getResourcesAndContinuationToken : Done getting resources from Kube API using url: #{uri} @ #{Time.now.utc.iso8601}"
if !resourceInfo.nil?
@Log.info "KubernetesApiClient::getResourcesAndContinuationToken:Start:Parsing data for #{uri} using yajl @ #{Time.now.utc.iso8601}"
resourceInventory = Yajl::Parser.parse(StringIO.new(resourceInfo.body))
@Log.info "KubernetesApiClient::getResourcesAndContinuationToken:End:Parsing data for #{uri} using yajl @ #{Time.now.utc.iso8601}"
resourceInfo = nil
end
if (!resourceInventory.nil? && !resourceInventory["metadata"].nil?)
continuationToken = resourceInventory["metadata"]["continue"]
end
rescue => errorStr
@Log.warn "KubernetesApiClient::getResourcesAndContinuationToken:Failed in get resources for #{uri} and continuation token: #{errorStr}"
ApplicationInsightsUtility.sendExceptionTelemetry(errorStr)
resourceInventory = nil
end
return continuationToken, resourceInventory
end
def getKubeAPIServerUrl(env=ENV)
apiServerUrl = nil
begin
if env["KUBERNETES_SERVICE_HOST"] && env["KUBERNETES_PORT_443_TCP_PORT"]
apiServerUrl = "https://#{env["KUBERNETES_SERVICE_HOST"]}:#{env["KUBERNETES_PORT_443_TCP_PORT"]}"
else
@Log.warn "Kubernetes environment variable not set KUBERNETES_SERVICE_HOST: #{env["KUBERNETES_SERVICE_HOST"]} KUBERNETES_PORT_443_TCP_PORT: #{env["KUBERNETES_PORT_443_TCP_PORT"]}. Unable to form resourceUri"
end
rescue => errorStr
@Log.warn "KubernetesApiClient::getKubeAPIServerUrl:Failed #{errorStr}"
end
return apiServerUrl
end