s/Full Fetch/Recheck Support/ in logs and expose filter query param to search command (#4269)

* s/Full Fetch/Recheck Support/  and expose filter query param to command
This commit is contained in:
Todd authored and GitHub committed 2024-01-22 17:39:52 -08:00
1 parent 0dac9005c1
commit d0eb670dcf
3 files changed
+64 -2

No files matched your search

@@ -70,6 +70,11 @@ func (c *SearchCommand) Flags() *base.FlagSets {
Target: &c.flagQuery,
Usage: `If set, specifies the resource search query`,
})
f.StringVar(&base.StringVar{
Name: "filter",
Target: &c.FlagFilter,
Usage: "The filter operates against each item in the response. Using single quotes is recommended as filters contain double quotes. The format is the same as the filters used when performing a list. See https://www.boundaryproject.io/docs/concepts/filtering/resource-listing for details on filters when listing.",
})
f.StringVar(&base.StringVar{
Name: "resource",
Target: &c.flagResource,
@@ -155,6 +160,7 @@ func (c *SearchCommand) Search(ctx context.Context) (*api.Response, *daemon.Sear
}
tf := filterBy{
flagFilter: c.FlagFilter,
flagQuery: c.flagQuery,
resource: c.flagResource,
authTokenId: strings.Join(tSlice[:2], "_"),
@@ -187,6 +193,7 @@ func search(ctx context.Context, daemonPath string, fb filterBy, opt ...client.O
q.Add("auth_token_id", fb.authTokenId)
q.Add("resource", fb.resource)
q.Add("query", fb.flagQuery)
q.Add("filter", fb.flagFilter)
if fb.forceRefresh {
q.Add("force_refresh", "true")
}
@@ -337,6 +344,7 @@ func printSessionListTable(items []*sessions.Session) string {
}
type filterBy struct {
flagFilter string
flagQuery string
authTokenId string
resource string
@@ -225,6 +225,34 @@ func TestSearch(t *testing.T) {
assert.Len(t, r.Targets, 1)
})
t.Run("full target response from filter", func(t *testing.T) {
resp, r, apiErr, err := search(ctx, srv.BaseDotDir(), filterBy{
authTokenId: at.Id,
flagFilter: `"/item/id" matches "ttcp"`,
resource: "targets",
})
require.NoError(t, err)
assert.NoError(t, err)
assert.Nil(t, apiErr)
assert.NotNil(t, resp)
assert.NotNil(t, r)
assert.Len(t, r.Targets, 2)
})
t.Run("partial target response from filter", func(t *testing.T) {
resp, r, apiErr, err := search(ctx, srv.BaseDotDir(), filterBy{
authTokenId: at.Id,
flagFilter: `"/item/id" matches "ttcp_1234567890"`,
resource: "targets",
})
require.NoError(t, err)
assert.NoError(t, err)
assert.Nil(t, apiErr)
assert.NotNil(t, resp)
assert.NotNil(t, r)
assert.Len(t, r.Sessions, 0)
assert.Len(t, r.Targets, 1)
})
t.Run("session response from list", func(t *testing.T) {
resp, r, apiErr, err := search(ctx, srv.BaseDotDir(), filterBy{
authTokenId: at.Id,
@@ -264,4 +292,30 @@ func TestSearch(t *testing.T) {
assert.NotNil(t, r)
assert.Len(t, r.Sessions, 1)
})
t.Run("full session response from filter", func(t *testing.T) {
resp, r, apiErr, err := search(ctx, srv.BaseDotDir(), filterBy{
authTokenId: at.Id,
flagFilter: `"/item/id" matches "sess"`,
resource: "sessions",
})
require.NoError(t, err)
assert.NoError(t, err)
assert.Nil(t, apiErr)
assert.NotNil(t, resp)
assert.NotNil(t, r)
assert.Len(t, r.Sessions, 2)
})
t.Run("partial session response from filter", func(t *testing.T) {
resp, r, apiErr, err := search(ctx, srv.BaseDotDir(), filterBy{
authTokenId: at.Id,
flagFilter: `"/item/id" matches "sess_1234567890"`,
resource: "sessions",
})
require.NoError(t, err)
assert.NoError(t, err)
assert.Nil(t, apiErr)
assert.NotNil(t, resp)
assert.NotNil(t, r)
assert.Len(t, r.Sessions, 1)
})
}
@@ -239,8 +239,8 @@ func (s *CacheServer) Serve(ctx context.Context, cmd Commander, opt ...Option) e
s.infoKeys = append(s.infoKeys, "Max Search Refresh Timeout")
s.info["Refresh Interval"] = DefaultRefreshInterval.String()
s.infoKeys = append(s.infoKeys, "Refresh Interval")
s.info["Full Fetch Interval"] = DefaultRecheckSupportInterval.String()
s.infoKeys = append(s.infoKeys, "Full Fetch Interval")
s.info["Recheck Support Interval"] = DefaultRecheckSupportInterval.String()
s.infoKeys = append(s.infoKeys, "Recheck Support Interval")
ticOptions := []Option{}
if s.conf.RefreshInterval > 0 {