Always return "All Hosts" label in targets unless selected (#637)

Closes #467
This commit is contained in:
Zachary Wasserman
2016-12-14 18:27:22 -08:00
committed by GitHub
parent 1ada011f37
commit b95c1dd6a0
4 changed files with 53 additions and 24 deletions
+22 -9
View File
@@ -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) {
+4 -1
View File
@@ -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
}
+6 -6
View File
@@ -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 {
+21 -8
View File
@@ -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)
}