grove
Documentation menu

Saved searches and contexts

Saved searches keep queries you come back to and can watch them for you. Contexts give a set of repositories or filters a short name you can drop into any query.

Saved searches

Click Save search above the results, or New saved search under Settings → Saved searches. A saved search has a name, the query and an optional description.

The saved searches page with tracked searches, email alerts and a metric labelThe saved searches page with tracked searches, email alerts and a metric label

From the list you can run a saved search, edit or delete it, and filter by name or query. Each saved search can also be:

  • Shared with everyone. Other users see it under Shared with everyone; only its owner can change it. Superusers see all users’ saved searches under All users.
  • Tracked. Grove runs it on a schedule and keeps the result count of each run, so you can see when a migration is done or a pattern creeps back in. View stored results shows the latest results without searching again.
  • Emailed on change. For a tracked search, Grove emails you when the results change. This needs email to be configured on the server (SMTP_* in Configuration).
  • Exported to Prometheus. Give a tracked search a metric label and its result count is published on /metrics, so dashboards and alerts can follow it, for example the number of remaining uses of a deprecated API.

A tracked run that takes longer than the saved-search time limit (30 seconds by default) is logged as an error and its results are discarded.

Contexts

A context is a named search scope. Create one under Settings → Contexts, then use it in any query as context:name, or exclude it with -context:name.

There are two kinds:

  • Repositories: a list of repositories, for example all frontend projects. context:frontend useLegacyRouter searches only those.
  • Terms: a reusable piece of query, for example -file:_test\.go$ -file:\.spec\.ts$ to leave out tests. context:noTests retryBudget expands to the stored filters.

Context names start with a lowercase letter and contain only letters. Superusers can create global contexts that every user can use; everyone else’s contexts are personal.