add ns and ws query parameter to es query body

Signed-off-by: wanjunlei <wanjunlei@yunify.com>
This commit is contained in:
wanjunlei
2020-07-28 12:08:49 +08:00
parent b51a5c22f2
commit b5392b97c0
4 changed files with 73 additions and 35 deletions

View File

@@ -38,19 +38,23 @@ func NewEventsOperator(client auditing.Client) Interface {
func (eo *eventsOperator) Events(queryParam *v1alpha1.Query, func (eo *eventsOperator) Events(queryParam *v1alpha1.Query,
MutateFilterFunc func(*auditing.Filter)) (*v1alpha1.APIResponse, error) { MutateFilterFunc func(*auditing.Filter)) (*v1alpha1.APIResponse, error) {
filter := &auditing.Filter{ filter := &auditing.Filter{
ObjectRefNames: stringutils.Split(queryParam.ObjectRefNameFilter, ","), ObjectRefNamespaces: stringutils.Split(queryParam.ObjectRefNamespaceFilter, ","),
ObjectRefNameFuzzy: stringutils.Split(queryParam.ObjectRefNameSearch, ","), ObjectRefNamespaceFuzzy: stringutils.Split(queryParam.ObjectRefNamespaceSearch, ","),
Levels: stringutils.Split(queryParam.LevelFilter, ","), Workspaces: stringutils.Split(queryParam.WorkspaceFilter, ","),
Verbs: stringutils.Split(queryParam.VerbFilter, ","), WorkspaceFuzzy: stringutils.Split(queryParam.WorkspaceSearch, ","),
Users: stringutils.Split(queryParam.UserFilter, ","), ObjectRefNames: stringutils.Split(queryParam.ObjectRefNameFilter, ","),
UserFuzzy: stringutils.Split(queryParam.UserSearch, ","), ObjectRefNameFuzzy: stringutils.Split(queryParam.ObjectRefNameSearch, ","),
GroupFuzzy: stringutils.Split(queryParam.GroupSearch, ","), Levels: stringutils.Split(queryParam.LevelFilter, ","),
SourceIpFuzzy: stringutils.Split(queryParam.SourceIpSearch, ","), Verbs: stringutils.Split(queryParam.VerbFilter, ","),
ObjectRefResources: stringutils.Split(queryParam.ObjectRefResourceFilter, ","), Users: stringutils.Split(queryParam.UserFilter, ","),
ObjectRefSubresources: stringutils.Split(queryParam.ObjectRefSubresourceFilter, ","), UserFuzzy: stringutils.Split(queryParam.UserSearch, ","),
ResponseStatus: stringutils.Split(queryParam.ResponseStatusFilter, ","), GroupFuzzy: stringutils.Split(queryParam.GroupSearch, ","),
StartTime: queryParam.StartTime, SourceIpFuzzy: stringutils.Split(queryParam.SourceIpSearch, ","),
EndTime: queryParam.EndTime, ObjectRefResources: stringutils.Split(queryParam.ObjectRefResourceFilter, ","),
ObjectRefSubresources: stringutils.Split(queryParam.ObjectRefSubresourceFilter, ","),
ResponseStatus: stringutils.Split(queryParam.ResponseStatusFilter, ","),
StartTime: queryParam.StartTime,
EndTime: queryParam.EndTime,
} }
if MutateFilterFunc != nil { if MutateFilterFunc != nil {
MutateFilterFunc(filter) MutateFilterFunc(filter)
@@ -70,19 +74,19 @@ func (eo *eventsOperator) Events(queryParam *v1alpha1.Query,
var err error var err error
switch queryParam.Operation { switch queryParam.Operation {
case "histogram": case "histogram":
if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.ObjectRefWorkspaceMap) == 0 { if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.WorkspaceMap) == 0 {
ar.Histogram = &auditing.Histogram{} ar.Histogram = &auditing.Histogram{}
} else { } else {
ar.Histogram, err = eo.client.CountOverTime(filter, queryParam.Interval) ar.Histogram, err = eo.client.CountOverTime(filter, queryParam.Interval)
} }
case "statistics": case "statistics":
if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.ObjectRefWorkspaceMap) == 0 { if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.WorkspaceMap) == 0 {
ar.Statistics = &auditing.Statistics{} ar.Statistics = &auditing.Statistics{}
} else { } else {
ar.Statistics, err = eo.client.StatisticsOnResources(filter) ar.Statistics, err = eo.client.StatisticsOnResources(filter)
} }
default: default:
if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.ObjectRefWorkspaceMap) == 0 { if len(filter.ObjectRefNamespaceMap) == 0 && len(filter.WorkspaceMap) == 0 {
ar.Events = &auditing.Events{} ar.Events = &auditing.Events{}
} else { } else {
ar.Events, err = eo.client.SearchAuditingEvent(filter, queryParam.From, queryParam.Size, queryParam.Sort) ar.Events, err = eo.client.SearchAuditingEvent(filter, queryParam.From, queryParam.Size, queryParam.Sort)

View File

@@ -922,7 +922,7 @@ func (t *tenantOperator) Auditing(user user.Info, queryParam *auditingv1alpha1.Q
return t.auditing.Events(queryParam, func(filter *auditingclient.Filter) { return t.auditing.Events(queryParam, func(filter *auditingclient.Filter) {
filter.ObjectRefNamespaceMap = namespaceCreateTimeMap filter.ObjectRefNamespaceMap = namespaceCreateTimeMap
filter.ObjectRefWorkspaceMap = workspaceCreateTimeMap filter.WorkspaceMap = workspaceCreateTimeMap
}) })
} }

View File

@@ -305,7 +305,7 @@ func parseToQueryPart(f *auditing.Filter) interface{} {
"bool": &b, "bool": &b,
} }
if len(f.ObjectRefNamespaceMap) > 0 || len(f.ObjectRefWorkspaceMap) > 0 { if len(f.ObjectRefNamespaceMap) > 0 || len(f.WorkspaceMap) > 0 {
bi := BoolBody{MinimumShouldMatch: &mini} bi := BoolBody{MinimumShouldMatch: &mini}
for k, v := range f.ObjectRefNamespaceMap { for k, v := range f.ObjectRefNamespaceMap {
bi.Should = append(bi.Should, map[string]interface{}{ bi.Should = append(bi.Should, map[string]interface{}{
@@ -323,7 +323,7 @@ func parseToQueryPart(f *auditing.Filter) interface{} {
}) })
} }
for k, v := range f.ObjectRefWorkspaceMap { for k, v := range f.WorkspaceMap {
bi.Should = append(bi.Should, map[string]interface{}{ bi.Should = append(bi.Should, map[string]interface{}{
"bool": &BoolBody{ "bool": &BoolBody{
Filter: []map[string]interface{}{{ Filter: []map[string]interface{}{{
@@ -360,6 +360,36 @@ func parseToQueryPart(f *auditing.Filter) interface{} {
return &bi return &bi
} }
if len(f.ObjectRefNamespaces) > 0 {
if bi := shouldBoolbody("match_phrase_prefix", "ObjectRef.Namespace.keyword",
f.ObjectRefNamespaces, nil); bi != nil {
b.Filter = append(b.Filter, map[string]interface{}{"bool": bi})
}
}
if len(f.ObjectRefNamespaceFuzzy) > 0 {
if bi := shouldBoolbody("wildcard", "ObjectRef.Namespace",
f.ObjectRefNamespaceFuzzy, func(s string) string {
return fmt.Sprintf("*" + s + "*")
}); bi != nil {
b.Filter = append(b.Filter, map[string]interface{}{"bool": bi})
}
}
if len(f.Workspaces) > 0 {
if bi := shouldBoolbody("match_phrase_prefix", "Workspace.keyword",
f.Workspaces, nil); bi != nil {
b.Filter = append(b.Filter, map[string]interface{}{"bool": bi})
}
}
if len(f.WorkspaceFuzzy) > 0 {
if bi := shouldBoolbody("wildcard", "Workspace",
f.WorkspaceFuzzy, func(s string) string {
return fmt.Sprintf("*" + s + "*")
}); bi != nil {
b.Filter = append(b.Filter, map[string]interface{}{"bool": bi})
}
}
if len(f.ObjectRefNames) > 0 { if len(f.ObjectRefNames) > 0 {
if bi := shouldBoolbody("match_phrase_prefix", "ObjectRef.Name.keyword", if bi := shouldBoolbody("match_phrase_prefix", "ObjectRef.Name.keyword",
f.ObjectRefNames, nil); bi != nil { f.ObjectRefNames, nil); bi != nil {

View File

@@ -27,22 +27,26 @@ type Client interface {
} }
type Filter struct { type Filter struct {
ObjectRefNamespaceMap map[string]time.Time ObjectRefNamespaceMap map[string]time.Time
ObjectRefWorkspaceMap map[string]time.Time WorkspaceMap map[string]time.Time
ObjectRefNames []string ObjectRefNamespaces []string
ObjectRefNameFuzzy []string ObjectRefNamespaceFuzzy []string
Levels []string Workspaces []string
Verbs []string WorkspaceFuzzy []string
Users []string ObjectRefNames []string
UserFuzzy []string ObjectRefNameFuzzy []string
GroupFuzzy []string Levels []string
SourceIpFuzzy []string Verbs []string
ObjectRefResources []string Users []string
ObjectRefSubresources []string UserFuzzy []string
ResponseCodes []int32 GroupFuzzy []string
ResponseStatus []string SourceIpFuzzy []string
StartTime *time.Time ObjectRefResources []string
EndTime *time.Time ObjectRefSubresources []string
ResponseCodes []int32
ResponseStatus []string
StartTime *time.Time
EndTime *time.Time
} }
type Event map[string]interface{} type Event map[string]interface{}