totals_json.go 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package opencost
  2. import (
  3. "time"
  4. "github.com/opencost/opencost/core/pkg/util/formatutil"
  5. )
  6. type AllocationTotalsResponse struct {
  7. Start time.Time `json:"start"`
  8. End time.Time `json:"end"`
  9. Cluster string `json:"cluster"`
  10. Node string `json:"node"`
  11. Count int `json:"count"`
  12. CPUCost *float64 `json:"cpuCost"`
  13. CPUCostAdjustment *float64 `json:"cpuCostAdjustment"`
  14. GPUCost *float64 `json:"gpuCost"`
  15. GPUCostAdjustment *float64 `json:"gpuCostAdjustment"`
  16. LoadBalancerCost *float64 `json:"loadBalancerCost"`
  17. LoadBalancerCostAdjustment *float64 `json:"loadBalancerCostAdjustment"`
  18. NetworkCost *float64 `json:"networkCost"`
  19. NetworkCostAdjustment *float64 `json:"networkCostAdjustment"`
  20. PersistentVolumeCost *float64 `json:"persistentVolumeCost"`
  21. PersistentVolumeCostAdjustment *float64 `json:"persistentVolumeCostAdjustment"`
  22. RAMCost *float64 `json:"ramCost"`
  23. RAMCostAdjustment *float64 `json:"ramCostAdjustment"`
  24. TotalCost *float64 `json:"totalCost"`
  25. }
  26. func (arts *AllocationTotals) ToResponse() *AllocationTotalsResponse {
  27. if arts == nil {
  28. return nil
  29. }
  30. return &AllocationTotalsResponse{
  31. Start: arts.Start,
  32. End: arts.End,
  33. Cluster: arts.Cluster,
  34. Node: arts.Node,
  35. Count: arts.Count,
  36. CPUCost: formatutil.Float64ToResponse(arts.CPUCost),
  37. CPUCostAdjustment: formatutil.Float64ToResponse(arts.CPUCostAdjustment),
  38. GPUCost: formatutil.Float64ToResponse(arts.GPUCost),
  39. GPUCostAdjustment: formatutil.Float64ToResponse(arts.GPUCostAdjustment),
  40. LoadBalancerCost: formatutil.Float64ToResponse(arts.LoadBalancerCost),
  41. LoadBalancerCostAdjustment: formatutil.Float64ToResponse(arts.LoadBalancerCostAdjustment),
  42. NetworkCost: formatutil.Float64ToResponse(arts.NetworkCost),
  43. NetworkCostAdjustment: formatutil.Float64ToResponse(arts.NetworkCostAdjustment),
  44. PersistentVolumeCost: formatutil.Float64ToResponse(arts.PersistentVolumeCost),
  45. PersistentVolumeCostAdjustment: formatutil.Float64ToResponse(arts.PersistentVolumeCostAdjustment),
  46. RAMCost: formatutil.Float64ToResponse(arts.RAMCost),
  47. RAMCostAdjustment: formatutil.Float64ToResponse(arts.RAMCostAdjustment),
  48. TotalCost: formatutil.Float64ToResponse(arts.TotalCost()),
  49. }
  50. }
  51. type AllocationTotalsResultResponse struct {
  52. Cluster map[string]*AllocationTotalsResponse `json:"cluster"`
  53. Node map[string]*AllocationTotalsResponse `json:"node"`
  54. }
  55. func (atr *AllocationTotalsResult) ToResponse() *AllocationTotalsResultResponse {
  56. response := &AllocationTotalsResultResponse{
  57. Cluster: map[string]*AllocationTotalsResponse{},
  58. Node: map[string]*AllocationTotalsResponse{},
  59. }
  60. for k, v := range atr.Cluster {
  61. response.Cluster[k] = v.ToResponse()
  62. }
  63. for k, v := range atr.Node {
  64. response.Node[k] = v.ToResponse()
  65. }
  66. return response
  67. }