queryservice_helper.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package customcost
  2. import (
  3. "fmt"
  4. "github.com/opencost/opencost/core/pkg/filter"
  5. "github.com/opencost/opencost/core/pkg/opencost"
  6. "github.com/opencost/opencost/core/pkg/util/mapper"
  7. )
  8. func ParseCustomCostTotalRequest(qp mapper.PrimitiveMap) (*CostTotalRequest, error) {
  9. windowStr := qp.Get("window", "")
  10. if windowStr == "" {
  11. return nil, fmt.Errorf("missing require window param")
  12. }
  13. window, err := opencost.ParseWindowUTC(windowStr)
  14. if err != nil {
  15. return nil, fmt.Errorf("invalid window parameter: %w", err)
  16. }
  17. if window.IsOpen() {
  18. return nil, fmt.Errorf("invalid window parameter: %s", window.String())
  19. }
  20. aggregateByRaw := qp.GetList("aggregate", ",")
  21. aggregateBy, err := ParseCustomCostProperties(aggregateByRaw)
  22. if err != nil {
  23. return nil, err
  24. }
  25. accumulate := opencost.ParseAccumulate(qp.Get("accumulate", "day"))
  26. var filter filter.Filter
  27. filterString := qp.Get("filter", "")
  28. if filterString != "" {
  29. parser := NewCustomCostFilterParser()
  30. filter, err = parser.Parse(filterString)
  31. if err != nil {
  32. return nil, fmt.Errorf("parsing 'filter' parameter: %s", err)
  33. }
  34. }
  35. opts := &CostTotalRequest{
  36. Start: *window.Start(),
  37. End: *window.End(),
  38. AggregateBy: aggregateBy,
  39. Accumulate: accumulate,
  40. Filter: filter,
  41. }
  42. return opts, nil
  43. }
  44. func ParseCustomCostTimeseriesRequest(qp mapper.PrimitiveMap) (*CostTimeseriesRequest, error) {
  45. windowStr := qp.Get("window", "")
  46. if windowStr == "" {
  47. return nil, fmt.Errorf("missing require window param")
  48. }
  49. window, err := opencost.ParseWindowUTC(windowStr)
  50. if err != nil {
  51. return nil, fmt.Errorf("invalid window parameter: %w", err)
  52. }
  53. if window.IsOpen() {
  54. return nil, fmt.Errorf("invalid window parameter: %s", window.String())
  55. }
  56. aggregateByRaw := qp.GetList("aggregate", ",")
  57. aggregateBy, err := ParseCustomCostProperties(aggregateByRaw)
  58. if err != nil {
  59. return nil, err
  60. }
  61. accumulate := opencost.ParseAccumulate(qp.Get("accumulate", "day"))
  62. var filter filter.Filter
  63. filterString := qp.Get("filter", "")
  64. if filterString != "" {
  65. parser := NewCustomCostFilterParser()
  66. filter, err = parser.Parse(filterString)
  67. if err != nil {
  68. return nil, fmt.Errorf("parsing 'filter' parameter: %s", err)
  69. }
  70. }
  71. opts := &CostTimeseriesRequest{
  72. Start: *window.Start(),
  73. End: *window.End(),
  74. AggregateBy: aggregateBy,
  75. Accumulate: accumulate,
  76. Filter: filter,
  77. }
  78. return opts, nil
  79. }