Kalau kalian kelola mail server Zimbra dengan ratusan user, memeriksa quota satu per satu dari admin panel itu tidak praktis. Butuh cara yang lebih cepat untuk melihat siapa yang hampir penuh, siapa yang unlimited, dan berapa total pemakaian masing-masing user sekaligus.
Script Perl berikut ini membantu kalian melakukan itu dalam satu perintah.
Cara Kerjanya
Script ini memanfaatkan perintah bawaan Zimbra:
zmprov gqu <hostname>
Perintah gqu (get quota usage) menghasilkan output mentah berupa tiga kolom per baris: alamat email, quota yang ditetapkan, dan penggunaan saat ini, semuanya dalam satuan bytes. Script ini membaca output itu, mengkonversinya ke satuan yang lebih manusiawi (KB, MB, GB, TB), dan menampilkannya dalam format CSV sederhana yang mudah dibaca atau diolah lebih lanjut.
Script Lengkapnya
#!/usr/bin/perl
use strict;
use warnings;
my $hostname = 'localhost';
my @quotas = `zmprov gqu $hostname`;
foreach my $quotaline(@quotas) {
chomp($quotaline);
my ($email, $quota, $usage) = split(' ', $quotaline);
$quota = utils_convert_bytes_to_optimal_unit($quota);
if ($quota eq "0 Bytes") {
$quota = "Unlimited";
}
$usage = utils_convert_bytes_to_optimal_unit($usage);
print "$email;$usage;$quotan";
}
sub utils_convert_bytes_to_optimal_unit {
my ($bytes) = @_;
return '' if $bytes eq '';
my $size;
$size = $bytes . ' Bytes' if $bytes < 1024;
$size = sprintf("%.2f", $bytes/1024) . ' KB' if $bytes >= 1024 && $bytes < 1048576;
$size = sprintf("%.2f", $bytes/1048576) . ' MB' if $bytes >= 1048576 && $bytes < 1073741824;
$size = sprintf("%.2f", $bytes/1073741824) . ' GB' if $bytes >= 1073741824 && $bytes < 1099511627776;
$size = sprintf("%.2f", $bytes/1099511627776) . ' TB' if $bytes >= 1099511627776;
return $size;
}
Cara Menggunakannya
Simpan script ini misalnya dengan nama check-quota.pl, lalu jalankan dari server Zimbra kalian:
perl check-quota.pl
Output yang dihasilkan berbentuk CSV dengan pemisah titik koma:
user1@domain.com;1.23 GB;5.00 GB
user2@domain.com;234.56 MB;2.00 GB
user3@domain.com;45.78 MB;Unlimited
admin@domain.com;0 Bytes;Unlimited
Tiga kolom per baris: email, pemakaian saat ini, dan quota yang ditetapkan. Kalau quota-nya 0, script ini akan menampilkan Unlimited karena di Zimbra nilai 0 memang berarti tidak ada batas.
Kalau kalian ingin menyimpan hasilnya ke file untuk diolah lebih lanjut atau dikirim via email, cukup tambahkan redirect:
perl check-quota.pl > quota-report.csv
Penjelasan Fungsi Konversi
Fungsi utils_convert_bytes_to_optimal_unit bekerja dengan cara membandingkan nilai bytes yang diterima terhadap threshold masing-masing satuan. Kalau nilainya di bawah 1024, ditampilkan sebagai Bytes. Di atas itu akan otomatis naik ke KB, MB, GB, atau TB sesuai besarannya. Hasilnya diformat dua desimal supaya lebih rapi dibaca.
Logikanya sederhana tapi sudah cukup untuk kebutuhan monitoring quota sehari-hari.
Modifikasi yang Berguna
Kalau server Zimbra kalian bukan di localhost, ganti nilai variabel hostname:
my $hostname = 'mail.domain.com';
Kalau kalian hanya ingin melihat user yang penggunaannya di atas persentase tertentu, bisa tambahkan filter di dalam loop sebelum print. Tapi untuk keperluan laporan sederhana, output default ini sudah cukup informatif.
Script kecil seperti ini yang sering paling berguna di lapangan. Tidak perlu buka admin panel, tidak perlu klik-klik, cukup jalankan satu perintah dan semua data langsung tersedia.