Files
ubicloud/lib/billing_rate.rb
Enes Cakir 07e763ebe4 Add billing rate for additional GitHub cache storage
We charge $0.04 per GB/month for additional GitHub cache storage.

Unit price = 0.04 / 672 / 60
2025-03-29 09:47:49 +03:00

91 lines
3.0 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 "GitHubCacheStorage"
"#{amount.to_i} GiB Storage for GitHub Cache"
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