Common Expression Language (CEL) adalah bahasa non-Turing-complete open source yang dapat digunakan untuk mengevaluasi ekspresi. Setiap pendaftaran di Eventarc Advanced mencakup ekspresi kondisi yang ditulis dalam CEL yang digunakan untuk mengevaluasi dan memfilter pesan. Anda juga dapat mengubah konten data peristiwa dengan menulis ekspresi transformasi menggunakan CEL.
Secara umum, ekspresi kondisi terdiri dari satu atau beberapa pernyataan yang
digabungkan oleh operator logis (&&
, ||
, atau !
). Setiap pernyataan menyatakan
aturan berbasis atribut yang diterapkan pada data. Biasanya, operator digunakan untuk membandingkan nilai yang terdapat dalam variabel dengan nilai literal.
Misalnya, jika nilai message.type
adalah
google.cloud.dataflow.job.v1beta3.statusChanged
, maka ekspresi
message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
akan bernilai
True
.
Untuk informasi selengkapnya, lihat referensi berikut:
- Membuat pendaftaran untuk menerima acara
- Mentransformasi peristiwa yang diterima
- Definisi bahasa CEL
Atribut yang tersedia
Semua atribut konteks peristiwa dapat diakses sebagai variabel melalui objek message
yang telah ditentukan sebelumnya. Variabel ini diisi dengan nilai berdasarkan atribut konteks
peristiwa saat runtime. Pendaftaran dapat menggunakan variabel untuk menyatakan
atribut tertentu. Misalnya, message.type
menampilkan nilai atribut type
.
Perhatikan hal berikut:
Peristiwa dapat mencakup, dan pendaftaran dapat menggunakan, sejumlah atribut CloudEvents kustom tambahan dengan nama yang berbeda (juga dikenal sebagai atribut ekstensi). Namun, nilai tersebut direpresentasikan sebagai jenis
String
dalam ekspresi CEL, terlepas dari format sebenarnya. Anda dapat menggunakan ekspresi CEL untuk mentransmisikan nilainya ke jenis lain.Anda tidak dapat mengevaluasi pendaftaran berdasarkan konten payload peristiwa.
message.data
danmessage.data_base64
adalah variabel yang dicadangkan dan tidak dapat digunakan dalam ekspresi. Namun, CEL didukung saat mentransformasi data peristiwa yang memungkinkan Anda mengubah konten payload peristiwa (misalnya, untuk memenuhi kontrak API untuk tujuan tertentu).
Atribut berikut dapat diakses saat mengevaluasi ekspresi kondisi untuk pendaftaran:
Atribut | Jenis atribut | Deskripsi |
---|---|---|
message.datacontenttype |
String |
Jenis konten nilai data |
message.dataschema |
URI |
Mengidentifikasi skema yang dipatuhi data |
message.id |
String |
Mengidentifikasi peristiwa. Produsen harus memastikan bahwa source +
id bersifat unik untuk setiap acara yang berbeda. |
message.source |
URI-reference |
Mengidentifikasi konteks terjadinya peristiwa |
message.specversion |
String |
Versi spesifikasi CloudEvents yang digunakan peristiwa |
message.subject |
String |
Mendeskripsikan subjek acara dalam konteks produser acara
(diidentifikasi oleh source ) |
message.time |
Timestamp |
Stempel waktu saat kejadian terjadi; dapat disetel ke waktu lain (seperti waktu saat ini) oleh produsen CloudEvents; namun, semua produsen untuk source yang sama harus konsisten |
message.type |
String |
Menjelaskan jenis peristiwa yang terkait dengan kemunculan awal |
Operator dan fungsi
Anda dapat menggunakan operator dan fungsi untuk membuat ekspresi logika yang kompleks.
Operator logika, seperti &&
, ||,
, dan !
, memungkinkan Anda memverifikasi beberapa
variabel dalam ekspresi bersyarat. Misalnya,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
menggabungkan dua pernyataan, dan mengharuskan kedua pernyataan tersebut bernilai True
untuk menghasilkan
hasil keseluruhan True
.
Operator manipulasi string, seperti x.contains('y')
, mencocokkan string atau
substring yang Anda tentukan, dan memungkinkan Anda mengembangkan aturan untuk mencocokkan pesan tanpa
mencantumkan setiap kemungkinan kombinasi.
Eventarc Advanced juga mendukung fungsi ekstensi, seperti
merge
dan flatten
, yang dapat digunakan untuk mentransformasi data dan menyederhanakan
modifikasi peristiwa yang diterima dari bus.
Lihat daftar operator dan fungsi standar CEL dan makro standar CEL.
Operator logika
Tabel berikut menjelaskan operator logika yang didukung Eventarc Advanced.
Ekspresi | Deskripsi |
---|---|
x == "my_string" |
Menampilkan True jika x sama dengan argumen string literal konstanta. |
x == R"my_string\n" |
Menampilkan True jika x sama dengan literal string
mentah yang diberikan yang tidak menafsirkan urutan escape. Literal string
raw berguna untuk mengekspresikan string yang sendiri harus menggunakan
urutan escape, seperti ekspresi reguler atau teks program. |
x == y |
Menampilkan True jika x sama dengan
y . |
x != y |
Menampilkan True jika x tidak sama dengan
y . |
x && y |
Menampilkan True jika x dan y
adalah True . |
x || y |
Menampilkan True jika x , y , atau keduanya
adalah True . |
!x |
Menampilkan True jika nilai boolean x adalah
False , atau menampilkan False jika nilai boolean
x adalah True . |
m['k'] |
Jika kunci k ada, menampilkan nilai pada kunci
k dalam peta string-ke-string m . Jika kunci
k tidak ada, menampilkan error yang
menyebabkan aturan yang sedang dievaluasi tidak cocok. |
Operator manipulasi string
Tabel berikut menjelaskan operator manipulasi string yang didukung Eventarc Advanced.
Ekspresi | Deskripsi |
---|---|
double(x) |
Mengonversi hasil string dari x menjadi jenis double . String yang dikonversi dapat digunakan untuk membandingkan angka floating point
dengan operator aritmetika standar seperti > dan
<= . Hal ini hanya berfungsi untuk nilai yang dapat berupa
angka floating point. |
int(x) |
Mengonversi hasil string x menjadi jenis int . String yang dikonversi dapat digunakan untuk membandingkan bilangan bulat dengan
operator aritmetika standar seperti > dan
<= . Tindakan ini hanya berfungsi untuk nilai yang dapat berupa bilangan bulat. |
x + y |
Menampilkan string gabungan xy . |
x.contains(y) |
Menampilkan True jika string x berisi
substring y . |
x.endsWith(y) |
Menampilkan True jika string x diakhiri dengan
substring y . |
x.join() |
Menampilkan string baru tempat elemen daftar string digabungkan. Menerima pemisah opsional yang ditempatkan di antara
elemen dalam string yang dihasilkan. Misalnya,
ekspresi berikut menampilkan 'hello world' :
|
x.lowerAscii() |
Menampilkan string baru dengan semua karakter ASCII dalam huruf kecil. |
x.matches(y) |
Menampilkan Pola RE2 dikompilasi menggunakan opsi RE2::Latin1 yang menonaktifkan fitur Unicode. |
x.replace(y,z) |
Menampilkan string baru dengan kemunculan substring y diganti dengan substring z . Menerima argumen opsional yang
membatasi jumlah penggantian yang akan dilakukan. Misalnya, ekspresi
berikut menampilkan 'wello hello' :
|
x.split(y) |
Menampilkan daftar string yang dipisahkan dari input oleh pemisah
y . Menerima argumen opsional yang membatasi jumlah
substring yang akan dihasilkan. Misalnya, ekspresi berikut menampilkan
['hello', 'hello hello'] :
|
x.startsWith(y) |
Menampilkan True jika string x dimulai dengan
substring y . |
x.upperAscii() |
Menampilkan string baru dengan semua karakter ASCII dalam huruf besar. |
Fungsi ekspresi reguler
Tabel berikut menjelaskan fungsi ekspresi reguler yang didukung Eventarc Advanced.
Ekspresi | Deskripsi |
---|---|
re.capture(target,regex) |
Menggunakan
|
re.captureN(target,regex) |
Menggunakan regex untuk mengambil nama dan string grup (untuk
grup bernama) serta indeks dan string grup (untuk grup tanpa nama) dari string
target , dan menampilkan peta pasangan kunci dan nilai. Misalnya, ekspresi berikut menampilkan {"1": "user", "Username": "testuser", "Domain": "testdomain"} :
|
re.extract(target,regex,rewrite) |
Menggunakan regex untuk mengekstrak nilai grup yang cocok dari string target , dan menampilkan string nilai yang diekstrak yang diformat berdasarkan argumen rewrite . Misalnya,
ekspresi berikut menampilkan "example.com" :
|
x.matches(regex) |
Menampilkan Pola RE2 dikompilasi menggunakan opsi RE2::Latin1 yang menonaktifkan fitur Unicode. |
Ekspresi reguler mengikuti
sintaksis RE2. Perhatikan bahwa
R
yang mendahului ekspresi reguler menunjukkan string mentah yang tidak
memerlukan escape.
Fungsi ekstensi
Eventarc Advanced mendukung fungsi ekstensi tertentu yang dapat digunakan untuk mengubah data peristiwa yang diterima melalui bus. Untuk mengetahui informasi dan contoh selengkapnya, lihat Mengubah peristiwa yang diterima.