cloudcost.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package gcp
  2. import (
  3. "regexp"
  4. "strings"
  5. "github.com/opencost/opencost/core/pkg/opencost"
  6. )
  7. func IsK8s(labels map[string]string) bool {
  8. if _, ok := labels["goog-gke-volume"]; ok {
  9. return true
  10. }
  11. if _, ok := labels["goog-gke-node"]; ok {
  12. return true
  13. }
  14. if _, ok := labels["goog-k8s-cluster-name"]; ok {
  15. return true
  16. }
  17. return false
  18. }
  19. var parseProviderIDRx = regexp.MustCompile("^.+\\/(.+)?") // Capture "gke-cluster-3-default-pool-xxxx-yy" from "projects/###/instances/gke-cluster-3-default-pool-xxxx-yy"
  20. func ParseProviderID(id string) string {
  21. match := parseProviderIDRx.FindStringSubmatch(id)
  22. if len(match) == 0 {
  23. return id
  24. }
  25. return match[len(match)-1]
  26. }
  27. func SelectCategory(service, description string) string {
  28. s := strings.ToLower(service)
  29. d := strings.ToLower(description)
  30. // Network descriptions
  31. if strings.Contains(d, "download") {
  32. return opencost.NetworkCategory
  33. }
  34. if strings.Contains(d, "network") {
  35. return opencost.NetworkCategory
  36. }
  37. if strings.Contains(d, "ingress") {
  38. return opencost.NetworkCategory
  39. }
  40. if strings.Contains(d, "egress") {
  41. return opencost.NetworkCategory
  42. }
  43. if strings.Contains(d, "static ip") {
  44. return opencost.NetworkCategory
  45. }
  46. if strings.Contains(d, "external ip") {
  47. return opencost.NetworkCategory
  48. }
  49. if strings.Contains(d, "load balanced") {
  50. return opencost.NetworkCategory
  51. }
  52. if strings.Contains(d, "licensing fee") {
  53. return opencost.OtherCategory
  54. }
  55. // Storage Descriptions
  56. if strings.Contains(d, "storage") {
  57. return opencost.StorageCategory
  58. }
  59. if strings.Contains(d, "pd capacity") {
  60. return opencost.StorageCategory
  61. }
  62. if strings.Contains(d, "pd iops") {
  63. return opencost.StorageCategory
  64. }
  65. if strings.Contains(d, "pd snapshot") {
  66. return opencost.StorageCategory
  67. }
  68. // Service Defaults
  69. if strings.Contains(s, "storage") {
  70. return opencost.StorageCategory
  71. }
  72. if strings.Contains(s, "compute") {
  73. return opencost.ComputeCategory
  74. }
  75. if strings.Contains(s, "sql") {
  76. return opencost.StorageCategory
  77. }
  78. if strings.Contains(s, "bigquery") {
  79. return opencost.StorageCategory
  80. }
  81. if strings.Contains(s, "kubernetes") {
  82. return opencost.ManagementCategory
  83. } else if strings.Contains(s, "pub/sub") {
  84. return opencost.NetworkCategory
  85. }
  86. return opencost.OtherCategory
  87. }