mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 09:28:54 +00:00
parent
0b4b921f17
commit
184b268b10
2 changed files with 67 additions and 19 deletions
|
|
@ -226,6 +226,15 @@ func testSearchLabels(t *testing.T, db kolide.Datastore) {
|
|||
}
|
||||
|
||||
func testSearchLabelsLimit(t *testing.T, db kolide.Datastore) {
|
||||
if db.Name() == "inmem" {
|
||||
t.Skip("inmem is being deprecated, test skipped")
|
||||
}
|
||||
|
||||
_, err := db.NewLabel(&kolide.Label{
|
||||
Name: "All Hosts",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
})
|
||||
|
||||
for i := 0; i < 15; i++ {
|
||||
_, err := db.NewLabel(&kolide.Label{
|
||||
Name: fmt.Sprintf("foo-%d", i),
|
||||
|
|
@ -235,7 +244,7 @@ func testSearchLabelsLimit(t *testing.T, db kolide.Datastore) {
|
|||
|
||||
labels, err := db.SearchLabels("foo")
|
||||
require.Nil(t, err)
|
||||
assert.Len(t, labels, 10)
|
||||
assert.Len(t, labels, 11)
|
||||
}
|
||||
|
||||
func testListHostsInLabel(t *testing.T, db kolide.Datastore) {
|
||||
|
|
|
|||
|
|
@ -217,21 +217,15 @@ func (d *Datastore) searchLabelsWithOmits(query string, omit ...uint) ([]kolide.
|
|||
SELECT *
|
||||
FROM labels
|
||||
WHERE (
|
||||
(
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
OR (
|
||||
label_type=?
|
||||
AND name = 'All Hosts'
|
||||
)
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
AND id NOT IN (?)
|
||||
ORDER BY id ASC
|
||||
LIMIT 10
|
||||
`
|
||||
|
||||
sql, args, err := sqlx.In(sqlStatement, query, kolide.LabelTypeBuiltIn, omit)
|
||||
sql, args, err := sqlx.In(sqlStatement, query, omit)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "building query for labels with omits")
|
||||
}
|
||||
|
|
@ -244,9 +238,48 @@ func (d *Datastore) searchLabelsWithOmits(query string, omit ...uint) ([]kolide.
|
|||
return nil, errors.Wrap(err, "selecting labels with omits")
|
||||
}
|
||||
|
||||
matches, err = d.addAllHostsLabelToList(matches, omit...)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "adding all hosts label to matches")
|
||||
}
|
||||
|
||||
return matches, nil
|
||||
}
|
||||
|
||||
// When we search labels, we always want to make sure that the All Hosts label
|
||||
// is included in the results set. Sometimes it already is and we don't need to
|
||||
// add it, sometimes it's not so we explicitly add it.
|
||||
func (d *Datastore) addAllHostsLabelToList(labels []kolide.Label, omit ...uint) ([]kolide.Label, error) {
|
||||
sqlStatement := `
|
||||
SELECT *
|
||||
FROM labels
|
||||
WHERE
|
||||
label_type=?
|
||||
AND name = 'All Hosts'
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
var allHosts kolide.Label
|
||||
err := d.db.Get(&allHosts, sqlStatement, kolide.LabelTypeBuiltIn)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getting all hosts label")
|
||||
}
|
||||
|
||||
for _, omission := range omit {
|
||||
if omission == allHosts.ID {
|
||||
return labels, nil
|
||||
}
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
if label.ID == allHosts.ID {
|
||||
return labels, nil
|
||||
}
|
||||
}
|
||||
|
||||
return append(labels, allHosts), nil
|
||||
}
|
||||
|
||||
func (d *Datastore) searchLabelsDefault(omit ...uint) ([]kolide.Label, error) {
|
||||
sqlStatement := `
|
||||
SELECT *
|
||||
|
|
@ -276,6 +309,12 @@ func (d *Datastore) searchLabelsDefault(omit ...uint) ([]kolide.Label, error) {
|
|||
if err != nil {
|
||||
return nil, errors.Wrap(err, "searching default labels rebound")
|
||||
}
|
||||
|
||||
labels, err = d.addAllHostsLabelToList(labels, omit...)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getting all host label")
|
||||
}
|
||||
|
||||
return labels, nil
|
||||
}
|
||||
|
||||
|
|
@ -294,23 +333,23 @@ func (d *Datastore) SearchLabels(query string, omit ...uint) ([]kolide.Label, er
|
|||
SELECT *
|
||||
FROM labels
|
||||
WHERE (
|
||||
(
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
OR (
|
||||
label_type=?
|
||||
AND name = 'All Hosts'
|
||||
)
|
||||
MATCH(name) AGAINST(? IN BOOLEAN MODE)
|
||||
AND NOT deleted
|
||||
)
|
||||
ORDER BY id ASC
|
||||
LIMIT 10
|
||||
`
|
||||
matches := []kolide.Label{}
|
||||
err := d.db.Select(&matches, sqlStatement, query, kolide.LabelTypeBuiltIn)
|
||||
err := d.db.Select(&matches, sqlStatement, query)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "selecting labels for search")
|
||||
}
|
||||
|
||||
matches, err = d.addAllHostsLabelToList(matches, omit...)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "adding all hosts label to matches")
|
||||
}
|
||||
|
||||
return matches, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue