parser.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package allocation
  2. import "github.com/opencost/opencost/pkg/filter21/ast"
  3. // a slice of all the allocation field instances the lexer should recognize as
  4. // valid left-hand comparators
  5. var allocationFilterFields []*ast.Field = []*ast.Field{
  6. ast.NewField(FieldClusterID),
  7. ast.NewField(FieldNode),
  8. ast.NewField(FieldNamespace),
  9. ast.NewField(FieldControllerName),
  10. ast.NewField(FieldControllerKind),
  11. ast.NewField(FieldContainer),
  12. ast.NewField(FieldPod),
  13. ast.NewField(FieldProvider),
  14. ast.NewAliasField(AliasDepartment),
  15. ast.NewAliasField(AliasEnvironment),
  16. ast.NewAliasField(AliasOwner),
  17. ast.NewAliasField(AliasProduct),
  18. ast.NewAliasField(AliasTeam),
  19. ast.NewSliceField(FieldServices),
  20. ast.NewMapField(FieldLabel),
  21. ast.NewMapField(FieldAnnotation),
  22. }
  23. // fieldMap is a lazily loaded mapping from AllocationField to ast.Field
  24. var fieldMap map[AllocationField]*ast.Field
  25. // DefaultFieldByName returns only default allocation filter fields by name.
  26. func DefaultFieldByName(field AllocationField) *ast.Field {
  27. if fieldMap == nil {
  28. fieldMap = make(map[AllocationField]*ast.Field, len(allocationFilterFields))
  29. for _, f := range allocationFilterFields {
  30. ff := *f
  31. fieldMap[AllocationField(ff.Name)] = &ff
  32. }
  33. }
  34. if af, ok := fieldMap[field]; ok {
  35. afcopy := *af
  36. return &afcopy
  37. }
  38. return nil
  39. }
  40. // NewAllocationFilterParser creates a new `ast.FilterParser` implementation
  41. // which uses allocation specific fields
  42. func NewAllocationFilterParser() ast.FilterParser {
  43. return ast.NewFilterParser(allocationFilterFields)
  44. }