route.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package allocation
  2. import "github.com/opencost/opencost/core/pkg/autocomplete"
  3. // Route describes how to query a normalized allocation autocomplete field.
  4. type Route int
  5. const (
  6. RouteDefault Route = iota
  7. RouteLabelKeys
  8. RouteLabelValue
  9. RouteNamespaceLabelKeys
  10. RouteNamespaceLabelValue
  11. RouteAlias
  12. )
  13. // RouteField maps a normalized field to a query route and label key when applicable.
  14. func RouteField(field string) (Route, string, error) {
  15. if kind, key, err := autocomplete.ParseLabelField(field, autocomplete.LabelPrefix); err == nil {
  16. switch kind {
  17. case autocomplete.LabelFieldKeys:
  18. return RouteLabelKeys, "", nil
  19. case autocomplete.LabelFieldValue:
  20. return RouteLabelValue, key, nil
  21. }
  22. }
  23. if kind, key, err := autocomplete.ParseLabelField(field, autocomplete.NamespaceLabelPrefix); err == nil {
  24. switch kind {
  25. case autocomplete.LabelFieldKeys:
  26. return RouteNamespaceLabelKeys, "", nil
  27. case autocomplete.LabelFieldValue:
  28. return RouteNamespaceLabelValue, key, nil
  29. }
  30. }
  31. switch field {
  32. case "department", "environment", "owner", "product", "team":
  33. return RouteAlias, "", nil
  34. }
  35. return RouteDefault, "", nil
  36. }