A Common Expression Language (CEL) é uma linguagem de código aberto sem completude de Turing que pode ser usada para avaliar expressões. Cada inscrição no Eventarc Advanced inclui uma expressão de condição gravada em CEL que é usada para avaliar e filtrar mensagens. Também é possível transformar o conteúdo dos dados de eventos escrevendo expressões de transformação usando a CEL.
Em geral, uma expressão condicional consiste em uma ou mais instruções unidas
por operadores lógicos (&&
, ||
ou !
). Cada instrução expressa uma
regra baseada em atributo que é aplicada aos dados. Geralmente, os operadores são
usados para comparar o valor contido em uma 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"
será avaliada como
True
.
Para ver mais informações, consulte os seguintes tópicos:
Atributos disponíveis
Todos os atributos de contexto do evento podem ser acessados como variáveis usando um objeto message
predefinido. Essas variáveis são preenchidas com valores com base nos atributos de contexto
do evento no momento da execução. Uma inscrição pode usar uma variável para expressar um
atributo específico. Por exemplo, message.type
retorna o valor do atributo
type
.
Observe o seguinte:
Os eventos podem incluir, e as inscrições podem usar, qualquer número de atributos personalizados CloudEvents com nomes distintos (também conhecidos como atributos de extensão). No entanto, eles são representados como tipos
String
em expressões CEL, independentemente do formato real. É possível usar uma expressão CEL para converter os valores em outros tipos.Não é possível avaliar as inscrições com base no conteúdo do payload do evento.
message.data
emessage.data_base64
são variáveis reservadas e não podem ser usadas em expressões. No entanto, o CEL é compatível com a transformação de dados de eventos, o que permite modificar o conteúdo do payload do evento (por exemplo, para atender ao contrato da API de um destino específico).
Os seguintes atributos podem ser acessados ao avaliar expressões de condição 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 ao qual data adere |
message.id |
String |
Identifica o evento. Os produtores precisam garantir que source +
id seja exclusivo para cada evento distinto. |
message.source |
URI-reference |
Identifica o contexto em que um evento ocorreu |
message.specversion |
String |
A versão da especificação do CloudEvents usada pelo evento |
message.subject |
String |
Descreve o assunto do evento no contexto do produtor do evento
(identificado por source ) |
message.time |
Timestamp |
Carimbo de data/hora em que a ocorrência aconteceu. Pode ser definido para outro
horário (como o atual) pelo produtor do CloudEvents. No entanto, todos
os produtores do mesmo source precisam ser consistentes. |
message.type |
String |
Descreve o tipo de evento relacionado à ocorrência de origem |
Operadores e funções
É possível usar operadores e funções para criar expressões lógicas complexas.
Os operadores lógicos, como &&
, ||,
e !
, permitem verificar várias
variáveis em uma expressão condicional. Por exemplo,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
une duas instruções e exige que ambas 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 você define e permitem que você desenvolva regras para corresponder a mensagens sem
listar todas as combinações possíveis.
O Eventarc Advanced também oferece suporte a 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 as macros predefinidas da CEL.
Operadores lógicos
A tabela a seguir descreve os operadores lógicos compatíveis com o Eventarc Advanced.
Expressão | Descrição |
---|---|
x == "my_string" |
Retorna True se x for igual ao argumento
literal de string constante. |
x == R"my_string\n" |
Retorna True se x for igual à literal de string bruta
fornecida que não interpreta sequências de escape. Os literais de string
bruta são convenientes para expressar strings que precisam usar
sequências de escape, como expressões regulares ou texto do programa. |
x == y |
Retorna True se x for igual a
y . |
x != y |
Retorna True se x não for igual a
y . |
x && y |
Retorna True se x e y
forem True . |
x || y |
Retorna True se x , y ou ambos
forem True . |
!x |
Retorna True se o valor booleano x for
False ou False se o valor booleano
x for True . |
m['k'] |
Se a chave k estiver presente, vai retornar o valor na chave
k no mapa string a string m . Se a chave
k não estiver presente, um erro será retornado,
fazendo com que a regra em avaliação não corresponda. |
Operadores de manipulação de string
A tabela a seguir descreve os operadores de manipulação de strings aceitos pelo Eventarc Advanced.
Expressão | Descrição |
---|---|
double(x) |
Converte o resultado da string de x em um tipo
double . A string convertida pode ser usada para comparar números de ponto flutuante
com operadores aritméticos padrão, como > e
<= . Isso funciona apenas para valores que podem ser
números de ponto flutuante. |
int(x) |
Converte o resultado da string de x em um tipo
int . A string convertida pode ser usada para comparar números inteiros com
operadores aritméticos padrão, como > e
<= . Isso funciona apenas para valores que podem ser números inteiros. |
x + y |
Retorna a string concatenada xy . |
x.contains(y) |
Retorna True se a string x contiver a
substring y . |
x.endsWith(y) |
Retorna True se a string x terminar com a
substring y . |
x.join() |
Retorna uma nova string em que os elementos de uma lista de strings são
concatenados. Aceita um separador opcional colocado entre os
elementos na string resultante. Por exemplo,
a expressão a seguir retorna 'hello world' :
|
x.lowerAscii() |
Retorna uma nova string em que todos os caracteres ASCII são em letras minúsculas. |
x.matches(y) |
Retorna O padrão RE2 é compilado usando a opção RE2::Latin1 que desativa os recursos Unicode. |
x.replace(y,z) |
Retorna 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 serem feitas. Por exemplo, a expressão
a seguir retorna 'wello hello' :
|
x.split(y) |
Retorna uma lista de strings divididas da entrada pelo separador
y . Aceita um argumento opcional que limita quantas
substrings serão produzidas. Por exemplo, a expressão a seguir retorna
['hello', 'hello hello'] :
|
x.startsWith(y) |
Retorna True se a string x começar com a
substring y . |
x.upperAscii() |
Retorna uma nova string em que todos os caracteres ASCII são maiúsculos. |
Funções de expressão regular
A tabela a seguir descreve as funções de expressão regular que são compatíveis com o Eventarc Advanced.
Expressão | Descrição |
---|---|
re.capture(target,regex) |
Usa
|
re.captureN(target,regex) |
Usa regex para capturar o nome e a string do grupo (para
grupos nomeados) e o índice e a string do grupo (para grupos sem nome) da
string target e retorna um mapa de pares de chave e valor. Por
exemplo, a expressão a seguir retorna
{"1": "user", "Username": "testuser", "Domain": "testdomain"} :
|
re.extract(target,regex,rewrite) |
Usa regex para extrair valores de grupo correspondentes da string target e retorna uma string dos valores extraídos formatada com base no argumento rewrite . Por exemplo,
a expressão a seguir retorna "example.com" :
|
x.matches(regex) |
Retorna O padrão RE2 é compilado usando a opção RE2::Latin1 que desativa os recursos Unicode. |
As expressões regulares seguem a
sintaxe RE2. O
R
que precede as expressões regulares indica uma string bruta que não
exige escape.
Funções de extensão
O Eventarc Advanced oferece suporte a determinadas funções de extensão que podem ser usadas para transformar os dados de eventos recebidos por um barramento. Para mais informações e exemplos, consulte Transformar eventos recebidos.