resourcequota.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. // @bingen:generate:ResourceQuota
  7. type ResourceQuota struct {
  8. UID string `json:"uid"` // @bingen:field[version=1]
  9. NamespaceUID string `json:"namespaceUID"` // @bingen:field[version=1]
  10. Name string `json:"name"` // @bingen:field[version=1]
  11. Spec *ResourceQuotaSpec `json:"spec"` // @bingen:field[version=1]
  12. Status *ResourceQuotaStatus `json:"status"` // @bingen:field[version=1]
  13. Start time.Time `json:"start"` // @bingen:field[version=1]
  14. End time.Time `json:"end"` // @bingen:field[version=1]
  15. }
  16. // @bingen:generate:ResourceQuotaSpec
  17. type ResourceQuotaSpec struct {
  18. Hard *ResourceQuotaSpecHard `json:"hard"` // @bingen:field[version=1]
  19. }
  20. // @bingen:generate:ResourceQuotaSpecHard
  21. type ResourceQuotaSpecHard struct {
  22. Requests ResourceQuantities `json:"requests,omitempty"` // @bingen:field[version=1]
  23. Limits ResourceQuantities `json:"limits,omitempty"` // @bingen:field[version=1]
  24. }
  25. func (spec *ResourceQuotaSpecHard) SetRequest(resource Resource, unit Unit, statType StatType, value float64) {
  26. if spec.Requests == nil {
  27. spec.Requests = ResourceQuantities{}
  28. }
  29. spec.Requests.Set(resource, unit, statType, value)
  30. }
  31. func (spec *ResourceQuotaSpecHard) SetLimit(resource Resource, unit Unit, statType StatType, value float64) {
  32. if spec.Limits == nil {
  33. spec.Limits = ResourceQuantities{}
  34. }
  35. spec.Limits.Set(resource, unit, statType, value)
  36. }
  37. // @bingen:generate:ResourceQuotaStatus
  38. type ResourceQuotaStatus struct {
  39. Used *ResourceQuotaStatusUsed `json:"used"` // @bingen:field[version=1]
  40. }
  41. // @bingen:generate:ResourceQuotaStatusUsed
  42. type ResourceQuotaStatusUsed struct {
  43. Requests ResourceQuantities `json:"requests,omitempty"` // @bingen:field[version=1]
  44. Limits ResourceQuantities `json:"limits,omitempty"` // @bingen:field[version=1]
  45. }
  46. func (stat *ResourceQuotaStatusUsed) SetRequest(resource Resource, unit Unit, statType StatType, value float64) {
  47. if stat.Requests == nil {
  48. stat.Requests = ResourceQuantities{}
  49. }
  50. stat.Requests.Set(resource, unit, statType, value)
  51. }
  52. func (stat *ResourceQuotaStatusUsed) SetLimit(resource Resource, unit Unit, statType StatType, value float64) {
  53. if stat.Limits == nil {
  54. stat.Limits = ResourceQuantities{}
  55. }
  56. stat.Limits.Set(resource, unit, statType, value)
  57. }
  58. func (kms *KubeModelSet) RegisterResourceQuota(uid, name, namespace string) error {
  59. if uid == "" {
  60. err := fmt.Errorf("UID is nil for ResourceQuota '%s'", name)
  61. kms.Error(err)
  62. return err
  63. }
  64. if _, ok := kms.ResourceQuotas[uid]; !ok {
  65. namespaceUID := ""
  66. if _, ok := kms.idx.namespaceByName[namespace]; !ok {
  67. kms.Warnf("RegisterResourceQuota(%s, %s, %s): missing namespace", uid, name, namespace)
  68. } else {
  69. namespaceUID = kms.idx.namespaceByName[namespace].UID
  70. }
  71. kms.ResourceQuotas[uid] = &ResourceQuota{
  72. UID: uid,
  73. Name: name,
  74. NamespaceUID: namespaceUID,
  75. Spec: &ResourceQuotaSpec{Hard: &ResourceQuotaSpecHard{}},
  76. Status: &ResourceQuotaStatus{Used: &ResourceQuotaStatusUsed{}},
  77. }
  78. kms.Metadata.ObjectCount++
  79. }
  80. return nil
  81. }