daemonset.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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) computeDaemonSets(kms *kubemodel.KubeModelSet, start, end time.Time) error {
  9. grp := source.NewQueryGroup()
  10. metrics := km.ds.Metrics()
  11. daemonSetInfoResultFuture := source.WithGroup(grp, metrics.QueryDaemonSetInfo(start, end))
  12. daemonSetUptimeResultFuture := source.WithGroup(grp, metrics.QueryDaemonSetUptime(start, end))
  13. daemonSetLabelsResultFuture := source.WithGroup(grp, metrics.QueryDaemonSetLabels(start, end))
  14. daemonSetAnnotationsResultFuture := source.WithGroup(grp, metrics.QueryDaemonSetAnnotations(start, end))
  15. daemonSetMap := make(map[string]*kubemodel.DaemonSet)
  16. daemonSetInfoResult, _ := daemonSetInfoResultFuture.Await()
  17. for _, res := range daemonSetInfoResult {
  18. daemonSetMap[res.UID] = &kubemodel.DaemonSet{
  19. UID: res.UID,
  20. Name: res.DaemonSet,
  21. NamespaceUID: res.NamespaceUID,
  22. }
  23. }
  24. daemonSetUptimeResult, _ := daemonSetUptimeResultFuture.Await()
  25. for _, res := range daemonSetUptimeResult {
  26. daemonSet, ok := daemonSetMap[res.UID]
  27. if !ok {
  28. log.Warnf("daemonset with UID '%s' has not been initialized to add uptime", res.UID)
  29. continue
  30. }
  31. s, e := res.GetStartEnd(start, end, km.ds.Resolution())
  32. daemonSet.Start = s
  33. daemonSet.End = e
  34. }
  35. daemonSetLabelsResult, _ := daemonSetLabelsResultFuture.Await()
  36. for _, res := range daemonSetLabelsResult {
  37. daemonSet, ok := daemonSetMap[res.UID]
  38. if !ok {
  39. log.Warnf("daemonset with UID '%s' has not been initialized to add labels", res.UID)
  40. continue
  41. }
  42. daemonSet.Labels = res.Labels
  43. }
  44. daemonSetAnnotationsResult, _ := daemonSetAnnotationsResultFuture.Await()
  45. for _, res := range daemonSetAnnotationsResult {
  46. daemonSet, ok := daemonSetMap[res.UID]
  47. if !ok {
  48. log.Warnf("daemonset with UID '%s' has not been initialized to add annotations", res.UID)
  49. continue
  50. }
  51. daemonSet.Annotations = res.Annotations
  52. }
  53. for _, daemonSet := range daemonSetMap {
  54. err := kms.RegisterDaemonSet(daemonSet)
  55. if err != nil {
  56. log.Warnf("Failed to register daemonset: %s", err.Error())
  57. }
  58. }
  59. return nil
  60. }