container.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. // @bingen:generate:Container
  7. type Container struct {
  8. PodUID string `json:"podUid"`
  9. Name string `json:"name"`
  10. ResourceRequests ResourceQuantities `json:"resourceRequests"`
  11. ResourceLimits ResourceQuantities `json:"resourceLimits"`
  12. CPUCoresAllocated float64 `json:"cpuCoresAllocated"`
  13. CPUCoreUsageAvg float64 `json:"cpuCoreUsageAvg"`
  14. CPUCoreUsageMax float64 `json:"cpuCoreUsageMax"`
  15. RAMBytesAllocated float64 `json:"ramBytesAllocated"`
  16. RAMBytesUsageAvg float64 `json:"ramBytesUsageAvg"`
  17. RAMBytesUsageMax float64 `json:"ramBytesUsageMax"`
  18. Start time.Time `json:"start"`
  19. End time.Time `json:"end"`
  20. }
  21. func (c *Container) GetKey() string {
  22. return fmt.Sprintf("%s/%s", c.PodUID, c.Name)
  23. }
  24. func (c *Container) ValidateContainer(window Window) error {
  25. if c.PodUID == "" {
  26. return fmt.Errorf("PodUID is missing for Container with name '%s'", c.Name)
  27. }
  28. if c.Name == "" {
  29. return fmt.Errorf("Name is missing for Container on pod '%s'", c.PodUID)
  30. }
  31. if err := checkWindow(window, c.Start, c.End); err != nil {
  32. return err
  33. }
  34. return nil
  35. }
  36. func (kms *KubeModelSet) RegisterContainer(container *Container) error {
  37. if err := container.ValidateContainer(kms.Window); err != nil {
  38. err = fmt.Errorf("RegisterContainer: invalid container: %w", err)
  39. kms.Error(err)
  40. return err
  41. }
  42. key := container.GetKey()
  43. if _, ok := kms.Containers[key]; !ok {
  44. kms.Containers[key] = container
  45. kms.Metadata.ObjectCount++
  46. }
  47. return nil
  48. }