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 di condizione scritta in CEL che viene utilizzata per valutare e filtrare i messaggi. Puoi anche trasformare i contenuti dei dati degli eventi scrivendo espressioni di trasformazione utilizzando CEL.
In generale, un'espressione di condizione è costituita da una o più istruzioni unite da operatori logici (&&
, ||
o !
). Ogni istruzione esprime una regola basata sugli attributi che viene 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"
restituisce
True
.
Per ulteriori informazioni, consulta le seguenti risorse:
- Creare una registrazione per ricevere eventi
- Trasformare gli eventi ricevuti
- Definizione del linguaggio CEL
Attributi disponibili
È possibile accedere a tutti gli attributi del contesto dell'evento come variabili tramite un oggetto message
predefinito. Queste variabili vengono compilate con valori basati sugli attributi
di contesto dell'evento in fase di runtime. 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 CloudEvents personalizzati aggiuntivi 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 cast dei valori in altri tipi.Non puoi valutare le registrazioni in base ai contenuti del payload dell'evento.
message.data
emessage.data_base64
sono variabili riservate e non possono essere utilizzate nelle espressioni. Tuttavia, CEL è supportato quando vengono trasformati i dati degli eventi, il che ti consente di modificare il contenuto del payload degli eventi (ad esempio, per soddisfare il contratto API per una destinazione specifica).
È possibile accedere ai seguenti attributi durante la valutazione delle espressioni di condizione per una registrazione:
Attributo | Tipo di attributo | Descrizione |
---|---|---|
message.datacontenttype |
String |
Il tipo di contenuti del valore data |
message.dataschema |
URI |
Identifica lo schema a cui aderisce data |
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'argomento dell'evento nel contesto del produttore dell'evento
(identificato da source ) |
message.time |
Timestamp |
Timestamp dell'evento; potrebbe essere impostato su un altro
orario (ad esempio l'ora corrente) dal produttore di CloudEvents; tuttavia, tutti
i produttori per lo stesso source devono essere coerenti |
message.type |
String |
Descrive il tipo di evento correlato all'occorrenza di origine |
Operatori e funzioni
Puoi utilizzare operatori e funzioni per creare espressioni logiche complesse.
Gli operatori logici, come &&
, ||,
e !
, 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 delle stringhe, come x.contains('y')
, corrispondono a stringhe o
sottostringhe che definisci e ti consentono di sviluppare regole per trovare corrispondenze nei 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 degli operatori e delle funzioni predefiniti di CEL e delle macro predefinite di CEL.
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 letterale stringa costante. |
x == R"my_string\n" |
Restituisce True se x è uguale al valore letterale della stringa non elaborata specificata che non interpreta le sequenze di escape. I valori letterali
delle stringhe non elaborate sono utili per esprimere stringhe che devono utilizzare
sequenze di escape, come 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 è presente la chiave k , restituisce il valore della chiave
k nella mappa stringa-stringa m . Se la chiave
k non è presente, restituisce un errore che
fa sì che la regola in valutazione non corrisponda. |
Operatori di manipolazione delle stringhe
La seguente tabella descrive gli operatori di manipolazione delle stringhe supportati da Eventarc Advanced.
Espressione | Descrizione |
---|---|
double(x) |
Converte il risultato della stringa di x in un tipo double . La stringa convertita può essere utilizzata per confrontare numeri in virgola mobile
con operatori aritmetici standard come > e
<= . Questa opzione funziona solo per i valori che possono essere
numeri in virgola mobile. |
int(x) |
Converte il risultato della stringa di x in un tipo int . La stringa convertita può essere utilizzata per confrontare numeri interi con
operatori aritmetici standard come > e
<= . Funziona solo per i valori che possono essere numeri 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 minuscoli. |
x.matches(y) |
Restituisce Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disabilita 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 effettuare. Ad esempio, la seguente
espressione restituisce 'wello hello' :
|
x.split(y) |
Restituisce un elenco di stringhe suddivise dall'input in base al 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 maiuscoli. |
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 denominati) 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 dei gruppi 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 disabilita le funzionalità Unicode. |
Le espressioni regolari seguono la
sintassi RE2. Tieni presente che il
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 maggiori informazioni ed esempi, vedi Trasformare gli eventi ricevuti.