Common Expression Language (CEL) adalah bahasa open source non-Turing-complete yang dapat digunakan untuk mengevaluasi ekspresi. Setiap pendaftaran di Eventarc Advanced menyertakan 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 dengan operator logis (&&
, ||
, atau !
). Setiap pernyataan menyatakan
aturan berbasis atribut yang diterapkan ke data. Paling umum, 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 peristiwa
- 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 menyertakan, dan pendaftaran dapat menggunakan, sejumlah atribut CloudEvents kustom tambahan dengan nama yang berbeda (juga dikenal sebagai atribut ekstensi). Namun, keduanya 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 mengubah 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 diikuti data |
message.id |
String |
Mengidentifikasi peristiwa. Produsen harus memastikan bahwa source +
id bersifat unik untuk setiap peristiwa yang berbeda. |
message.source |
URI-reference |
Mengidentifikasi konteks tempat peristiwa terjadi |
message.specversion |
String |
Versi spesifikasi CloudEvents yang digunakan peristiwa |
message.subject |
String |
Menjelaskan subjek peristiwa dalam konteks produsen peristiwa
(diidentifikasi oleh source ) |
message.time |
Timestamp |
Stempel waktu saat kejadian terjadi; dapat ditetapkan 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 peristiwa asal |
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 kondisional. Misalnya,
message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
menggabungkan dua pernyataan, dan mengharuskan kedua pernyataan tersebut menjadi 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 mengubah data dan menyederhanakan
perubahan 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 literal string konstan. |
x == R"my_string\n" |
Menampilkan True jika x sama dengan literal string mentah yang diberikan yang tidak menafsirkan urutan escape. Literal string mentah
mudah digunakan untuk mengekspresikan string yang 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, nilai pada kunci
k akan ditampilkan dalam peta string ke string m . Jika kunci
k tidak ada, akan 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 x menjadi jenis
double . String yang dikonversi dapat digunakan untuk membandingkan bilangan floating point
dengan operator aritmetika standar seperti > dan
<= . Ini hanya berfungsi untuk nilai yang dapat berupa
bilangan 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
<= . Hal ini hanya berfungsi untuk nilai yang dapat berupa bilangan bulat. |
x + y |
Menampilkan string yang digabungkan 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 oleh 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.