Archive for July 23rd, 2008
Отправка списка открытых тикетов trac-а на почту
Появилась задачка: есть система trac, в 8 часов утра нужно сбрасывать на определенную почту список активных тикетов с определенным владельцем.
Решил все это дело написанием скрипта на perl, который засовывается в кронтаб.
Решение не идеальное, но свою задачу решает:
PERL:
-
#! /usr/bin/perl
-
-
use strict;
-
use warnings;
-
-
use DBI;
-
-
###
-
### Start - Переменные значение которых нужно переопределить, для того, чтобы скрипт работалY
-
-
# Путь к базе трака
-
my $file = "/var/trac/test/db/trac.db";
-
-
# Кто должен быть владельцем тикета
-
my $owner = "bessarabov";
-
-
# Мыло на которое нужно отсылать полученные данные
-
my $email = "ivan\@bessarabov.ru";
-
-
### End - Переменные значение которых нужно переопределить, для того, чтобы скрипт работалY
-
###
-
-
-
# Подключаюсь к базе данных трака
-
my $dbh = DBI->connect("dbi:SQLite:dbname=$file","","", { RaiseError => 1, PrintError => 0 }) or die "Failed to connect to SQLite filesystem digest cache database at $file: " . DBI->errstr;
-
-
$dbh->{unicode} = 1;
-
-
# Запрос, который выдает список всех активных тикетов для указанного пользователя
-
my $sth = $dbh->prepare("
-
SELECT id, summary
-
FROM ticket
-
WHERE
-
status IN ('new', 'assigned', 'reopened')
-
AND owner = '$owner'
-
ORDER BY id");
-
-
$sth->execute();
-
-
# Переменная в которую я собираю всю необходимую мне инфу
-
my $content;
-
-
while (my $result = $sth->fetchrow_hashref) {
-
$content .= "#" . $result->{id} . " - ". $result->{summary} . "\n";
-
}
-
-
# Если есть хоть один тикет
-
if ($content) {
-
-
# тогда дописываю шапку
-
$content = "All active tickets for user $owner\n\n" . $content;
-
-
# и отправляю письмо
-
binmode MAIL, ":utf8";
-
print MAIL $content;
-
}
-
-
$sth->finish;