parser.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package cloudcost
  2. import "github.com/opencost/opencost/pkg/filter21/ast"
  3. // a slice of all the cloud costs field instances the lexer should recognize as
  4. // valid left-hand comparators
  5. var cloudCostFilterFields []*ast.Field = []*ast.Field{
  6. ast.NewField(FieldInvoiceEntityID),
  7. ast.NewField(FieldAccountID),
  8. ast.NewField(FieldProvider),
  9. ast.NewField(FieldProviderID),
  10. ast.NewField(FieldCategory),
  11. ast.NewField(FieldService),
  12. ast.NewMapField(FieldLabel),
  13. }
  14. // fieldMap is a lazily loaded mapping from CloudAggregationField to ast.Field
  15. var fieldMap map[CloudCostField]*ast.Field
  16. // DefaultFieldByName returns only default cloud cost filter fields by name.
  17. func DefaultFieldByName(field CloudCostField) *ast.Field {
  18. if fieldMap == nil {
  19. fieldMap = make(map[CloudCostField]*ast.Field, len(cloudCostFilterFields))
  20. for _, f := range cloudCostFilterFields {
  21. ff := *f
  22. fieldMap[CloudCostField(ff.Name)] = &ff
  23. }
  24. }
  25. if af, ok := fieldMap[field]; ok {
  26. afcopy := *af
  27. return &afcopy
  28. }
  29. return nil
  30. }
  31. // NewCloudCostFilterParser creates a new `ast.FilterParser` implementation
  32. // which uses CloudCost specific fields
  33. func NewCloudCostFilterParser() ast.FilterParser {
  34. return ast.NewFilterParser(cloudCostFilterFields)
  35. }