O Idioma de expressão comum (IEC) é um idioma de código aberto não Turing-completo que pode ser usado para avaliar expressões. Cada inscrição no Eventarc Advanced inclui uma expressão de condição escrita em CEL que é usada para avaliar e filtrar mensagens. Também pode transformar o conteúdo dos dados de eventos escrevendo expressões de transformação com a CEL.
Em geral, uma expressão de condição consiste numa ou mais declarações unidas por operadores lógicos (&&
, ||
ou !
). Cada declaração expressa uma regra baseada em atributos que é aplicada aos dados. Normalmente, os operadores são usados para comparar o valor contido numa variável com um valor literal.
Por exemplo, se o valor de message.type
for
google.cloud.dataflow.job.v1beta3.statusChanged
, a expressão
message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
é avaliada como
True
.
Para mais informações, consulte o seguinte:
Atributos disponíveis
Todos os atributos do contexto do evento podem ser acedidos como variáveis através de um objeto message
predefinido. Estas variáveis são preenchidas com valores baseados nos atributos de contexto do evento no tempo de execução. Uma inscrição pode usar uma variável para expressar um atributo específico. Por exemplo, message.type
devolve o valor do atributo type
.
Tenha em conta o seguinte:
Os eventos podem incluir e as inscrições podem usar qualquer número de atributos CloudEvents personalizados adicionais com nomes distintos (também conhecidos como atributos de extensão). No entanto, são representados como tipos
String
em expressões CEL, independentemente do respetivo formato real. Pode usar uma expressão CEL para converter os respetivos valores noutros tipos.Não pode avaliar as inscrições com base no conteúdo da carga útil do evento. As variáveis
message.data
emessage.data_base64
são reservadas e não podem ser usadas em expressões. No entanto, a CEL é suportada quando transforma dados de eventos, o que lhe permite modificar o conteúdo do payload do evento (por exemplo, para cumprir o contrato da API de um destino específico).
Pode aceder aos seguintes atributos quando avalia expressões de condições para uma inscrição:
Atributo | Tipo de atributo | Descrição |
---|---|---|
message.datacontenttype |
String |
O tipo de conteúdo do valor data |
message.dataschema |
URI |
Identifica o esquema que data cumpre |
message.id |
String |
Identifica o evento. Os produtores têm de garantir que source +
id é único para cada evento distinto. |
message.source |
URI-reference |
Identifica o contexto em que ocorreu um evento |
message.specversion |
String |
A versão da especificação CloudEvents que o evento usa |
message.subject |
String |
Descreve o assunto do evento no contexto do produtor do evento
(identificado por source ) |
message.time |
Timestamp |
Data/hora em que a ocorrência aconteceu. Pode ser definida para outra hora (como a hora atual) pelo produtor de CloudEvents. No entanto, todos os produtores para o mesmo source têm de ser consistentes |
message.type |
String |
Descreve o tipo de evento relacionado com a ocorrência de origem |
Operadores e funções
Pode usar operadores e funções para criar expressões lógicas complexas.
Os operadores lógicos, como &&
, ||,
e !
, permitem validar várias variáveis numa expressão condicional. Por exemplo,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
une duas declarações e requer que ambas as declarações sejam True
para produzir um resultado geral de True
.
Os operadores de manipulação de strings, como x.contains('y')
, correspondem a strings ou substrings que define e permitem-lhe desenvolver regras para corresponder a mensagens sem listar todas as combinações possíveis.
O Eventarc Advanced também suporta funções de extensão, como merge
e flatten
, que podem ser usadas para transformar dados e simplificar a modificação de eventos recebidos de um barramento.
Consulte a lista de operadores e funções predefinidos da CEL e macros predefinidas da CEL.
Operadores lógicos
A tabela seguinte descreve os operadores lógicos suportados pelo Eventarc Advanced.
Expressão | Descrição |
---|---|
x == "my_string" |
Devolve True se x for igual ao argumento literal de string constante. |
x == R"my_string\n" |
Devolve True se x for igual ao literal de string não processado fornecido que não interpreta sequências de escape. Os literais de strings
brutas são úteis para expressar strings que, por sua vez, têm de usar
sequências de escape, como expressões regulares ou texto de programas. |
x == y |
Devolve True se x for igual a
y . |
x != y |
Devolve True se x não for igual a
y . |
x && y |
Devolve True se x e y
forem True . |
x || y |
Devolve True se x , y ou ambos forem True . |
!x |
Devolve True se o valor booleano x for
False ou devolve False se o valor booleano
x for True . |
m['k'] |
Se a chave k estiver presente, devolve o valor na chave
k no mapa de string para string m . Se key
k não estiver presente, devolve um erro que
faz com que a regra em avaliação não corresponda. |
Operadores de manipulação de strings
A tabela seguinte descreve os operadores de manipulação de strings suportados pelo Eventarc Advanced.
Expressão | Descrição |
---|---|
double(x) |
Converte o resultado da string de x num tipo double . A string convertida pode ser usada para comparar números de vírgula flutuante
com operadores aritméticos padrão, como > e
<= . Isto só funciona para valores que podem ser números de vírgula flutuante. |
int(x) |
Converte o resultado da string de x num tipo int . A string convertida pode ser usada para comparar números inteiros com operadores aritméticos padrão, como > e <= . Isto só funciona para valores que podem ser números inteiros. |
x + y |
Devolve a string concatenada xy . |
x.contains(y) |
Devolve True se a string x contiver a substring y . |
x.endsWith(y) |
Devolve True se a string x terminar com a substring y . |
x.join() |
Devolve uma nova string onde os elementos de uma lista de strings são
concatenados. Aceita um separador opcional que é colocado entre os elementos na string resultante. Por exemplo,
a seguinte expressão devolve 'hello world' :
|
x.lowerAscii() |
Devolve uma nova string em que todos os carateres ASCII estão em minúsculas. |
x.matches(y) |
Devolve O padrão RE2 é compilado com a opção RE2::Latin1 que desativa as funcionalidades Unicode. |
x.replace(y,z) |
Devolve uma nova string em que as ocorrências da substring y são
substituídas pela substring z . Aceita um argumento opcional que limita o número de substituições a fazer. Por exemplo, a seguinte expressão
devolve 'wello hello' :
|
x.split(y) |
Devolve uma lista de strings divididas a partir da entrada pelo separador
y . Aceita um argumento opcional que limita o número de
subcadeias de carateres a produzir. Por exemplo, a seguinte expressão devolve
['hello', 'hello hello'] :
|
x.startsWith(y) |
Devolve True se a string x começar com a substring y . |
x.upperAscii() |
Devolve uma nova string em que todos os carateres ASCII estão em maiúsculas. |
Funções de expressões regulares
A tabela seguinte descreve as funções de expressões regulares suportadas pelo Eventarc Advanced.
Expressão | Descrição |
---|---|
re.capture(target,regex) |
Usa
|
re.captureN(target,regex) |
Usa regex para capturar o nome do grupo e a string (para grupos com nome) e o índice do grupo e a string (para grupos sem nome) da string target e devolve um mapa de pares de chave e valor. Por
exemplo, a seguinte expressão devolve
{"1": "user", "Username": "testuser", "Domain": "testdomain"} :
|
re.extract(target,regex,rewrite) |
Usa regex para extrair valores de grupos correspondentes da string target e devolve uma string dos valores extraídos formatada com base no argumento rewrite . Por exemplo,
a seguinte expressão devolve "example.com" :
|
x.matches(regex) |
Devolve O padrão RE2 é compilado com a opção RE2::Latin1 que desativa as funcionalidades Unicode. |
As expressões regulares seguem a sintaxe RE2. Tenha em atenção que o
R
antes das expressões regulares indica uma string não processada que não
requer carateres de escape.
Funções de extensões
O Eventarc Advanced suporta determinadas funções de extensão que podem ser usadas para transformar os dados de eventos recebidos através de um barramento. Para mais informações e exemplos, consulte o artigo Transforme eventos recebidos.