container.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package kubemodel
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. type Container struct {
  7. PodUID string `json:"podUid"`
  8. Name string `json:"name"`
  9. DurationSeconds Measurement `json:"durationSeconds"`
  10. CpuMillicoreSeconds Measurement `json:"cpuMillicoreSeconds"`
  11. CpuMillicoreUsageMax Measurement `json:"cpuMillicoreUsageMax"`
  12. CpuMillicoreRequestSeconds Measurement `json:"cpuMillicoreRequestSeconds"`
  13. RAMByteSeconds Measurement `json:"ramByteSeconds"`
  14. RAMByteUsageMax Measurement `json:"ramByteUsageMax"`
  15. RAMByteSecondRequest Measurement `json:"ramByteSecondRequest"`
  16. VolumeStorageByteSeconds map[string]Measurement `json:"volumeStorageByteSeconds,omitempty"`
  17. VolumeStorageByteUsageMax map[string]Measurement `json:"volumeStorageByteUsageMax,omitempty"`
  18. CpuMillicoreLimitSeconds Measurement `json:"cpuMillicoreLimitSeconds,omitempty"`
  19. RAMByteSecondsLimit Measurement `json:"ramByteSecondsLimit,omitempty"`
  20. Start time.Time `json:"start"`
  21. End time.Time `json:"end"`
  22. }
  23. func (c *Container) CpuMillicoreUsageAverage() Measurement {
  24. if c.DurationSeconds == 0 {
  25. return 0
  26. }
  27. return c.CpuMillicoreSeconds / c.DurationSeconds
  28. }
  29. func (c *Container) RAMByteUsageAverage() Measurement {
  30. if c.DurationSeconds == 0 {
  31. return 0
  32. }
  33. return c.RAMByteSeconds / c.DurationSeconds
  34. }
  35. func (c *Container) TotalStorageByteSeconds() Measurement {
  36. var total Measurement
  37. for _, ByteSeconds := range c.VolumeStorageByteSeconds {
  38. total += ByteSeconds
  39. }
  40. return total
  41. }
  42. func (c *Container) TotalStorageByteUsageMax() Measurement {
  43. var max Measurement
  44. for _, usage := range c.VolumeStorageByteUsageMax {
  45. if usage > max {
  46. max = usage
  47. }
  48. }
  49. return max
  50. }
  51. func (c *Container) StorageByteUsageAverage() Measurement {
  52. if c.DurationSeconds == 0 {
  53. return 0
  54. }
  55. totalByteSeconds := c.TotalStorageByteSeconds()
  56. return totalByteSeconds / c.DurationSeconds
  57. }
  58. func (c *Container) CpuMillicoreRequestAverage() Measurement {
  59. if c.DurationSeconds == 0 {
  60. return 0
  61. }
  62. return c.CpuMillicoreRequestSeconds / c.DurationSeconds
  63. }
  64. func (c *Container) RAMByteRequestAverage() Measurement {
  65. if c.DurationSeconds == 0 {
  66. return 0
  67. }
  68. return c.RAMByteSecondRequest / c.DurationSeconds
  69. }
  70. func (c *Container) CpuMillicoreLimitAverage() Measurement {
  71. if c.DurationSeconds == 0 {
  72. return 0
  73. }
  74. return c.CpuMillicoreLimitSeconds / c.DurationSeconds
  75. }
  76. func (c *Container) RAMByteLimitAverage() Measurement {
  77. if c.DurationSeconds == 0 {
  78. return 0
  79. }
  80. return c.RAMByteSecondsLimit / c.DurationSeconds
  81. }
  82. func (kms *KubeModelSet) RegisterContainer(uid, name, podUID string) error {
  83. if uid == "" {
  84. err := fmt.Errorf("UID is nil for Container '%s'", name)
  85. kms.Error(err)
  86. return err
  87. }
  88. if _, ok := kms.Containers[uid]; !ok {
  89. kms.Containers[uid] = &Container{
  90. PodUID: podUID,
  91. Name: name,
  92. }
  93. kms.Metadata.ObjectCount++
  94. }
  95. return nil
  96. }