Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2011, 10:40   #1
maximum1015
Новичок
Джуниор
 
Регистрация: 03.03.2011
Сообщений: 1
По умолчанию Подсчет объема входящей почты

Есть скрипт на perl, который подсчитывает объем входящей почты.

#!/usr/local/bin/perl -w

use IMAP::Admin;
use DBI;

$database = "xxx";
$hostname = "localhost";
$port = "xxxx";
$user = "xxx";
$password = "xxxxx";


$dsn = "DBI:mysqlatabase=$database;host= $hostname;port=$port";
$dbh = DBI->connect($dsn, $user, $password) or exit (1);

if (defined ($ARGV[0]) and $ARGV[0] eq "clear") {
$dbh->do("UPDATE users SET used='0' WHERE 1");
exit;

}


my $imap = IMAP::Admin->new('Server' => 'localhost',
'Login' => 'cyradm',
'Password' => 'imapgroup25A',
'Port' => 143, # (143 is default),
'Separator' => "/", # default is a period
# and any of the SSL_ options from IO::Socket::SSL
);

$sth = $dbh->prepare("SELECT email,uid FROM users WHERE uid!='0'");
$sth->execute();
while( @row = $sth->fetchrow_array()) {
$email = $row[0];
$email =~ s/@.*//;
@q = $imap->get_quota("user/$email");
($mbox, $used, $quota) = @q;
if(undef(@q)) {
print $imap->error;
exit 1;
}
if(defined($mbox) && defined($used) && defined($quota)) {
$rows = $dbh->do(qq{ UPDATE users SET used=used + '$used' WHERE email='$row[0]'});
if (! defined($rows)) {
die();

}
}
else {

}



}

$imap->close;




@days=qw(31 28 31 30 31 30 31 31 30 31 30 31);
my ($sec,$min,$hour,$mday,$mon,$year,$ wday,$yday,$isdst) = localtime(time);


$hours = $days[$mon]*24;

printf("++++++++++\t0.000\n");
$sth = $dbh->prepare("SELECT email,used FROM users WHERE used!='0' ORDER BY email");
$sth->execute() or die();
while( @row = $sth->fetchrow_array()) {
$email = $row[0];
$email =~ s/@.*//;
$used=$row[1];
printf("%s\t%.3f\n", $email, $used/$hours);
}

Недавно начал показывать нули вместо реальных размеров ящиков.
Скрипт разрабатывал не сам, просто срочно нужно найти причину.

К нему есть описание разработчика:

Система FreeBSD-7.1
Главный почтовый сервер. ПО: postfix + cyrus-imap.
cyrus-imap установлен с патчами от UoA. Патч делает возможным автоматическое создание ящика при логие/доставке письма.
Грубый отсев спама делается средствами postfix.
Второй уровень - rmilter. Делает greylisting, rate-limit в связке с memcached. Выполняет проверку spf.
Memcache работает в режиме мастер-мастер репликации с mx4. Для этого он собран с патчем replecached.
rmilter установлен с нестандартным патчем. Патч изменяет порядок выполнения проверок, spf ставиться вперед грейлистинга.
Если проверка spf дала положительный результат, грейлистинг не выполняется. Также патч делает включает проверку для всех доменов и добавляет в конфиг опцию white листа айпишников, для которых проверка spf не выполняется.
Третий уровень spamassassin через amavisd, через него же выполняется антивирусная проверка.
SpamAssassin работает с дополнительными правилами для русскоязычных писем с сайта sa-russian.narod.ru.
Amavis связан с postifx с помощью amavisd-milter.
На этом же сервере установлен кеширующий DNS демон unbound.
Информация о почтовых ящиках храниться в базе mysql.Рутовый пароль к mysql trfake510. Бекап базы ежедневный.
Логирование и прочие второстепенные данные в базе postgresql. Для локальных подключений рутовый пароль не требуется.
Доставка в ящики производиться через демон lmtpd.
Управление почтовыми ящиками выполняется через интерфейс сокетов, с консоли - через скрипт imap.pl
Cron.
/usr/local/xxxx/bin/usage.pl - отвечает за подсчет размера ящиков.
/usr/local/bin/sa-update - обновление правил антиспама.
/root/scripts/dbbackup.sh - бекап базы mysql.
/root/scripts/backup.sh - бекап файловой системы.
/root/scripts/backup_cyrus.sh - бекап базы почтовых ящиков.
Диски:
Там 4 SATA диска по 160 Гб. Объеденены в два зеркала с помощью интегрированного в материнскую плату контроллера.
ar0 - ad4, ad6
ar1 - ad5, ad7
maximum1015 вне форума Ответить с цитированием
Старый 03.03.2011, 15:30   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Установите munin из портов и будет Вам счастье. Ничего писать не нужно, а если же захотите, то есть возможность легко добавлять плагины, писанные на удобном вам языке (си, пайтон, баш, джава, etc)

И да, забыл добавить. Фряха уже в области некрологии.
SkyM@n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к серверу входящей почты (POP3-сервер) BuT@JL Работа с сетью в Delphi 0 04.02.2011 17:46
Создание пустого mp3 файла минимального объема Levsha100 Свободное общение 10 26.06.2010 20:50
Поиск в файле большого объема za4ot Общие вопросы Delphi 2 26.03.2009 20:26
вычисление объема параболойда по сегментам///need help Diller Помощь студентам 2 05.10.2007 18:26