Utilizzare Common Expression Language

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:

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

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

x.lowerAscii() Restituisce una nuova stringa in cui tutti i caratteri ASCII sono in minuscolo.
x.matches(y)

Restituisce True se la stringa x corrisponde al pattern RE2 specificato y.

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

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

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

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

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 regex per acquisire il primo valore del gruppo senza nome o con nome nella stringa target e restituisce una stringa. Ad esempio, la seguente espressione restituisce "o":

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

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

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

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

x.matches(regex)

Restituisce True se la stringa x corrisponde al pattern RE2 specificato regex.

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.

Passaggi successivi