Eventvisor

Concepts

Conditions

Conditions have various use cases in Eventvisor projects, ranging from filtering events from being tracked to conditionally routing them to different destinations.

Anatomy of a condition

A condition is based on the following properties:

  • A source for original value (see sources page), which can be expressed via several different properties like:
    • source
    • attribute
    • payload
    • lookup
  • An operator for the comparison between the source and the value
  • A value to compare against

Operators

These operators are supported as conditions:

OperatorType of attributeDescription
existsAttribute exists in context
notExistsAttribute does not exist
equalsanyEquals to
notEqualsanyNot equals to
greaterThaninteger, doubleGreater than
greaterThanOrEqualsinteger, doubleGreater than or equal to
lessThaninteger, doubleLess than
lessThanOrEqualsinteger, doubleLess than or equal to
containsstringContains string
notContainsstringDoes not contain string
startsWithstringStarts with string
endsWithstringEnds with string
instringIn array of strings
notInstringNot in array of strings
beforestring, dateDate comparison
afterstring, dateDate comparison
matchesstringMatches regex pattern
notMatchesstringDoes not match regex pattern
semverEqualsstringSemver equals to
semverNotEqualsstringSemver not equals to
semverGreaterThanstringSemver greater than
semverGreaterThanOrEqualsstringSemver greater than or equals
semverLessThanstringSemver less than
semverLessThanOrEqualsstringSemver less than or equals
includesarrayArray includes value
notIncludesarrayArray does not include value

Several examples below showing how attribute source can be used with each of them. You can of course use other sources as well.

equals

# ...
conditions:
- attribute: country
operator: equals
value: us

notEquals

# ...
conditions:
- attribute: country
operator: notEquals
value: us

greaterThan

# ...
conditions:
- attribute: age
operator: greaterThan
value: 21

greaterThanOrEquals

# ...
conditions:
- attribute: age
operator: greaterThanOrEquals
value: 18

lessThan

# ...
conditions:
- attribute: age
operator: lessThan
value: 65

lessThanOrEquals

# ...
conditions:
- attribute: age
operator: lessThanOrEquals
value: 64

contains

# ...
conditions:
- attribute: name
operator: contains
value: John

notContains

# ...
conditions:
- attribute: name
operator: notContains
value: Smith

startsWith

# ...
conditions:
- attribute: name
operator: startsWith
value: John

endsWith

# ...
conditions:
- attribute: name
operator: endsWith
value: Smith

in

# ...
conditions:
- attribute: country
operator: in
value:
- be
- nl
- lu

notIn

# ...
conditions:
- attribute: country
operator: notIn
value:
- fr
- gb
- de

before

# ...
conditions:
- attribute: date
operator: before
value: 2023-12-25T00:00:00Z

after

# ...
conditions:
- attribute: date
operator: after
value: 2023-12-25T00:00:00Z

semverEquals

# ...
conditions:
- attribute: version
operator: semverEquals
value: 1.0.0

semverNotEquals

# ...
conditions:
- attribute: version
operator: semverNotEquals
value: 1.0.0

semverGreaterThan

# ...
conditions:
- attribute: version
operator: semverGreaterThan
value: 1.0.0

semverGreaterThanOrEquals

# ...
conditions:
- attribute: version
operator: semverGreaterThanOrEquals
value: 1.0.0

semverLessThan

# ...
conditions:
- attribute: version
operator: semverLessThan
value: 1.0.0

semverLessThanOrEquals

# ...
conditions:
- attribute: version
operator: semverLessThanOrEquals
value: 1.0.0

exists

# ...
conditions:
- attribute: country
operator: exists

notExists

# ...
conditions:
- attribute: country
operator: notExists

includes

# ...
conditions:
- attribute: permissions
operator: includes
value: write

notIncludes

# ...
conditions:
- attribute: permissions
operator: notIncludes
value: write

matches

# ...
conditions:
- attribute: email
operator: matches
value: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
# optional regex flags
regexFlags: i # case-insensitive

notMatches

# ...
conditions:
- attribute: email
operator: notMatches
value: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
# optional regex flags
regexFlags: i # case-insensitive

Advanced conditions

Conditions can also be combined using and, or, and not operators.

and

When using and, it means all the direct children conditions under it must match against provided context.

# ...
conditions:
and:
- attribute: country
operator: equals
value: us
- attribute: device
operator: equals
value: iPhone

By default if and is not specified directly under conditions, it is implied.

or

When using or, it means at least one of the direct children conditions under it must match against provided context.

# ...
conditions:
or:
- attribute: country
operator: equals
value: us
- attribute: country
operator: equals
value: ca

not

# ...
conditions:
not:
- attribute: country
operator: equals
value: us

Complex

and and or can be combined to create complex conditions:

# ...
conditions:
- and:
- attribute: device
operator: equals
value: iPhone
- or:
- attribute: country
operator: equals
value: us
- attribute: country
operator: equals
value: ca

You can also nest and, or, and not operators:

# ...
conditions:
- not:
- or:
- attribute: country
operator: equals
value: us
- attribute: country
operator: equals
value: ca
Previous
Lookups