This topic describes the basic syntax of the domain-specific language (DSL) for Simple Log Service.
Comments
Start the comment of a step with a number sign (#). Examples:
# Specify the default topic. This is a comment at the beginning of a step.
e_set("__topic__", "access_log") # Specify the default topic. This is a comment at the end of a step.
Line wrapping
If the parameter list or string of a function does not fit on a single line, you can separate the parameter list or the string.
If the parameter list contains a comma (,), you can split the parameter list immediately after the comma (,).
If you want to split a string, use a backslash (\) to indicate that the string continues in the next line.
Examples:
e_set("__topic__", "v1",
"type", "v2", # Use a comma (,) as a line feed.
"length", 100)
e_set("__topic__", "this is a very long long long .........." \
"......long text") # Use a backslash (\) as a line feed.
Function invoking
Invoke the basic functions
e_set("abc", "xyz")
NoteWhen you write a data transformation statement, the data types and the number of parameters that you pass to a function must meet the syntax of the function.
Pass the basic variable parameters
str_replace(value, old [,new [,count] ])
NoteThe parameters that are enclosed in the square brackets [] are optional. For example, the
new
andcount
parameters in the preceding function are optional. You cannot pass these parameters the same way you pass the named parameters. You must pass these parameters in sequence.# Invalid examples str_replace("a-b-c", "-", new='%') str_replace("a-b-c", "-", new='%', count=1) # Valid examples str_replace("a-b-c", "-", '%') str_replace("a-b-c", "-", '%', 2)
Pass the named parameters
A parameter that has a default value is called a named parameter. For example, the
mode
parameter in thee_set("abc", "xyz", mode="fill")
function is a named parameter.You must pass the values of the named parameters in specific functions based on specific conditions. For more information, see the parameter description of each function.
You can pass the value of a named parameter when you configure a parameter in the format of
mode=...
.You can pass multiple named parameters in random order. For example,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")
is equivalent toe_csv("data", ["f1", "f2", "f3"], quote="|", sep='#')
.
NoteThe named parameters follow the non-named parameters.
Invoke a combination of functions
You can pass the returned value of a function as the value of a parameter to another function. In this case, you must make sure that the returned value is of the same data type as the value of the parameter. Examples:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz")))
Variable parameters
You can pass variable parameters to specific functions. The
v("f1", ....)
function specifies that multiple parameters can be passed. Example:v("f1", "f2", "f3")
.If you need to pass both variable parameters and named parameters, you must place the named parameters after the variable parameters. Example:
v("f1", "f2", "f3", "f4", mode="fill")
.
Operators
Comparison operators
The following comparison operators are supported in the DSL for Simple Log ServiceSimple Log Serviced mode:
>, <,>=, <=,! =,==
. You can also use the comparison functions that are provided by Log Service to perform the operations.Use comparison operators
# The following examples show how to use comparison operators. If the comparison condition is evaluated to True, the related log is discarded. e_if(3 > 2, DROP) # If 3 is greater than 2, the log is discarded. e_if(3 < 2, DROP) # If 3 is less than 2, the log is discarded. e_if(3 >= 2, DROP) # If 3 is greater than or equal to 2, the log is discarded. e_if(3 <= 2, DROP) # If 3 is less than or equal to 2, the log is discarded. e_if(3 == 2, DROP) # If 3 is equal to 2, the log is discarded. e_if(3 != 2, DROP) # If 3 is not equal to 2, the log is discarded. e_if(1 < 2 < 3, DROP) # If 2 is greater than 1 and 2 is less than 3, the log is discarded. e_if(0 < ct_int(v('x')) < 100, DROP) # If the value of the x field is greater than 0 and less than 100, the log is discarded.
Use the comparison functions that are provided by Simple Log Service
Operation
Function
Example
Equal to (
==
)op_eq
op_eq(v("name"), "xiao ming")
Not equal to (
!
op_ne
op_ne(v("name"), "xiao ming")
Greater than (
>
)op_gt
op_gt(ct_int(v("age")), )
Greater than or equal to (
>=
)op_ge
op_ge(ct_int(v("age")), 18)
Less than (
<
)op_lt
op_lt(ct_int(v("age")), 18)
Less than or equal to (
<=
)op_le
op_le(ct_int(v("age")), 18)
Logical operators
The following logical operators are supported in the DSL for Simple Log Service in standard mode: AND, OR, and NOT. You can also use the logical functions that are provided by Simple Log Service to perform the operations.
Use logical operators
# The following examples show how to use logical operators. If the logical condition is evaluated to True, the related log is discarded. e_if(True and False, DROP) # False is returned. e_if(True or False, DROP) # True is returned. e_if(True and not False, DROP) # True is returned. e_if(3 > 2 and 1 < 3, DROP) # True is returned. e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # If the value of the x field is greater than 100 or the value of the y field is less than 100, True is returned.
Use the logical functions that are provided by Simple Log Service
Operation
Function
Example
Logical operator AND (
and
)op_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))
Logical operator OR (
or
)op_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))
Logical operator NOT (
not
)op_not
op_not(op_gt(v("age"), 18))
Other operators
You cannot directly use specific DSL operators in standard mode. Simple Log Service provides functions that you can use to perform the operations. The following table describes the operators and functions.
Operation
Function
Example
Addition (
+
)op_add
op_add(v("age"), 2)
Subtraction (
-
)op_sub
op_sub(v("age"), 2)
Multiplication (
*
)op_mul
op_mul(v("size"), 2)
Exponentiation (
**
)op_pow
op_pow(v("size"), 2)
Floor division (
//
)op_div_floor
op_div_floor(v("bytes"), 1024)
Modulus (
%
)op_mod
op_mod(v("age"), 10)
Negation (
-
)op_neg
op_neg(v("profit"))
Existence check (
in
)op_in
op_in(["pass", "ok"], v("result"))
Nonexistence check (
not in
)op_not_in
op_not_in(["pass", "ok"], v("result"))
String slicing (
[ ...]
)op_slice
op_slice(v("message"), 0, 20)
In this example, the value of the
a
field is 3600 * 6. The following examples show an invalid function and a valid function to specify the value for the field.# * e_set("a", 3600 * 6) # Invalid e_set("a", op_mul(3600, 6)) # Valid # / e_set("bytes_kb", v("bytes") / 1024) # Invalid e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) # Valid
True or false evaluation
Some functions check whether a condition is true or false to specify the event processing logic. A condition can be a fixed value or a value returned by an expression function.
You can perform true or false evaluation for all types of data in the DSL for Simple Log Service orchestration. The following table describes the rules for true or false evaluation.
Data type | True | False |
Boolean | True, true | False, false |
None | N/A | Always false |
Numeric | Not 0 or 0.0 | 0 or 0.0 |
String | Not empty | Empty string |
Bytes | Not empty | Empty bytes |
Tuple | Not empty | Empty tuple |
List | Not empty | Empty list |
Dictionary | Not empty | Empty dictionary |
Table | One or more tables exist | No table exists |
Datetime | One or more datetime objects exist | No datetime object exists |
The following functions can be used to discard logs based on the conditions:
e_if(True, DROP) # If the value of the first parameter is True, the log is discarded.
e_if(1, DROP) # If the value of the first parameter is 1, the log is discarded.
e_if(v("abc"), DROP) #If the abc field exists and the value of this field is not empty, the log is discarded.
e_if(str_isdigit(v("abc")), DROP) # If the abc field exists and the value of this field contains only digits, the log is discarded.