Este tópico descreve a sintaxe básica da linguagem específica de domínio (DSL) do Simple Log Service.
Comentários
Inicie o comentário de uma etapa com o caractere cerquilha (#). Exemplos:
# 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.
Quebra de linha
Se a lista de parâmetros ou a string de uma função não couber em uma única linha, separe-as.
Se a lista de parâmetros contiver uma vírgula (,), divida-a imediatamente após esse caractere.
Para dividir uma string, use uma barra invertida (\) para indicar que ela continua na próxima linha.
Exemplos:
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.
Invocação de funções
-
Invoque as funções básicas
e_set("abc", "xyz")NotaAo escrever uma instrução de transformação de dados, os tipos de dados e o número de parâmetros passados a uma função devem obedecer à sintaxe dela.
-
Passe os parâmetros variáveis básicos
str_replace(value, old [,new [,count] ])NotaOs parâmetros entre colchetes [] são opcionais. Por exemplo, os parâmetros
newecountna função anterior são opcionais. Não passe esses parâmetros como parâmetros nomeados; informe-os em sequência.# 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) -
Passe os parâmetros nomeados
Um parâmetro com valor padrão é chamado de parâmetro nomeado. Por exemplo, o parâmetro
modena funçãoe_set("abc", "xyz", mode="fill")é um parâmetro nomeado.Em funções específicas, passe os valores dos parâmetros nomeados conforme as condições exigidas. Para mais informações, consulte a descrição de parâmetros de cada função.
Defina o valor de um parâmetro nomeado no formato
mode=....Passe múltiplos parâmetros nomeados em ordem aleatória. Por exemplo,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")equivale ae_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
NotaOs parâmetros nomeados devem vir após os parâmetros não nomeados.
-
Invoque uma combinação de funções
Passe o valor retornado por uma função como valor de parâmetro para outra. Nesse caso, garanta que o valor retornado tenha o mesmo tipo de dados do parâmetro de destino. Exemplos:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz"))) -
Parâmetros variáveis
Algumas funções aceitam parâmetros variáveis. A função
v("f1", ....)indica que é possível passar múltiplos parâmetros. Exemplo:v("f1", "f2", "f3").Caso seja necessário passar parâmetros variáveis e nomeados simultaneamente, posicione os nomeados após os variáveis. Exemplo:
v("f1", "f2", "f3", "f4", mode="fill").
Operadores
-
Operadores de comparação
A DSL do Simple Log Service suporta os seguintes operadores de comparação no modo padrão:
>, <,>=, <=,! =,==. Alternativamente, utilize as funções de comparação fornecidas pelo Log Service para executar essas operações.-
Uso de operadores de comparação
# 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. -
Uso das funções de comparação do Simple Log Service
Operação
Função
Exemplo
Igual a (
==)op_eq
op_eq(v("name"), "xiao ming")Diferente de (
!op_ne
op_ne(v("name"), "xiao ming")Maior que (
>)op_gt
op_gt(ct_int(v("age")), )Maior ou igual a (
>=)op_ge
op_ge(ct_int(v("age")), 18)Menor que (
<)op_lt
op_lt(ct_int(v("age")), 18)Menor ou igual a (
<=)op_le
op_le(ct_int(v("age")), 18)
-
-
Operadores lógicos
No modo padrão, a DSL do Simple Log Service suporta os operadores lógicos AND, OR e NOT. Também é possível utilizar as funções lógicas fornecidas pelo Simple Log Service para realizar essas operações.
-
Uso de operadores lógicos
# 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. -
Uso das funções lógicas do Simple Log Service
Operação
Função
Exemplo
Operador lógico AND (
and)op_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))Operador lógico OR (
or)op_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))Operador lógico NOT (
not)op_not
op_not(op_gt(v("age"), 18))
-
-
Outros operadores
Certos operadores da DSL não podem ser usados diretamente no modo padrão. O Simple Log Service fornece funções específicas para executar essas operações. A tabela a seguir descreve os operadores e suas funções correspondentes.
Operação
Função
Exemplo
Adição (
+)op_add
op_add(v("age"), 2)Subtração (
-)op_sub
op_sub(v("age"), 2)Multiplicação (
*)op_mul
op_mul(v("size"), 2)Exponenciação (
**)op_pow
op_pow(v("size"), 2)Divisão inteira (
//)op_div_floor
op_div_floor(v("bytes"), 1024)Módulo (
%)op_mod
op_mod(v("age"), 10)Negação (
-)op_neg
op_neg(v("profit"))Verificação de existência (
in)op_in
op_in(["pass", "ok"], v("result"))Verificação de inexistência (
not in)op_not_in
op_not_in(["pass", "ok"], v("result"))Fatiamento de string (
[ ...])op_slice
op_slice(v("message"), 0, 20)Neste exemplo, o valor do campo
aé 3600 * 6. Os exemplos a seguir mostram uma função inválida e uma válida para definir esse valor.# * 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
Avaliação de verdadeiro ou falso
Algumas funções verificam se uma condição é verdadeira ou falsa para determinar a lógica de processamento de eventos. Essa condição pode ser um valor fixo ou um valor retornado por uma função de expressão.
A orquestração da DSL do Simple Log Service permite avaliar qualquer tipo de dado como verdadeiro ou falso. A tabela abaixo descreve as regras para essa avaliação.
|
Tipo de dado |
Verdadeiro |
Falso |
|
Booleano |
True, true |
False, false |
|
None |
N/A |
Sempre falso |
|
Numérico |
Diferente de 0 ou 0,0 |
0 ou 0,0 |
|
String |
Não vazia |
String vazia |
|
Bytes |
Não vazio |
Bytes vazios |
|
Tupla |
Não vazia |
Tupla vazia |
|
Lista |
Não vazia |
Lista vazia |
|
Dicionário |
Não vazio |
Dicionário vazio |
|
Tabela |
Uma ou mais tabelas existem |
Nenhuma tabela existe |
|
Datetime |
Um ou mais objetos datetime existem |
Nenhum objeto datetime existe |
As funções a seguir descartam logs com base nas condições avaliadas:
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.