pvc.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. // @bingen:generate:PersistentVolumeClaim
  7. type PersistentVolumeClaim struct {
  8. UID string `json:"uid"`
  9. NamespaceUID string `json:"namespaceUid"`
  10. Name string `json:"name"`
  11. PersistentVolumeUID string `json:"persistentVolumeUID,omitempty"`
  12. StorageClass string `json:"storageClass"`
  13. Start time.Time `json:"start"`
  14. End time.Time `json:"end"`
  15. RequestedBytes float64 `json:"requestedBytes"`
  16. UsageBytesAvg float64 `json:"usageBytesAvg"`
  17. UsageBytesMax float64 `json:"usageBytesMax"`
  18. }
  19. func (p *PersistentVolumeClaim) ValidatePVC(window Window) error {
  20. if p.UID == "" {
  21. return fmt.Errorf("UID is missing for PVC with name '%s'", p.Name)
  22. }
  23. if p.Name == "" {
  24. return fmt.Errorf("Name is missing for PVC '%s'", p.UID)
  25. }
  26. if p.NamespaceUID == "" {
  27. return fmt.Errorf("NamespaceUID is missing for PVC '%s'", p.UID)
  28. }
  29. if err := checkWindow(window, p.Start, p.End); err != nil {
  30. return err
  31. }
  32. return nil
  33. }
  34. func (kms *KubeModelSet) RegisterPVC(pvc *PersistentVolumeClaim) error {
  35. if err := pvc.ValidatePVC(kms.Window); err != nil {
  36. err = fmt.Errorf("RegisterPVC: invalid pvc: %w", err)
  37. kms.Error(err)
  38. return err
  39. }
  40. if _, ok := kms.PersistentVolumeClaims[pvc.UID]; !ok {
  41. kms.PersistentVolumeClaims[pvc.UID] = pvc
  42. kms.Metadata.ObjectCount++
  43. }
  44. return nil
  45. }