Archive for July 23rd, 2008

Отправка списка открытых тикетов trac-а на почту

Появилась задачка: есть система trac, в 8 часов утра нужно сбрасывать на определенную почту список активных тикетов с определенным владельцем.

Решил все это дело написанием скрипта на perl, который засовывается в кронтаб.

Решение не идеальное, но свою задачу решает:

PERL:
  1. #! /usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use DBI;
  7.  
  8. ###
  9. ### Start - Переменные значение которых нужно переопределить, для того, чтобы скрипт работалY
  10.  
  11. # Путь к базе трака
  12. my $file = "/var/trac/test/db/trac.db";
  13.  
  14. # Кто должен быть владельцем тикета
  15. my $owner = "bessarabov";
  16.  
  17. # Мыло на которое нужно отсылать полученные данные
  18. my $email = "ivan\@bessarabov.ru";
  19.  
  20. ### End - Переменные значение которых нужно переопределить, для того, чтобы скрипт работалY
  21. ###
  22.  
  23.  
  24. # Подключаюсь к базе данных трака
  25. 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;
  26.  
  27. $dbh->{unicode} = 1;
  28.  
  29. # Запрос, который выдает список всех активных тикетов для указанного пользователя
  30. my $sth = $dbh->prepare("
  31. SELECT id, summary
  32. FROM ticket
  33. WHERE
  34.   status IN ('new', 'assigned', 'reopened')
  35.   AND owner = '$owner'
  36. ORDER BY id");
  37.  
  38. $sth->execute();
  39.  
  40. # Переменная в которую я собираю всю необходимую мне инфу
  41. my $content;
  42.  
  43. while (my $result = $sth->fetchrow_hashref) {
  44.     $content .= "#" . $result->{id} . " - ". $result->{summary} . "\n";
  45. }
  46.  
  47. # Если есть хоть один тикет
  48. if ($content) {
  49.  
  50.     # тогда дописываю шапку
  51.     $content = "All active tickets for user $owner\n\n" . $content;
  52.  
  53.     # и отправляю письмо
  54.     open(MAIL, "|mail $email -s 'All active tickets for user $owner'") or die "Cannot open mail: $!";
  55.     binmode MAIL, ":utf8";
  56.     print MAIL $content;
  57.     close(MAIL);
  58. }
  59.  
  60. $sth->finish;

Tags: ,

Wednesday, July 23rd, 2008 Uncategorized Comments Off