Archive for December, 2008

tail -f с фильтром

Очень удобно смотреть некоторые логи с помощью tail -f logfile — на экране показывается в real time все попадающее в лог файл. Но когда в файл записывается ну слишком много всего и вывод совершенно невозможно читать.

Хочется иметь возможность фильтровать вывод, но так же получать его на экран в режиме реального времени. Как оказалось — это очень просто:


root@mail:/var/log# tail -f mail.log|grep “connect from”
Dec 23 12:09:35 mail postfix/smtpd[1940]: connect from unknown[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[1938]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[2522]: connect from host[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[1955]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[2513]: connect from host[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[2502]: connect from unknown[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[1432]: disconnect from host[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1367]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1977]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1940]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:39 mail postfix/smtpd[2455]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:39 mail postfix/smtpd[2471]: disconnect from unknown[A.B.C.D]

Но иногда хочется ставить не один фильтр, а несколько. Но, как выясняется, несколько грепов подряд — не работает. Решение так же существует и оно очень простое — у всех грепов, кроме последнего добавляется параметр — –line-buffered:


root@mail:/var/log# tail -f mail.log|grep –line-buffered “connect from”|grep -v “disconnect”
Dec 23 12:13:04 mail postfix/smtpd[1941]: connect from host[A.B.C.D]
Dec 23 12:13:04 mail postfix/smtpd[2455]: connect from host[A.B.C.D]
Dec 23 12:13:05 mail postfix/smtpd[1955]: connect from unknown[A.B.C.D]
Dec 23 12:13:06 mail postfix/smtpd[1980]: connect from host[A.B.C.D]
Dec 23 12:13:06 mail postfix/smtpd[1940]: connect from unknown[A.B.C.D]
Dec 23 12:13:07 mail postfix/smtpd[1978]: connect from host[A.B.C.D]
Dec 23 12:13:07 mail postfix/smtpd[2502]: connect from unknown[A.B.C.D]
Dec 23 12:13:09 mail postfix/smtpd[2513]: connect from unknown[A.B.C.D]
Dec 23 12:13:11 mail postfix/smtpd[1432]: connect from host[A.B.C.D]

PS найдено на форуме убунту.

Tags:

Wednesday, December 24th, 2008 Uncategorized Comments Off

Perl процедура для обновления wiki страниц trac-а

Я очень люблю и много пользуюсь системой trac. У меня появилась необходимость обновлять вики страницы трака из внешних программ. Я написал крохотную процедуру на perl, чтобы это делать (и впервые воспользовался pod для ведения документации =):

PERL:
  1. #! /usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use DBI;
  6.  
  7. =head2 Структура таблицы wiki в траке
  8.  
  9.  CREATE TABLE wiki (
  10.     name text,
  11.     version integer,
  12.     time integer,
  13.     author text,
  14.     ipnr text,
  15.     text text,
  16.     comment text,
  17.     readonly integer,
  18.     UNIQUE (name,version)
  19. );
  20. CREATE INDEX wiki_time_idx ON wiki ( time);
  21.  
  22. =cut
  23.  
  24. =head2 sub write_wiki_trac
  25.  Процедуре передаются параметры:
  26.  
  27.   file - файл с базой данных trac
  28.   name - название страницы
  29.   author - кто будет автором редакции страницы
  30.   text - текст, который будет размещен на странице
  31.  
  32.  Процедура создает страницу, если страницы с таким именем нет.
  33.  Время создания страницы выставляется текущее время.
  34.  Процедура записывает новую редакцию страницы, если text не соответствует последней радакчии.
  35.  Если текст полностью идентичен последней редакции, то процедура ничего не изменяет в базе.
  36.  
  37. =cut
  38.  
  39.  
  40. sub write_wiki_trac {
  41.     my ($file, $name, $author, $text) = @_;
  42.    
  43.     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;
  44.  
  45.     $dbh->{unicode} = 1;
  46.  
  47.     # Нахожу последнюю версию страницы
  48.     my $sth = $dbh->prepare("SELECT * FROM wiki WHERE name='$name' ORDER BY version DESC LIMIT 1");
  49.  
  50.     $sth->execute();
  51.  
  52.     my $result = $sth->fetchrow_hashref;
  53.  
  54.     # Несколько дурацких строк ниже, чтобы избавится от warning "Use of uninitialized value in concatenation"
  55.     my $text_db;
  56.     if ( $result->{text} ) {
  57.         $text_db = $result->{text};
  58.     } else {
  59.         $text_db = "";
  60.     }
  61.  
  62.     # Записываем только если текст отличается от того, который сейчас в бд
  63.     if ( $text_db ne $text ) {
  64.  
  65.         my $version;
  66.        
  67.         unless ( $result->{version} ) {
  68.             $version = 1;
  69.         } else {
  70.             $version = $result->{version}+1;
  71.         }
  72.  
  73.         my $time = time();
  74.         $sth = $dbh->prepare("INSERT INTO wiki (name, version, time, author, text, ipnr, readonly, comment) VALUES ('$name', '$version', $time, '$author', '$text', '127.0.0.1', 0, '')");
  75.         $sth->execute();
  76.     }
  77.  
  78.     return 1;
  79. }
  80.  
  81.  
  82. # проверка работы процедуры:
  83. my $file = "/var/trac/test/db/trac.db";
  84. &write_wiki_trac($file, "SandBox", "tester", "New page content");

Tags: ,

Friday, December 19th, 2008 Uncategorized Comments Off

Обновление chess.bessarabov.ru

Небольшое обновление моего проекта chess.bessarabov.ru:

  1. Появилось список, в котором отображаются ходы (кстати, при подведении мышки к последнему ходу в списке, ход будет показан на доске)
  2. Появилась форма обратной связи — теперь можно писать мне из нее, а не только по email
  3. В заголовке страницы теперь пишется информация о том, чей сейчас ход — это удобно, когда кроме шахмат открыто еще несколько вкладок, теперь очень легко понять, пошел ли противник

Tags: ,

Wednesday, December 10th, 2008 Uncategorized Comments Off

Форма обратной связи на delicious.com

У сайта delicious.com есть форма обратной связи. Форма вполне обычная, но меня очень порадовала идея, где сохранять информацию о пользователей|, который отписал нечто на этой форме: сохранять в подписе письма:


Original Message Follows:
--------------------------------------
Username: bessarabov
Email: ivan@bessarabov.ru

Message:

Here was my message, whitch I don't wan't to show on public.
--
Originating IP address: 83.167.111.59
Browser Info: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.17) Gecko/20080827 Iceweasel/2.0.0.17 (Debian-2.0.0.17-0etch1)

Tuesday, December 2nd, 2008 Uncategorized Comments Off