Matt Keeler afa1cc98d1
Implement data filtering of some endpoints (#5579)
Fixes: #4222 

# Data Filtering

This PR will implement filtering for the following endpoints:

## Supported HTTP Endpoints

- `/agent/checks`
- `/agent/services`
- `/catalog/nodes`
- `/catalog/service/:service`
- `/catalog/connect/:service`
- `/catalog/node/:node`
- `/health/node/:node`
- `/health/checks/:service`
- `/health/service/:service`
- `/health/connect/:service`
- `/health/state/:state`
- `/internal/ui/nodes`
- `/internal/ui/services`

More can be added going forward and any endpoint which is used to list some data is a good candidate.

## Usage

When using the HTTP API a `filter` query parameter can be used to pass a filter expression to Consul. Filter Expressions take the general form of:

```
<selector> == <value>
<selector> != <value>
<value> in <selector>
<value> not in <selector>
<selector> contains <value>
<selector> not contains <value>
<selector> is empty
<selector> is not empty
not <other expression>
<expression 1> and <expression 2>
<expression 1> or <expression 2>
```

Normal boolean logic and precedence is supported. All of the actual filtering and evaluation logic is coming from the [go-bexpr](https://github.com/hashicorp/go-bexpr) library

## Other changes

Adding the `Internal.ServiceDump` RPC endpoint. This will allow the UI to filter services better.
2019-04-16 12:00:15 -04:00

131 lines
4.6 KiB
Plaintext

<% wrap_layout :inner do %>
<% content_for :sidebar do %>
<ul class="nav docs-sidenav">
<li<%= sidebar_current("api-introduction") %>>
<a href="/api/index.html">API Introduction</a>
</li>
<li<%= sidebar_current("api-features") %>>
<a href="/api/features/consistency.html">API Features</a>
<ul class="nav">
<li<%= sidebar_current("api-consistency-modes") %>>
<a href="/api/features/consistency.html">Consistency Modes</a>
</li>
<li<%= sidebar_current("api-blocking-queries") %>>
<a href="/api/features/blocking.html">Blocking Queries</a>
</li>
<li<%= sidebar_current("api-filtering") %>>
<a href="/api/features/filtering.html">Filtering</a>
</li>
<li<%= sidebar_current("api-agent-caching") %>>
<a href="/api/features/caching.html">Agent Caching</a>
</li>
</ul>
</li>
<hr>
<li<%= sidebar_current("api-acl") %>>
<a href="/api/acl/acl.html">ACLs</a>
<ul class="nav">
<li<%= sidebar_current("api-acl-tokens") %>>
<a href="/api/acl/tokens.html">Tokens</a>
</li>
<li<%= sidebar_current("api-acl-tokens-legacy") %>>
<a href="/api/acl/legacy.html">Legacy Tokens</a>
</li>
<li<%= sidebar_current("api-acl-policies") %>>
<a href="/api/acl/policies.html">Policies</a>
</li>
</ul>
</li>
<li<%= sidebar_current("api-agent") %>>
<a href="/api/agent.html">Agent</a>
<ul class="nav">
<li<%= sidebar_current("api-agent-check") %>>
<a href="/api/agent/check.html">Checks</a>
</li>
<li<%= sidebar_current("api-agent-service") %>>
<a href="/api/agent/service.html">Services</a>
</li>
<li<%= sidebar_current("api-agent-connect") %>>
<a href="/api/agent/connect.html">Connect</a>
</li>
</ul>
</li>
<li<%= sidebar_current("api-catalog") %>>
<a href="/api/catalog.html">Catalog</a>
</li>
<li<%= sidebar_current("api-connect") %>>
<a href="/api/connect.html">Connect</a>
<ul class="nav">
<li<%= sidebar_current("api-connect-ca") %>>
<a href="/api/connect/ca.html">Certificate Authority (CA)</a>
</li>
<li<%= sidebar_current("api-connect-intentions") %>>
<a href="/api/connect/intentions.html">Intentions</a>
</li>
</ul>
</li>
<li<%= sidebar_current("api-coordinate") %>>
<a href="/api/coordinate.html">Coordinates</a>
</li>
<li<%= sidebar_current("api-event") %>>
<a href="/api/event.html">Events</a>
</li>
<li<%= sidebar_current("api-health") %>>
<a href="/api/health.html">Health</a>
</li>
<li<%= sidebar_current("api-kv-store") %>>
<a href="/api/kv.html">KV Store</a>
</li>
<li<%= sidebar_current("api-operator") %>>
<a href="/api/operator.html">Operator</a>
<ul class="nav">
<li<%= sidebar_current("api-operator-area") %>>
<a href="/api/operator/area.html">Area</a>
</li>
<li<%= sidebar_current("api-operator-autopilot") %>>
<a href="/api/operator/autopilot.html">Autopilot</a>
</li>
<li<%= sidebar_current("api-operator-keyring") %>>
<a href="/api/operator/keyring.html">Keyring</a>
</li>
<li<%= sidebar_current("api-operator-license") %>>
<a href="/api/operator/license.html">License</a>
</li>
<li<%= sidebar_current("api-operator-raft") %>>
<a href="/api/operator/raft.html">Raft</a>
</li>
<li<%= sidebar_current("api-operator-segment") %>>
<a href="/api/operator/segment.html">Segment</a>
</li>
</ul>
</li>
<li<%= sidebar_current("api-query") %>>
<a href="/api/query.html">Prepared Queries</a>
</li>
<li<%= sidebar_current("api-session") %>>
<a href="/api/session.html">Sessions</a>
</li>
<li<%= sidebar_current("api-snapshot") %>>
<a href="/api/snapshot.html">Snapshots</a>
</li>
<li<%= sidebar_current("api-status") %>>
<a href="/api/status.html">Status</a>
</li>
<li<%= sidebar_current("api-txn") %>>
<a href="/api/txn.html">Transactions</a>
</li>
<hr>
<li<%= sidebar_current("api-libraries-and-sdks") %>>
<a href="/api/libraries-and-sdks.html">Libraries &amp; SDKs</a>
</li>
</ul>
<% end %>
<%= yield %>
<% end %>