statefulset.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package kubemodel
  2. import (
  3. "time"
  4. "github.com/opencost/opencost/core/pkg/log"
  5. "github.com/opencost/opencost/core/pkg/model/kubemodel"
  6. "github.com/opencost/opencost/core/pkg/source"
  7. )
  8. func (km *KubeModel) computeStatefulSets(kms *kubemodel.KubeModelSet, start, end time.Time) error {
  9. grp := source.NewQueryGroup()
  10. metrics := km.ds.Metrics()
  11. statefulSetInfoResultFuture := source.WithGroup(grp, metrics.QueryStatefulSetInfo(start, end))
  12. statefulSetUptimeResultFuture := source.WithGroup(grp, metrics.QueryStatefulSetUptime(start, end))
  13. statefulSetLabelsResultFuture := source.WithGroup(grp, metrics.QueryStatefulSetLabels(start, end))
  14. statefulSetAnnotationsResultFuture := source.WithGroup(grp, metrics.QueryStatefulSetAnnotations(start, end))
  15. statefulSetMatchLabelsResultFuture := source.WithGroup(grp, metrics.QueryStatefulSetMatchLabels(start, end))
  16. statefulSetMap := make(map[string]*kubemodel.StatefulSet)
  17. statefulSetInfoResult, _ := statefulSetInfoResultFuture.Await()
  18. for _, res := range statefulSetInfoResult {
  19. statefulSetMap[res.UID] = &kubemodel.StatefulSet{
  20. UID: res.UID,
  21. Name: res.StatefulSet,
  22. NamespaceUID: res.NamespaceUID,
  23. }
  24. }
  25. statefulSetUptimeResult, _ := statefulSetUptimeResultFuture.Await()
  26. for _, res := range statefulSetUptimeResult {
  27. statefulSet, ok := statefulSetMap[res.UID]
  28. if !ok {
  29. log.Warnf("statefulset with UID '%s' has not been initialized to add uptime", res.UID)
  30. continue
  31. }
  32. s, e := res.GetStartEnd(start, end, km.ds.Resolution())
  33. statefulSet.Start = s
  34. statefulSet.End = e
  35. }
  36. statefulSetLabelsResult, _ := statefulSetLabelsResultFuture.Await()
  37. for _, res := range statefulSetLabelsResult {
  38. statefulSet, ok := statefulSetMap[res.UID]
  39. if !ok {
  40. log.Warnf("statefulset with UID '%s' has not been initialized to add labels", res.UID)
  41. continue
  42. }
  43. statefulSet.Labels = res.Labels
  44. }
  45. statefulSetAnnotationsResult, _ := statefulSetAnnotationsResultFuture.Await()
  46. for _, res := range statefulSetAnnotationsResult {
  47. statefulSet, ok := statefulSetMap[res.UID]
  48. if !ok {
  49. log.Warnf("statefulset with UID '%s' has not been initialized to add annotations", res.UID)
  50. continue
  51. }
  52. statefulSet.Annotations = res.Annotations
  53. }
  54. statefulSetMatchLabelsResult, _ := statefulSetMatchLabelsResultFuture.Await()
  55. for _, res := range statefulSetMatchLabelsResult {
  56. statefulSet, ok := statefulSetMap[res.UID]
  57. if !ok {
  58. log.Warnf("statefulset with UID '%s' has not been initialized to add match labels", res.UID)
  59. continue
  60. }
  61. statefulSet.MatchLabels = res.Labels
  62. }
  63. for _, statefulSet := range statefulSetMap {
  64. err := kms.RegisterStatefulSet(statefulSet)
  65. if err != nil {
  66. log.Warnf("Failed to register statefulset: %s", err.Error())
  67. }
  68. }
  69. return nil
  70. }