mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* add support for sortBy field selector * use label selectors instead of field selectors * set entity_labels on create & update * make entity server integration tests work * test fixes * be more consistent with handling of empty body, meta or status * workaround for database is locked errors during migration * fix double import of sqlite3 * rename functions and tidy up * refactor update * disable integration tests until we can fix the database locking issue
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package entity
|
|
|
|
import (
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
"k8s.io/apimachinery/pkg/labels"
|
|
"k8s.io/apimachinery/pkg/selection"
|
|
)
|
|
|
|
const folderAnnoKey = "grafana.app/folder"
|
|
const sortByKey = "grafana.app/sortBy"
|
|
|
|
type Requirements struct {
|
|
// Equals folder
|
|
Folder *string
|
|
// SortBy is a list of fields to sort by
|
|
SortBy []string
|
|
}
|
|
|
|
func ReadLabelSelectors(selector labels.Selector) (Requirements, labels.Selector, error) {
|
|
requirements := Requirements{}
|
|
newSelector := labels.NewSelector()
|
|
|
|
if selector == nil {
|
|
return requirements, newSelector, nil
|
|
}
|
|
|
|
labelSelectors, _ := selector.Requirements()
|
|
|
|
for _, r := range labelSelectors {
|
|
switch r.Key() {
|
|
case folderAnnoKey:
|
|
if (r.Operator() != selection.Equals) && (r.Operator() != selection.DoubleEquals) {
|
|
return requirements, newSelector, apierrors.NewBadRequest(folderAnnoKey + " label selector only supports equality")
|
|
}
|
|
folder := r.Values().List()[0]
|
|
requirements.Folder = &folder
|
|
case sortByKey:
|
|
if r.Operator() != selection.In {
|
|
return requirements, newSelector, apierrors.NewBadRequest(sortByKey + " label selector only supports in")
|
|
}
|
|
requirements.SortBy = r.Values().List()
|
|
// add all unregonized label selectors to the new selector list, these will be processed by the entity store
|
|
default:
|
|
newSelector = newSelector.Add(r)
|
|
}
|
|
}
|
|
|
|
return requirements, newSelector, nil
|
|
}
|