Files
ubicloud/lib/billing_rate.rb
Eren Başak 44e1b31c69 Add Billing Rate Entries for k8s resources
Currently, we keep them as 0$, which will be changed after we move all
resources to an internal project (#2652)
2025-03-11 13:38:14 +02:00

89 lines
2.9 KiB
Ruby

# frozen_string_literal: true
require "yaml"
class BillingRate
# :nocov:
def self.freeze
rates
super
end
# :nocov:
def self.rates
@rates ||= YAML.load_file("config/billing_rates.yml", permitted_classes: [Time])
end
def self.from_resource_properties(resource_type, resource_family, location, active_at = Time.now)
rates.select {
_1["resource_type"] == resource_type && _1["resource_family"] == resource_family && _1["location"] == location && _1["active_from"] < active_at
}.max_by { _1["active_from"] }
end
def self.unit_price_from_resource_properties(resource_type, resource_family, location, active_at = Time.now)
from_resource_properties(resource_type, resource_family, location, active_at)&.[]("unit_price")&.to_f
end
def self.from_resource_type(resource_type)
rates.select {
_1["resource_type"] == resource_type
}
end
def self.from_id(billing_rate_id)
rates.find { _1["id"] == billing_rate_id }
end
def self.line_item_description(resource_type, resource_family, amount)
case resource_type
when "VmCores"
"#{resource_family}-#{(amount * 2).to_i} Virtual Machine"
when "VmVCpu"
"#{resource_family}-#{amount.to_i} Virtual Machine"
when "VmStorage"
"#{amount.to_i} GiB Storage for Virtual Machine"
when "IPAddress"
"#{resource_family} Address"
when "PostgresCores"
"#{resource_family}-#{(amount * 2).to_i} backed PostgreSQL Database"
when "PostgresVCpu"
"#{resource_family}-#{amount.to_i} backed PostgreSQL Database"
when "PostgresStandbyCores"
"#{resource_family}-#{(amount * 2).to_i} backed PostgreSQL Database (HA Standby)"
when "PostgresStandbyVCpu"
"#{resource_family}-#{amount.to_i} backed PostgreSQL Database (HA Standby)"
when "PostgresStorage"
"#{amount.to_i} GiB Storage for PostgreSQL Database"
when "PostgresStandbyStorage"
"#{amount.to_i} GiB Storage for PostgreSQL Database (HA Standby)"
when "GitHubRunnerMinutes"
"#{resource_family} GitHub Runner"
when "GitHubRunnerConcurrency"
"Additional GitHub Runner Concurrency"
when "InferenceTokens"
"#{resource_family} Inference Tokens"
when "Gpu"
"#{amount.to_i}x #{PciDevice.device_name(resource_family)}"
when "KubernetesControlPlaneVCpu"
"#{resource_family}-#{amount.to_i} backed Kubernetes Control Plane Node"
when "KubernetesWorkerVCpu"
"#{resource_family}-#{amount.to_i} backed Kubernetes Worker Node"
when "KubernetesWorkerStorage"
"#{amount.to_i} GiB Storage for Kubernetes Worker Node"
else
fail "BUG: Unknown resource type for line item description"
end
end
def self.line_item_usage(resource_type, resource_family, amount, duration)
case resource_type
when "GitHubRunnerMinutes"
"#{amount.to_i} minutes"
when "InferenceTokens"
"#{amount.to_i} tokens"
else
"#{duration} minutes"
end
end
end