Documentation
¶
Overview ¶
Package searchstore converts search queries to SQL.
Because of the wide array of deployments supported by Grafana, search strives to be both performant enough to handle heavy users and lightweight enough to not increase complexity/resource utilization for light users. To allow this we're currently searching without fuzziness and in a single SQL query.
Search queries are a combination of an outer query which Builder creates automatically when calling the Builder.ToSQL method and an inner query feeding that which lists the IDs of the dashboards that should be part of the result set. By default search will return all dashboards (behind pagination) but it is possible to dynamically add filters capable of adding more specific inclusion or ordering requirements.
A filter is any data type which implements one or more of the FilterWhere, FilterGroupBy, FilterOrderBy, or FilterLeftJoin interfaces. The filters will be applied (in order) to limit or reorder the results.
Filters will be applied in order with the final result like such:
SELECT id FROM dashboard LEFT OUTER JOIN <FilterLeftJoin...> WHERE <FilterWhere[0]> AND ... AND <FilterWhere[n]> GROUP BY <FilterGroupBy...> ORDER BY <FilterOrderBy...> LIMIT <limit> OFFSET <(page-1)*limit>;
This structure is intended to isolate the filters from each other and implementors are expected to add all the required joins, where clauses, groupings, and/or orderings necessary for applying a filter in the filter. Using side-effects of other filters is bad manners and increases the complexity and volatility of the code.
Index ¶
Constants ¶
const ( TypeFolder = "dash-folder" TypeDashboard = "dash-db" TypeAlertFolder = "dash-folder-alerting" TypeAnnotation = "dash-annotation" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Builder ¶
type Builder struct { // List of FilterWhere/FilterGroupBy/FilterOrderBy/FilterLeftJoin // to modify the query. Filters []any Dialect migrator.Dialect Features featuremgmt.FeatureToggles // contains filtered or unexported fields }
Builder defaults to returning a SQL query to get a list of all dashboards in default order, but can be modified by applying filters.
type DashboardFilter ¶
type DashboardFilter struct {
UIDs []string
}
func (DashboardFilter) Where ¶
func (f DashboardFilter) Where() (string, []any)
type DashboardIDFilter ¶
type DashboardIDFilter struct {
IDs []int64
}
func (DashboardIDFilter) Where ¶
func (f DashboardIDFilter) Where() (string, []any)
type DeletedFilter ¶
type DeletedFilter struct {
Deleted bool
}
func (DeletedFilter) Where ¶
func (f DeletedFilter) Where() (string, []any)
type FolderFilter ¶
type FolderFilter struct {
IDs []int64
}
func (FolderFilter) Where ¶
func (f FolderFilter) Where() (string, []any)
type FolderUIDFilter ¶
type FolderUIDFilter struct { Dialect migrator.Dialect OrgID int64 UIDs []string NestedFoldersEnabled bool }
func (FolderUIDFilter) Where ¶
func (f FolderUIDFilter) Where() (string, []any)
type FolderWithAlertsFilter ¶
type FolderWithAlertsFilter struct { }
FolderWithAlertsFilter applies a filter that makes the result contain only folders that contain alert rules
func (FolderWithAlertsFilter) Where ¶
func (f FolderWithAlertsFilter) Where() (string, []any)
type TagsFilter ¶
type TagsFilter struct {
Tags []string
}
func (TagsFilter) GroupBy ¶
func (f TagsFilter) GroupBy() (string, []any)
func (TagsFilter) LeftJoin ¶
func (f TagsFilter) LeftJoin() string
func (TagsFilter) Where ¶
func (f TagsFilter) Where() (string, []any)
type TitleFilter ¶
func (TitleFilter) Where ¶
func (f TitleFilter) Where() (string, []any)
type TitleSorter ¶
type TitleSorter struct {
Descending bool
}
func (TitleSorter) OrderBy ¶
func (s TitleSorter) OrderBy() string
type TypeFilter ¶
func (TypeFilter) Where ¶
func (f TypeFilter) Where() (string, []any)