El lenguaje de expresión común (CEL) es un lenguaje de código abierto no completo de Turing que se puede usar para evaluar expresiones. Cada registro en Eventarc Advanced incluye una expresión de condición escrita en CEL que se usa para evaluar y filtrar mensajes. También puede transformar el contenido de los datos de eventos escribiendo expresiones de transformación con CEL.
Por lo general, una expresión condicional consta de una o varias instrucciones unidas por operadores lógicos (&&
, ||
o !
). Cada instrucción expresa una regla basada en atributos que se aplica a los datos. Los operadores se suelen usar para comparar el valor contenido en una variable con un valor literal.
Por ejemplo, si el valor de message.type
es google.cloud.dataflow.job.v1beta3.statusChanged
, la expresión message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
se evalúa como True
.
Para obtener más información, consulta las siguientes secciones:
- Crear una inscripción para recibir eventos
- Transformar eventos recibidos
- Definición del lenguaje CEL
Atributos disponibles
Se puede acceder a todos los atributos de contexto de evento como variables a través de un objeto message
predefinido. Estas variables se rellenan con valores basados en atributos de contexto de evento en el tiempo de ejecución. Una inscripción puede usar una variable para expresar un atributo determinado. Por ejemplo, message.type
devuelve el valor del atributo type
.
Ten en cuenta lo siguiente:
Los eventos pueden incluir y las inscripciones pueden usar cualquier número de atributos personalizados adicionales de CloudEvents con nombres distintos (también conocidos como atributos de extensión). Sin embargo, se representan como tipos
String
en expresiones CEL, independientemente de su formato real. Puedes usar una expresión CEL para convertir sus valores a otros tipos.No puedes evaluar las inscripciones en función del contenido de la carga útil del evento.
message.data
ymessage.data_base64
son variables reservadas y no se pueden usar en expresiones. Sin embargo, CEL se admite al transformar datos de eventos, lo que le permite modificar el contenido de la carga útil de los eventos (por ejemplo, para cumplir el contrato de la API de un destino específico).
Se puede acceder a los siguientes atributos al evaluar expresiones de condición de una inscripción:
Atributo | Tipo de atributo | Descripción |
---|---|---|
message.datacontenttype |
String |
El tipo de contenido del valor de data |
message.dataschema |
URI |
Identifica el esquema al que se ajusta data . |
message.id |
String |
Identifica el evento. Los productores deben asegurarse de que source +
id sea único para cada evento distinto. |
message.source |
URI-reference |
Identifica el contexto en el que se ha producido un evento. |
message.specversion |
String |
La versión de la especificación de CloudEvents que usa el evento |
message.subject |
String |
Describe el asunto del evento en el contexto del productor del evento
(identificado por source ). |
message.time |
Timestamp |
Marca de tiempo de cuándo se produjo el evento. El productor de CloudEvents puede definirla en otro momento (por ejemplo, la hora actual). Sin embargo, todos los productores del mismo source deben ser coherentes. |
message.type |
String |
Describe el tipo de evento relacionado con la ocurrencia original. |
Operadores y funciones
Puedes usar operadores y funciones para crear expresiones lógicas complejas.
Los operadores lógicos, como &&
, ||,
y !
, te permiten verificar varias variables en una expresión condicional. Por ejemplo, message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
combina dos instrucciones y requiere que ambas sean True
para producir un
resultado general de True
.
Los operadores de manipulación de cadenas, como x.contains('y')
, coinciden con las cadenas o subcadenas que definas y te permiten desarrollar reglas para que coincidan con los mensajes sin tener que enumerar todas las combinaciones posibles.
Eventarc Advanced también admite funciones de extensión, como merge
y flatten
, que se pueden usar para transformar datos y simplificar la modificación de eventos recibidos de un bus.
Consulta la lista de operadores y funciones predefinidos de CEL y de macros predefinidas de CEL.
Operadores lógicos
En la siguiente tabla se describen los operadores lógicos que admite Eventarc Advanced.
Expresión | Descripción |
---|---|
x == "my_string" |
Devuelve True si x es igual al argumento de cadena constante. |
x == R"my_string\n" |
Devuelve True si x es igual al literal de cadena sin formato que se ha proporcionado y que no interpreta secuencias de escape. Los literales de cadena sin formato son útiles para expresar cadenas que deben usar secuencias de escape, como expresiones regulares o texto de programa. |
x == y |
Devuelve True si x es igual a y . |
x != y |
Devuelve True si x no es igual a y . |
x && y |
Devuelve True si tanto x como y son True . |
x || y |
Devuelve True si x , y o ambos son True . |
!x |
Devuelve True si el valor booleano x es False o devuelve False si el valor booleano x es True . |
m['k'] |
Si la clave k está presente, devuelve el valor de la clave k en el mapa de cadenas m . Si no está presente key
k , devuelve un error que
provoca que la regla que se está evaluando no coincida. |
Operadores de manipulación de cadenas
En la siguiente tabla se describen los operadores de manipulación de cadenas que admite Eventarc Advanced.
Expresión | Descripción |
---|---|
double(x) |
Convierte el resultado de cadena de x en un tipo double . La cadena convertida se puede usar para comparar números de coma flotante con operadores aritméticos estándar, como > y <= . Esta opción solo funciona con valores que pueden ser números de coma flotante. |
int(x) |
Convierte el resultado de cadena de x en un tipo int . La cadena convertida se puede usar para comparar números enteros con operadores aritméticos estándar, como > y <= . Esta opción solo funciona con valores que pueden ser números enteros. |
x + y |
Devuelve la cadena concatenada xy . |
x.contains(y) |
Devuelve True si la cadena x contiene la
subcadena y . |
x.endsWith(y) |
Devuelve True si la cadena x termina con la subcadena y . |
x.join() |
Devuelve una cadena nueva en la que se concatenan los elementos de una lista de cadenas. Acepta un separador opcional que se coloca entre los elementos de la cadena resultante. Por ejemplo,
la siguiente expresión devuelve 'hello world' :
|
x.lowerAscii() |
Devuelve una cadena nueva en la que todos los caracteres ASCII están en minúsculas. |
x.matches(y) |
Devuelve El patrón RE2 se compila con la opción RE2::Latin1, que inhabilita las funciones Unicode. |
x.replace(y,z) |
Devuelve una cadena nueva en la que las apariciones de la subcadena y se sustituyen por la subcadena z . Acepta un argumento opcional que limita el número de sustituciones que se pueden hacer. Por ejemplo, la siguiente expresión devuelve 'wello hello' :
|
x.split(y) |
Devuelve una lista de cadenas divididas a partir de la entrada por el separador.
y . Acepta un argumento opcional que limita el número de subcadenas que se van a generar. Por ejemplo, la siguiente expresión devuelve ['hello', 'hello hello'] :
|
x.startsWith(y) |
Devuelve True si la cadena x empieza por la
subcadena y . |
x.upperAscii() |
Devuelve una cadena nueva en la que todos los caracteres ASCII están en mayúsculas. |
Funciones de expresión regular
En la siguiente tabla se describen las funciones de expresiones regulares que admite Eventarc Advanced.
Expresión | Descripción |
---|---|
re.capture(target,regex) |
Usa
|
re.captureN(target,regex) |
Usa regex para capturar el nombre y la cadena del grupo (en el caso de los grupos con nombre) y el índice y la cadena del grupo (en el caso de los grupos sin nombre) de la cadena target y devuelve un mapa de pares clave-valor. Por ejemplo, la siguiente expresión devuelve {"1": "user", "Username": "testuser", "Domain": "testdomain"} :
|
re.extract(target,regex,rewrite) |
Usa regex para extraer los valores de los grupos coincidentes de la cadena target y devuelve una cadena de los valores extraídos con el formato del argumento rewrite . Por ejemplo,
la siguiente expresión devuelve "example.com" :
|
x.matches(regex) |
Devuelve El patrón RE2 se compila con la opción RE2::Latin1, que inhabilita las funciones Unicode. |
Las expresiones regulares siguen la sintaxis de RE2. Ten en cuenta que el carácter R
que precede a las expresiones regulares indica una cadena sin formato que no requiere caracteres de escape.
Funciones de extensión
Eventarc Advanced admite determinadas funciones de extensión que se pueden usar para transformar los datos de eventos recibidos a través de un bus. Para obtener más información y ejemplos, consulta Transformar eventos recibidos.