|
@@ -30,13 +30,13 @@ import (
|
|
// ......
|
|
// ......
|
|
// }
|
|
// }
|
|
type SingleItem struct {
|
|
type SingleItem struct {
|
|
- nv string // 当前值
|
|
|
|
- ov string // 上一次的值
|
|
|
|
|
|
+ nv ItemValue // 当前值
|
|
|
|
+ ov ItemValue // 上一次的值
|
|
|
|
|
|
- rules map[string]Rule
|
|
|
|
|
|
+ rules map[EventName]Rule
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) Check(ov, nv string) string {
|
|
|
|
|
|
+func (s *SingleItem) Check(ov, nv ItemValue) EventName {
|
|
defer func() {
|
|
defer func() {
|
|
s.nv = ""
|
|
s.nv = ""
|
|
s.ov = ""
|
|
s.ov = ""
|
|
@@ -51,6 +51,38 @@ func (s *SingleItem) Check(ov, nv string) string {
|
|
return ""
|
|
return ""
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (s *SingleItem) checkForMulti(ov, nv ItemValue, rule Rule) bool {
|
|
|
|
+ if ov == "" || nv == "" {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ s.ov = ov
|
|
|
|
+ s.nv = nv
|
|
|
|
+ defer func() {
|
|
|
|
+ s.nv = ""
|
|
|
|
+ s.ov = ""
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ var ovIn, ovNotIn, nvIn, nvNotIn = true, true, true, true
|
|
|
|
+ if rule.OvIn != nil {
|
|
|
|
+ ovIn = s.ovIn(rule.OvIn)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if rule.OvNotIn != nil {
|
|
|
|
+ ovNotIn = s.ovNotIn(rule.OvNotIn)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if rule.NvIn != nil {
|
|
|
|
+ nvIn = s.nvIn(rule.NvIn)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if rule.NvNotIn != nil {
|
|
|
|
+ nvNotIn = s.nvNotIn(rule.NvNotIn)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ovIn && ovNotIn && nvIn && nvNotIn
|
|
|
|
+}
|
|
|
|
+
|
|
func (s *SingleItem) check(rule Rule) bool {
|
|
func (s *SingleItem) check(rule Rule) bool {
|
|
if s.ov == "" || s.nv == "" {
|
|
if s.ov == "" || s.nv == "" {
|
|
return false
|
|
return false
|
|
@@ -76,7 +108,7 @@ func (s *SingleItem) check(rule Rule) bool {
|
|
return ovIn && ovNotIn && nvIn && nvNotIn
|
|
return ovIn && ovNotIn && nvIn && nvNotIn
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) ovIn(slice []string) bool {
|
|
|
|
|
|
+func (s *SingleItem) ovIn(slice []ItemValue) bool {
|
|
b := true
|
|
b := true
|
|
if slice != nil && s.inSlice(slice, s.ov) == false {
|
|
if slice != nil && s.inSlice(slice, s.ov) == false {
|
|
b = false
|
|
b = false
|
|
@@ -84,7 +116,7 @@ func (s *SingleItem) ovIn(slice []string) bool {
|
|
return b
|
|
return b
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) ovNotIn(slice []string) bool {
|
|
|
|
|
|
+func (s *SingleItem) ovNotIn(slice []ItemValue) bool {
|
|
b := true
|
|
b := true
|
|
if slice != nil && s.inSlice(slice, s.ov) == true {
|
|
if slice != nil && s.inSlice(slice, s.ov) == true {
|
|
b = false
|
|
b = false
|
|
@@ -92,7 +124,7 @@ func (s *SingleItem) ovNotIn(slice []string) bool {
|
|
return b
|
|
return b
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) nvIn(slice []string) bool {
|
|
|
|
|
|
+func (s *SingleItem) nvIn(slice []ItemValue) bool {
|
|
b := true
|
|
b := true
|
|
if slice != nil && s.inSlice(slice, s.nv) == false {
|
|
if slice != nil && s.inSlice(slice, s.nv) == false {
|
|
b = false
|
|
b = false
|
|
@@ -100,7 +132,7 @@ func (s *SingleItem) nvIn(slice []string) bool {
|
|
return b
|
|
return b
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) nvNotIn(slice []string) bool {
|
|
|
|
|
|
+func (s *SingleItem) nvNotIn(slice []ItemValue) bool {
|
|
b := true
|
|
b := true
|
|
if slice != nil && s.inSlice(slice, s.nv) == true {
|
|
if slice != nil && s.inSlice(slice, s.nv) == true {
|
|
b = false
|
|
b = false
|
|
@@ -108,7 +140,7 @@ func (s *SingleItem) nvNotIn(slice []string) bool {
|
|
return b
|
|
return b
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) inSlice(slice []string, v string) bool {
|
|
|
|
|
|
+func (s *SingleItem) inSlice(slice []ItemValue, v ItemValue) bool {
|
|
for _, s2 := range slice {
|
|
for _, s2 := range slice {
|
|
s1 := s.transVar(s2)
|
|
s1 := s.transVar(s2)
|
|
|
|
|
|
@@ -123,7 +155,7 @@ func (s *SingleItem) inSlice(slice []string, v string) bool {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *SingleItem) transVar(v string) string {
|
|
|
|
|
|
+func (s *SingleItem) transVar(v ItemValue) ItemValue {
|
|
if v == VAR_NV {
|
|
if v == VAR_NV {
|
|
v = s.nv
|
|
v = s.nv
|
|
}
|
|
}
|
|
@@ -208,12 +240,17 @@ func (s *SingleItem) compareLogic(r string, v string) bool {
|
|
}
|
|
}
|
|
|
|
|
|
// NewSingleCheck 生成一个检测对象, 之后调用Check来获得事件名称
|
|
// NewSingleCheck 生成一个检测对象, 之后调用Check来获得事件名称
|
|
-func NewSingleCheck(rules map[string]Rule) *SingleItem {
|
|
|
|
|
|
+func NewSingleCheck(rules map[EventName]Rule) *SingleItem {
|
|
return &SingleItem{
|
|
return &SingleItem{
|
|
rules: rules,
|
|
rules: rules,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// NewSingleCheck 生成一个检测对象, 之后调用Check来获得事件名称
|
|
|
|
+func newSingleCheckForMultiItem() *SingleItem {
|
|
|
|
+ return &SingleItem{}
|
|
|
|
+}
|
|
|
|
+
|
|
func StepTest(ov, nv, ruleString string) string {
|
|
func StepTest(ov, nv, ruleString string) string {
|
|
rules := make(map[string]Rule)
|
|
rules := make(map[string]Rule)
|
|
err := json.Unmarshal([]byte(ruleString), &rules)
|
|
err := json.Unmarshal([]byte(ruleString), &rules)
|