Always return "All Hosts" label in targets unless selected (#637)
Closes #467
This commit is contained in:
committed by
GitHub
parent
1ada011f37
commit
b95c1dd6a0
@@ -197,23 +197,34 @@ func testSearchLabels(t *testing.T, db kolide.Datastore) {
|
||||
})
|
||||
require.Nil(t, err)
|
||||
|
||||
// We once threw errors when the search query was empty. Verify that we
|
||||
// don't error.
|
||||
_, err = db.SearchLabels("")
|
||||
all, err := db.NewLabel(&kolide.Label{
|
||||
Name: "All Hosts",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
all, err = db.Label(all.ID)
|
||||
require.Nil(t, err)
|
||||
|
||||
labels, err := db.SearchLabels("foo")
|
||||
assert.Nil(t, err)
|
||||
assert.Len(t, labels, 2)
|
||||
// We once threw errors when the search query was empty. Verify that we
|
||||
// don't error.
|
||||
labels, err := db.SearchLabels("")
|
||||
require.Nil(t, err)
|
||||
assert.Contains(t, labels, *all)
|
||||
|
||||
label, err := db.SearchLabels("foo", l3.ID)
|
||||
labels, err = db.SearchLabels("foo")
|
||||
assert.Nil(t, err)
|
||||
assert.Len(t, labels, 3)
|
||||
assert.Contains(t, labels, *all)
|
||||
|
||||
label, err := db.SearchLabels("foo", l3.ID, all.ID)
|
||||
assert.Nil(t, err)
|
||||
assert.Len(t, label, 1)
|
||||
assert.Equal(t, "foo", label[0].Name)
|
||||
|
||||
none, err := db.SearchLabels("xxx")
|
||||
assert.Nil(t, err)
|
||||
assert.Len(t, none, 0)
|
||||
assert.Len(t, none, 1)
|
||||
assert.Contains(t, labels, *all)
|
||||
}
|
||||
|
||||
func testSearchLabelsLimit(t *testing.T, db kolide.Datastore) {
|
||||
@@ -296,8 +307,10 @@ func testBuiltInLabels(t *testing.T, db kolide.Datastore) {
|
||||
|
||||
hits, err := db.SearchLabels("Mac OS X")
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 1, len(hits))
|
||||
// Should get Mac OS X and All Hosts
|
||||
assert.Equal(t, 2, len(hits))
|
||||
assert.Equal(t, kolide.LabelTypeBuiltIn, hits[0].LabelType)
|
||||
assert.Equal(t, kolide.LabelTypeBuiltIn, hits[1].LabelType)
|
||||
}
|
||||
|
||||
func testListUniqueHostsInLabels(t *testing.T, db kolide.Datastore) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
kolide_errors "github.com/kolide/kolide-ose/server/errors"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/patrickmn/sortutil"
|
||||
)
|
||||
|
||||
func (orm *Datastore) NewLabel(label *kolide.Label) (*kolide.Label, error) {
|
||||
@@ -192,12 +193,14 @@ func (orm *Datastore) SearchLabels(query string, omit ...uint) ([]kolide.Label,
|
||||
break
|
||||
}
|
||||
|
||||
if strings.Contains(l.Name, query) && !omitLookup[l.ID] {
|
||||
if (strings.Contains(l.Name, query) || l.Name == "All Hosts") && !omitLookup[l.ID] {
|
||||
results = append(results, *l)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
sortutil.AscByField(results, "ID")
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -169,6 +169,12 @@ func (d *Datastore) createBuiltinLabels() error {
|
||||
}
|
||||
|
||||
labels := []kolide.Label{
|
||||
{
|
||||
Platform: "all",
|
||||
Name: "All Hosts",
|
||||
Query: "select 1;",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "darwin",
|
||||
Name: "Mac OS X",
|
||||
@@ -193,12 +199,6 @@ func (d *Datastore) createBuiltinLabels() error {
|
||||
Query: "select 1 from osquery_info where build_platform = 'windows';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "all",
|
||||
Name: "All Hosts",
|
||||
Query: "select 1;",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
|
||||
@@ -219,13 +219,20 @@ func (d *Datastore) searchLabelsWithOmits(query string, omit ...uint) ([]kolide.
|
||||
sqlStatement := `
|
||||
SELECT *
|
||||
FROM labels
|
||||
WHERE MATCH(name)
|
||||
AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
WHERE (
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
OR (
|
||||
label_type=?
|
||||
AND name = 'All Hosts'
|
||||
)
|
||||
AND id NOT IN (?)
|
||||
ORDER BY id ASC
|
||||
LIMIT 10
|
||||
`
|
||||
sql, args, err := sqlx.In(sqlStatement, query, omit)
|
||||
|
||||
sql, args, err := sqlx.In(sqlStatement, query, kolide.LabelTypeBuiltIn, omit)
|
||||
if err != nil {
|
||||
return nil, errors.DatabaseError(err)
|
||||
}
|
||||
@@ -255,13 +262,19 @@ func (d *Datastore) SearchLabels(query string, omit ...uint) ([]kolide.Label, er
|
||||
sqlStatement := `
|
||||
SELECT *
|
||||
FROM labels
|
||||
WHERE MATCH(name)
|
||||
AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
WHERE (
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
OR (
|
||||
label_type=?
|
||||
AND name = 'All Hosts'
|
||||
)
|
||||
ORDER BY id ASC
|
||||
LIMIT 10
|
||||
`
|
||||
matches := []kolide.Label{}
|
||||
err := d.db.Select(&matches, sqlStatement, query)
|
||||
err := d.db.Select(&matches, sqlStatement, query, kolide.LabelTypeBuiltIn)
|
||||
if err != nil {
|
||||
return nil, errors.DatabaseError(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user