clusterinfo.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package scrape
  2. import (
  3. "github.com/opencost/opencost/core/pkg/clusters"
  4. "github.com/opencost/opencost/core/pkg/source"
  5. "github.com/opencost/opencost/modules/collector-source/pkg/metric"
  6. )
  7. type ClusterInfoScrapper struct {
  8. clusterUID string
  9. clusterInfoProvider clusters.ClusterInfoProvider
  10. }
  11. func newClusterInfoScrapper(clusterUID string, clusterInfoProvider clusters.ClusterInfoProvider) Scraper {
  12. return &ClusterInfoScrapper{
  13. clusterUID: clusterUID,
  14. clusterInfoProvider: clusterInfoProvider,
  15. }
  16. }
  17. func (cis *ClusterInfoScrapper) Scrape() []metric.Update {
  18. var scrapeResults []metric.Update
  19. // extract label values from cluster info provider
  20. clusterInfoMap := cis.clusterInfoProvider.GetClusterInfo()
  21. clusterName := clusterInfoMap[clusters.ClusterInfoIdKey]
  22. provider := clusterInfoMap[clusters.ClusterInfoProviderKey]
  23. accountID := clusterInfoMap[clusters.ClusterInfoAccountKey]
  24. // GCP special case
  25. if accountID == "" {
  26. accountID = clusterInfoMap[clusters.ClusterInfoProjectKey]
  27. }
  28. provisioner := clusterInfoMap[clusters.ClusterInfoProvisionerKey]
  29. region := clusterInfoMap[clusters.ClusterInfoRegionKey]
  30. clusterInfo := map[string]string{
  31. source.UIDLabel: cis.clusterUID,
  32. source.ClusterNameLabel: clusterName,
  33. source.ProviderLabel: provider,
  34. source.AccountIDLabel: accountID,
  35. source.ProvisionerNameLabel: provisioner,
  36. source.RegionLabel: region,
  37. }
  38. scrapeResults = append(scrapeResults, metric.Update{
  39. Name: metric.ClusterInfo,
  40. Labels: clusterInfo,
  41. AdditionalInfo: clusterInfo,
  42. Value: 0,
  43. })
  44. return scrapeResults
  45. }