Topik ini menjelaskan sintaks dasar Domain-Specific Language (DSL) Simple Log Service (SLS).
Komentar
Untuk menambahkan komentar yang menjelaskan sintaks, awali baris tersebut dengan tanda pagar (#). Berikut contohnya:
# Tetapkan topik default untuk log. Ini adalah komentar di awal baris.
e_set("__topic__", "access_log") # Tetapkan topik default untuk log. Ini adalah komentar di akhir baris.Pemenggalan baris
Jika daftar parameter untuk pemanggilan fungsi terlalu panjang, Anda dapat memisahkannya ke beberapa baris.
Jika struktur fungsi berisi koma (,), Anda dapat langsung menambahkan pemenggalan baris setelah koma tersebut.
Jika string terlalu panjang dan memerlukan pemenggalan baris, gunakan garis miring terbalik (\).
Contoh:
e_set("__topic__", "v1",
"type", "v2", # Ketika parameter dipisahkan oleh koma (,), Anda dapat langsung menambahkan pemenggalan baris.
"length", 100)
e_set("__topic__", "this is a very long long long .........." \
"......long text") # Gunakan garis miring terbalik (\) untuk menambahkan pemenggalan baris.Metode pemanggilan fungsi
Pemanggilan dasar
e_set("abc", "xyz")CatatanSaat menulis pernyataan transformasi data, tipe data dan jumlah parameter input harus sesuai dengan sintaks fungsi.
Pemanggilan parameter variabel dasar
str_replace(value, old [,new [,count] ])CatatanJika parameter suatu fungsi mencakup tanda kurung siku ([]), parameter di dalam kurung siku tersebut, seperti
newdancount, bersifat opsional. Parameter tersebut tidak dapat dipanggil sebagai parameter bernama dan harus dipanggil sesuai urutan yang ditentukan.# Contoh yang tidak valid str_replace("a-b-c", "-", new='%') str_replace("a-b-c", "-", new='%', count=1) # Contoh yang valid str_replace("a-b-c", "-", '%') str_replace("a-b-c", "-", '%', 2)Pemanggilan parameter bernama
Parameter yang memiliki nilai default merupakan parameter bernama. Misalnya,
modedalame_set("abc", "xyz", mode="fill")adalah parameter bernama.Untuk beberapa fungsi, Anda harus memberikan nilai untuk parameter bernama dalam kondisi tertentu. Untuk informasi lebih lanjut, lihat deskripsi parameter masing-masing fungsi.
Untuk memberikan nilai ke parameter bernama, gunakan format:
mode=....Jika terdapat beberapa parameter bernama, urutan penentuannya tidak menjadi masalah. Misalnya,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")sama dengane_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
CatatanDalam pemanggilan fungsi, parameter bernama harus selalu ditentukan setelah parameter non-bernama.
Pemanggilan fungsi bersarang
Anda dapat menggunakan nilai kembali dari satu fungsi sebagai parameter dalam fungsi lainnya. Pastikan tipe datanya konsisten. Contohnya:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz")))Parameter variabel
Beberapa fungsi mendukung parameter variabel.
v("f1", ....)menunjukkan bahwa Anda dapat memberikan lebih banyak parameter, sepertiv("f1", "f2", "f3").Saat memberikan parameter bernama, parameter tersebut harus ditempatkan di akhir. Misalnya,
v("f1", "f2", "f3", "f4", mode="fill").
Operator
Operator perbandingan
Mode standar SLS DSL mendukung operator perbandingan, termasuk
>, <, >=, <=, !=, dan ==. Anda juga dapat menggunakan fungsi perbandingan yang disediakan oleh SLS untuk mencapai efek yang sama.Gunakan operator perbandingan secara langsung
# Contoh berikut menunjukkan cara menggunakan operator perbandingan. Jika hasil perbandingan bernilai True, log akan di-drop. e_if(3 > 2, DROP) # Jika 3 lebih besar dari 2, log akan di-drop. e_if(3 < 2, DROP) # Jika 3 lebih kecil dari 2, log akan di-drop. e_if(3 >= 2, DROP) # Jika 3 lebih besar dari atau sama dengan 2, log akan di-drop. e_if(3 <= 2, DROP) # Jika 3 lebih kecil dari atau sama dengan 2, log akan di-drop. e_if(3 == 2, DROP) # Jika 3 sama dengan 2, log akan di-drop. e_if(3 != 2, DROP) # Jika 3 tidak sama dengan 2, log akan di-drop. e_if(1 < 2 < 3, DROP) # Jika 2 lebih besar dari 1 dan lebih kecil dari 3, log akan di-drop. e_if(0 < ct_int(v('x')) < 100, DROP) # Jika nilai bidang x lebih besar dari 0 dan lebih kecil dari 100, log akan di-drop.Gunakan fungsi perbandingan yang disediakan oleh SLS
Operasi
Fungsi
Contoh
Sama dengan
==op_eq
op_eq(v("name"), "xiao ming")Tidak sama dengan
!=op_ne
op_ne(v("name"), "xiao ming")Lebih besar dari
>op_gt
op_gt(ct_int(v("age")))Lebih besar dari atau sama dengan
>=op_ge
op_ge(ct_int(v("age")), 18)Lebih kecil dari
<op_lt
op_lt(ct_int(v("age")), 18)Lebih kecil dari atau sama dengan
<=op_le
op_le(ct_int(v("age")), 18)
Operator logika
Mode standar SLS DSL mendukung operator logika, termasuk and, or, dan not. Anda juga dapat menggunakan fungsi logika yang disediakan oleh SLS untuk mencapai efek yang sama.
Gunakan operator logika secara langsung
# Contoh berikut menunjukkan cara menggunakan operator logika. Jika hasil operasi logika bernilai True, log akan di-drop. e_if(True and False, DROP) # Hasilnya False. e_if(True or False, DROP) # Hasilnya True. e_if(True and not False, DROP) # Hasilnya True. e_if(3 > 2 and 1 < 3, DROP) # Hasilnya True. e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # Nilai bidang x lebih besar dari 100 atau nilai bidang y lebih kecil dari 100.Gunakan fungsi logika yang disediakan oleh SLS
Operasi
Fungsi
Contoh
Logical AND
andop_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))Logical OR
orop_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))Logical NOT
notop_not
op_not(op_gt(v("age"), 18))
Operator lainnya
Operator berikut tidak didukung secara langsung dalam mode standar SLS DSL. SLS menyediakan fungsi yang sesuai untuk mencapai efek yang sama.
Operasi berbasis skenario
Fungsi
Contoh
Tambah
+op_add
op_add(v("age"), 2)Pengurangan
-op_sub
op_sub(v("age"), 2)Perkalian
*op_mul
op_mul(v("size"), 2)Eksponensiasi
**op_pow
op_pow(v("size"), 2)Pembagian floor
//op_div_floor
op_div_floor(v("bytes"), 1024)Operasi modulo
%op_mod
op_mod(v("age"), 10)Negasi
-op_neg
op_neg(v("profit"))Periksa keberadaan
inop_in
op_in(["pass", "ok"], v("result"))Periksa ketidakhadiran
not inop_not_in
op_not_in(["pass", "ok"], v("result"))Pemotongan string
[ ...]op_slice
op_slice(v("message"), 0, 20)Misalnya, untuk mengatur nilai bidang
amenjadi 3600*6:# * e_set("a", 3600 * 6) # Tidak valid e_set("a", op_mul(3600, 6)) # Valid # / e_set("bytes_kb", v("bytes") / 1024) # Tidak valid e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) # Valid
Evaluasi true dan false
Beberapa fungsi menerima suatu kondisi dan menentukan logika selanjutnya berdasarkan nilai kondisi tersebut. Kondisi tersebut dapat berupa bidang statis atau nilai kembali dari suatu ekspresi.
SLS DSL mendukung evaluasi semua tipe data. Tabel berikut menjelaskan kondisi nilai true dan false untuk berbagai tipe data.
Tipe data | Kondisi untuk Benar | Kondisi untuk False |
Boolean | True, true | False, false |
None | None | Selalu False |
Numerik | Bukan 0 atau 0.0 | 0 atau 0.0 |
String | Tidak kosong | String kosong |
Bytes | Tidak kosong | Bytes kosong |
Tupel | Tidak kosong | Tupel kosong |
Daftar | Tidak kosong | Daftar kosong |
Dictionary | Tidak kosong | Dictionary kosong |
Tabel | True jika ada | Objek null (None) |
Datetime | True jika ada | Objek null (None) |
Berikut adalah contoh event yang di-drop:
e_if(True, DROP) # Jika input bernilai True, event akan di-drop.
e_if(1, DROP) # Jika input bernilai 1, event akan di-drop.
e_if(v("abc"), DROP) # Jika bidang abc ada dan tidak kosong, event akan di-drop.
e_if(str_isdigit(v("abc")), DROP) # Jika bidang abc ada dan isinya hanya terdiri dari digit, event akan di-drop.