daemonset.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. daemonSetArgumentsResultFuture := source.WithGroup(grp, metrics.QueryDaemonSetArguments(start, end))
  16. daemonSetMap := make(map[string]*kubemodel.DaemonSet)
  17. daemonSetInfoResult, _ := daemonSetInfoResultFuture.Await()
  18. for _, res := range daemonSetInfoResult {
  19. daemonSetMap[res.UID] = &kubemodel.DaemonSet{
  20. UID: res.UID,
  21. Name: res.DaemonSet,
  22. NamespaceUID: res.NamespaceUID,
  23. }
  24. }
  25. daemonSetUptimeResult, _ := daemonSetUptimeResultFuture.Await()
  26. for _, res := range daemonSetUptimeResult {
  27. daemonSet, ok := daemonSetMap[res.UID]
  28. if !ok {
  29. log.Warnf("daemonset 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. daemonSet.Start = s
  34. daemonSet.End = e
  35. }
  36. daemonSetLabelsResult, _ := daemonSetLabelsResultFuture.Await()
  37. for _, res := range daemonSetLabelsResult {
  38. daemonSet, ok := daemonSetMap[res.UID]
  39. if !ok {
  40. log.Warnf("daemonset with UID '%s' has not been initialized to add labels", res.UID)
  41. continue
  42. }
  43. daemonSet.Labels = res.Labels
  44. }
  45. daemonSetAnnotationsResult, _ := daemonSetAnnotationsResultFuture.Await()
  46. for _, res := range daemonSetAnnotationsResult {
  47. daemonSet, ok := daemonSetMap[res.UID]
  48. if !ok {
  49. log.Warnf("daemonset with UID '%s' has not been initialized to add annotations", res.UID)
  50. continue
  51. }
  52. daemonSet.Annotations = res.Annotations
  53. }
  54. daemonSetArgumentsResult, _ := daemonSetArgumentsResultFuture.Await()
  55. for _, res := range daemonSetArgumentsResult {
  56. daemonSet, ok := daemonSetMap[res.UID]
  57. if !ok {
  58. log.Warnf("daemonset with UID '%s' has not been initialized to add arguments", res.UID)
  59. continue
  60. }
  61. if daemonSet.Arguments == nil {
  62. daemonSet.Arguments = make(map[string]string)
  63. }
  64. daemonSet.Arguments[res.Arg] = res.Value
  65. }
  66. for _, daemonSet := range daemonSetMap {
  67. err := kms.RegisterDaemonSet(daemonSet)
  68. if err != nil {
  69. log.Warnf("Failed to register daemonset: %s", err.Error())
  70. }
  71. }
  72. return nil
  73. }