Use o idioma de expressão comum

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 e message.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':

['hello', 'world'].join(' ')

x.lowerAscii() Devolve uma nova string em que todos os carateres ASCII estão em minúsculas.
x.matches(y)

Devolve True se a string x corresponder ao padrão RE2 especificado y.

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':

'hello hello'.replace('he', 'we', 1)

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']:

'hello hello hello'.split(' ', 2)

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 regex para capturar o primeiro valor do grupo não nomeado ou nomeado na string target e devolve uma string. Por exemplo, a seguinte expressão devolve "o":

re.capture("hello", R"hell(o)")

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.captureN("The user testuser belongs to testdomain", R"The (user|domain) (?P.*) belongs to (?P.*)")

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":

re.extract("alex@example.com", "(^.*@)(.*)", "\\2")

x.matches(regex)

Devolve True se a string x corresponder ao padrão RE2 especificado regex.

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.

O que se segue?