default.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package basic
  2. import (
  3. "github.com/opencost/opencost/core/pkg/model/kubemodel"
  4. "github.com/opencost/opencost/core/pkg/pricing"
  5. "github.com/opencost/opencost/core/pkg/unit"
  6. )
  7. const DefaultClusterPricePerHour float64 = 0.0
  8. const DefaultNetworkLocalPricePerGiB float64 = 0.0
  9. const DefaultNetworkCrossZonePricePerGiB float64 = 0.01
  10. const DefaultNetworkCrossRegionPricePerGiB float64 = 0.01
  11. const DefaultNetworkInternetPricePerGiB float64 = 0.143
  12. const DefaultNetworkNATPricePerGiB float64 = 0.045
  13. const DefaultNodePricePerVCPUHour float64 = 0.031611
  14. const DefaultNodePricePerRAMGiBHour float64 = 0.004237
  15. const DefaultNodePricePerGPUHour float64 = 0.95
  16. const DefaultNodePricePerLocalDiskGiBHour float64 = 0.0001096
  17. const DefaultPersistentVolumePricePerGiBHour float64 = 0.00005479452
  18. const DefaultServicePricePerHour float64 = 0.025
  19. func GetDefaultPricingSet() *pricing.PricingSet {
  20. return &pricing.PricingSet{
  21. ClusterPricing: GetDefaultClusterPricing(),
  22. NetworkPricing: GetDefaultNetworkPricing(),
  23. NodePricing: GetDefaultNodePricing(),
  24. PersistentVolumePricing: GetDefaultPersistentVolumePricing(),
  25. ServicePricing: GetDefaultServicePricing(),
  26. }
  27. }
  28. func GetDefaultClusterPricing() []*pricing.ClusterPricing {
  29. return []*pricing.ClusterPricing{
  30. {
  31. Properties: pricing.ClusterPricingProperties{},
  32. Prices: pricing.Prices{
  33. pricing.ResourceCluster: {
  34. Unit: unit.Hour,
  35. Price: DefaultClusterPricePerHour,
  36. },
  37. },
  38. },
  39. }
  40. }
  41. func GetDefaultNetworkPricing() []*pricing.NetworkPricing {
  42. return []*pricing.NetworkPricing{
  43. {
  44. Properties: pricing.NetworkPricingProperties{
  45. TrafficDirection: kubemodel.TrafficDirectionEgress,
  46. TrafficType: kubemodel.TrafficTypeLocal,
  47. IsNatGateway: false,
  48. },
  49. Prices: pricing.Prices{
  50. pricing.ResourceNetworkTraffic: {
  51. Unit: unit.GiB,
  52. Price: DefaultNetworkLocalPricePerGiB,
  53. },
  54. },
  55. },
  56. {
  57. Properties: pricing.NetworkPricingProperties{
  58. TrafficDirection: kubemodel.TrafficDirectionEgress,
  59. TrafficType: kubemodel.TrafficTypeCrossZone,
  60. IsNatGateway: false,
  61. },
  62. Prices: pricing.Prices{
  63. pricing.ResourceNetworkTraffic: {
  64. Unit: unit.GiB,
  65. Price: DefaultNetworkCrossZonePricePerGiB,
  66. },
  67. },
  68. },
  69. {
  70. Properties: pricing.NetworkPricingProperties{
  71. TrafficDirection: kubemodel.TrafficDirectionEgress,
  72. TrafficType: kubemodel.TrafficTypeCrossRegion,
  73. IsNatGateway: false,
  74. },
  75. Prices: pricing.Prices{
  76. pricing.ResourceNetworkTraffic: {
  77. Unit: unit.GiB,
  78. Price: DefaultNetworkCrossRegionPricePerGiB,
  79. },
  80. },
  81. },
  82. {
  83. Properties: pricing.NetworkPricingProperties{
  84. TrafficDirection: kubemodel.TrafficDirectionEgress,
  85. TrafficType: kubemodel.TrafficTypeInternet,
  86. IsNatGateway: false,
  87. },
  88. Prices: pricing.Prices{
  89. pricing.ResourceNetworkTraffic: {
  90. Unit: unit.GiB,
  91. Price: DefaultNetworkInternetPricePerGiB,
  92. },
  93. },
  94. },
  95. {
  96. Properties: pricing.NetworkPricingProperties{
  97. TrafficDirection: kubemodel.TrafficDirectionEgress,
  98. TrafficType: kubemodel.TrafficTypeInternet,
  99. IsNatGateway: true,
  100. },
  101. Prices: pricing.Prices{
  102. pricing.ResourceNetworkTraffic: {
  103. Unit: unit.GiB,
  104. Price: DefaultNetworkInternetPricePerGiB + DefaultNetworkNATPricePerGiB,
  105. },
  106. },
  107. },
  108. }
  109. }
  110. func GetDefaultNodePricing() []*pricing.NodePricing {
  111. return []*pricing.NodePricing{
  112. {
  113. Properties: pricing.NodePricingProperties{},
  114. Prices: pricing.Prices{
  115. pricing.ResourceCPU: {
  116. Unit: unit.VCPUHour,
  117. Price: DefaultNodePricePerVCPUHour,
  118. },
  119. pricing.ResourceRAM: {
  120. Unit: unit.GiBHour,
  121. Price: DefaultNodePricePerRAMGiBHour,
  122. },
  123. pricing.ResourceGPU: {
  124. Unit: unit.GPUHour,
  125. Price: DefaultNodePricePerGPUHour,
  126. },
  127. pricing.ResourceStorage: {
  128. Unit: unit.GiBHour,
  129. Price: DefaultNodePricePerLocalDiskGiBHour,
  130. },
  131. },
  132. },
  133. }
  134. }
  135. func GetDefaultPersistentVolumePricing() []*pricing.PersistentVolumePricing {
  136. return []*pricing.PersistentVolumePricing{
  137. {
  138. Properties: pricing.PersistentVolumePricingProperties{},
  139. Prices: pricing.Prices{
  140. pricing.ResourceStorage: {
  141. Unit: unit.GiBHour,
  142. Price: DefaultPersistentVolumePricePerGiBHour,
  143. },
  144. },
  145. },
  146. }
  147. }
  148. func GetDefaultServicePricing() []*pricing.ServicePricing {
  149. return []*pricing.ServicePricing{
  150. {
  151. Properties: pricing.ServicePricingProperties{},
  152. Prices: pricing.Prices{
  153. pricing.ResourceService: {
  154. Unit: unit.Hour,
  155. Price: DefaultServicePricePerHour,
  156. },
  157. },
  158. },
  159. }
  160. }