kubemodel.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package kubemodel
  2. import (
  3. "time"
  4. )
  5. // TODO: should we add a lock so that we can safely modify KubeModelSet in parallel?
  6. // @bingen:generate[stringtable]:KubeModelSet
  7. type KubeModelSet struct {
  8. Metadata *Metadata `json:"meta"` // @bingen:field[version=1]
  9. Window Window `json:"window"` // @bingen:field[version=1]
  10. Cluster *Cluster `json:"cluster"` // @bingen:field[version=1]
  11. Containers map[string]*Container `json:"containers,omitempty"` // @bingen:field[ignore]
  12. Namespaces map[string]*Namespace `json:"namespaces"` // @bingen:field[version=1]
  13. Nodes map[string]*Node `json:"nodes,omitempty"` // @bingen:field[ignore]
  14. Owners map[string]*Owner `json:"owners,omitempty"` // @bingen:field[ignore]
  15. Pods map[string]*Pod `json:"pods,omitempty"` // @bingen:field[ignore]
  16. ResourceQuotas map[string]*ResourceQuota `json:"resourceQuotas,omitempty"` // @bingen:field[version=1]
  17. Services map[string]*Service `json:"services,omitempty"` // @bingen:field[ignore]
  18. idx *index // @bingen:field[ignore]
  19. }
  20. func NewKubeModelSet(start, end time.Time) *KubeModelSet {
  21. index := &index{
  22. namespaceByName: map[string]*Namespace{},
  23. }
  24. return &KubeModelSet{
  25. Metadata: &Metadata{
  26. CreatedAt: time.Now().UTC(),
  27. DiagnosticLevel: DefaultDiagnosticLevel,
  28. },
  29. Window: Window{
  30. Start: start,
  31. End: end,
  32. },
  33. Containers: map[string]*Container{},
  34. Namespaces: map[string]*Namespace{},
  35. Nodes: map[string]*Node{},
  36. Owners: map[string]*Owner{},
  37. Pods: map[string]*Pod{},
  38. ResourceQuotas: map[string]*ResourceQuota{},
  39. Services: map[string]*Service{},
  40. idx: index,
  41. }
  42. }
  43. func (kms *KubeModelSet) IsEmpty() bool {
  44. return kms == nil || kms.Cluster == nil || kms.Metadata.ObjectCount == 0
  45. }
  46. type index struct {
  47. namespaceByName map[string]*Namespace
  48. }