Common Expression Language (CEL) è un linguaggio open source non Turing completo che può essere utilizzato per valutare le espressioni. Ogni registrazione in Eventarc Advanced include un'espressione condizione scritta in CEL che viene utilizzata per valutare e filtrare i messaggi. Puoi anche trasformare i contenuti dei dati sugli eventi scrivendo espressioni di trasformazione utilizzando CEL.
In genere, un'espressione di condizione è costituita da una o più istruzioni unite da operatori logici (&&
, ||
o !
). Ogni istruzione esprime una regola basata sugli attributi applicata ai dati. In genere, gli operatori vengono utilizzati per confrontare il valore contenuto in una variabile con un valore letterale.
Ad esempio, se il valore di message.type
è
google.cloud.dataflow.job.v1beta3.statusChanged
, l'espressione
message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
ha valore
True
.
Per ulteriori informazioni, consulta le seguenti risorse:
- Creare una registrazione per ricevere gli eventi
- Trasformare gli eventi ricevuti
- Definizione del linguaggio CEL
Attributi disponibili
A tutti gli attributi del contesto evento è possibile accedere come variabili tramite un oggettomessage
predefinito. Queste variabili vengono completate con valori basati sugli attributi del contesto
dell'evento in fase di esecuzione. Una registrazione può utilizzare una variabile per esprimere un determinato attributo. Ad esempio, message.type
restituisce il valore dell'attributo type
.
Tieni presente quanto segue:
Gli eventi possono includere e le registrazioni possono utilizzare un numero qualsiasi di attributi personalizzati aggiuntivi di CloudEvents con nomi distinti (noti anche come attributi di estensione). Tuttavia, nelle espressioni CEL sono rappresentati come tipi
String
, indipendentemente dal loro formato effettivo. Puoi utilizzare un'espressione CEL per eseguire il casting dei valori in altri tipi.Non puoi valutare le registrazioni in base ai contenuti del payload dell'evento. Sia
message.data
siamessage.data_base64
sono variabili riservate e non possono essere utilizzate nelle espressioni. Tuttavia, CEL è supportato quando trasformi i dati sugli eventi in modo da poter modificare i contenuti del payload dell'evento (ad esempio per soddisfare il contratto API per una destinazione specifica).
Quando valuti le espressioni di condizione per una registrazione, puoi accedere ai seguenti attributi:
Attributo | Tipo di attributo | Descrizione |
---|---|---|
message.datacontenttype |
String |
Il tipo di contenuti del valore data |
message.dataschema |
URI |
Identifica lo schema a cui data è conforme |
message.id |
String |
Identifica l'evento. I produttori devono assicurarsi che source +
id sia univoco per ogni evento distinto. |
message.source |
URI-reference |
Identifica il contesto in cui si è verificato un evento |
message.specversion |
String |
La versione della specifica CloudEvents utilizzata dall'evento |
message.subject |
String |
Descrive l'oggetto dell'evento nel contesto del produttore dell'evento
(identificato da source ) |
message.time |
Timestamp |
Timestamp dell'evento; potrebbe essere impostato su un'altra data (ad esempio l'ora corrente) dal produttore CloudEvents. Tuttavia, tutti i produttori per lo stesso source devono essere coerenti |
message.type |
String |
Descrive il tipo di evento relativo all'occorrenza di origine |
Operatori e funzioni
Puoi utilizzare operatori e funzioni per creare espressioni logiche complesse.
Gli operatori logici, come &&
, ||,
e !
, ti consentono di verificare più variabili in un'espressione condizionale. Ad esempio,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
unisce due istruzioni e richiede che entrambe siano True
per produrre un
risultato complessivo di True
.
Gli operatori di manipolazione di stringhe, come x.contains('y')
, corrispondono a stringhe o sottostringhe che definisci e ti consentono di sviluppare regole per abbinare i messaggi senza elencare ogni possibile combinazione.
Eventarc Advanced supporta anche le funzioni di estensione, come merge
e flatten
, che possono essere utilizzate per trasformare i dati e semplificare la modifica degli eventi ricevuti da un bus.
Consulta l'elenco di funzioni e operatori CEL predefiniti e macro CEL predefinite.
Operatori logici
La seguente tabella descrive gli operatori logici supportati da Eventarc Advanced.
Espressione | Descrizione |
---|---|
x == "my_string" |
Restituisce True se x è uguale all'argomento costante
della stringa letterale. |
x == R"my_string\n" |
Restituisce True se x è uguale al valore dato
della stringa letterale non elaborata che non interpreta le sequenze di escape. I valori letterali
delle stringhe non elaborate sono pratici per esprimere stringhe che devono utilizzare
sequenze di escape, ad esempio espressioni regolari o testo del programma. |
x == y |
Restituisce True se x è uguale a
y . |
x != y |
Restituisce True se x non è uguale a
y . |
x && y |
Restituisce True se sia x che y
sono True . |
x || y |
Restituisce True se x , y o entrambi
sono True . |
!x |
Restituisce True se il valore booleano x è
False oppure restituisce False se il valore booleano
x è True . |
m['k'] |
Se la chiave k è presente, restituisce il valore associato alla chiave
k nella mappa stringa-stringa m . Se la chiave
k non è presente, viene restituito un errore che
causa la mancata corrispondenza della regola in fase di valutazione. |
Operatori di manipolazione di stringhe
La tabella seguente descrive gli operatori di manipolazione delle stringhe supportati da Eventarc Advanced.
Espressione | Descrizione |
---|---|
double(x) |
Converte il risultato di stringa di x in un tipo double . La stringa convertita può essere utilizzata per confrontare numeri con virgola mobile
con operatori aritmetici standard come > e
<= . Questa operazione funziona solo per i valori che possono essere
numeri in virgola mobile. |
int(x) |
Converte il risultato di stringa di x in un tipo int . La stringa convertita può essere utilizzata per confrontare numeri interi con
operatori aritmetici standard come > e
<= . Questo funziona solo per i valori che possono essere interi. |
x + y |
Restituisce la stringa concatenata xy . |
x.contains(y) |
Restituisce True se la stringa x contiene la
sottostringa y . |
x.endsWith(y) |
Restituisce True se la stringa x termina con la
sottostringa y . |
x.join() |
Restituisce una nuova stringa in cui gli elementi di un elenco di stringhe sono concatenati. Accetta un separatore facoltativo che viene inserito tra gli elementi della stringa risultante. Ad esempio,
la seguente espressione restituisce 'hello world' :
|
x.lowerAscii() |
Restituisce una nuova stringa in cui tutti i caratteri ASCII sono in minuscolo. |
x.matches(y) |
Restituisce Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disattiva le funzionalità Unicode. |
x.replace(y,z) |
Restituisce una nuova stringa in cui le occorrenze della sottostringa y vengono sostituite dalla sottostringa z . Accetta un argomento facoltativo che limita il numero di sostituzioni da apportare. Ad esempio, la seguente
espressione restituisce 'wello hello' :
|
x.split(y) |
Restituisce un elenco di stringhe separate dall'input tramite il separatore
y . Accetta un argomento facoltativo che limita il numero di
sottostringhe da produrre. Ad esempio, la seguente espressione restituisce
['hello', 'hello hello'] :
|
x.startsWith(y) |
Restituisce True se la stringa x inizia con la
sottostringa y . |
x.upperAscii() |
Restituisce una nuova stringa in cui tutti i caratteri ASCII sono in maiuscolo. |
Funzioni di espressioni regolari
La tabella seguente descrive le funzioni di espressioni regolari supportate da Eventarc Advanced.
Espressione | Descrizione |
---|---|
re.capture(target,regex) |
Utilizza
|
re.captureN(target,regex) |
Utilizza regex per acquisire il nome e la stringa del gruppo (per i gruppi con nome) e l'indice e la stringa del gruppo (per i gruppi senza nome) dalla stringa target e restituisce una mappa di coppie chiave/valore. Ad esempio, la seguente espressione restituisce {"1": "user", "Username": "testuser", "Domain": "testdomain"} :
|
re.extract(target,regex,rewrite) |
Utilizza regex per estrarre i valori del gruppo corrispondenti dalla stringa target e restituisce una stringa dei valori estratti formattata in base all'argomento rewrite . Ad esempio,
la seguente espressione restituisce "example.com" :
|
x.matches(regex) |
Restituisce Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disattiva le funzionalità Unicode. |
Le espressioni regolari rispettano la
sintassi RE2. Tieni presente che il carattere R
che precede le espressioni regolari indica una stringa non elaborata che non richiede l'escape.
Funzioni di estensione
Eventarc Advanced supporta determinate funzioni di estensione che possono essere utilizzate per trasformare i dati sugli eventi ricevuti tramite un bus. Per ulteriori informazioni e esempi, consulta Trasformare gli eventi ricevuti.