# HG changeset patch # User igor # Date 1202863317 -7200 # Node ID 3cd466f35ad67d71a8a7a7be246b5ae8b1c7ccfb # Parent 0d49f33696b38729878e161e82135436c4f71910 * Добавлено разбиения журнала на блоки * Оптимизирована генерация всплывающих подсказок * В заголовке указывается дата * Переделано взаимодействие с mywi: код mywi интегрирован в lilalo * Изменён способ вывода таблицы, теперь она лушче показывается в Opera и IE * Изменён формат diff'а, теперь diff -u diff -r 0d49f33696b3 -r 3cd466f35ad6 README --- a/README Sun Nov 12 17:34:47 2006 +0200 +++ b/README Wed Feb 13 02:41:57 2008 +0200 @@ -1,3 +1,24 @@ + +LiLaLo - Live Lab Log + +(c) Игорь Чубин, 2004-2008 + +Лицензия, по которой распространяется +приведена в файле LICENSE +в данном дистрибутиве + + +Дополнительную информацию о программе +можно найти на странице: + + http://xgu.ru/wiki/LiLaLo + + + +----------------------------------------------------------------- + + + АТРИБУТЫ cline СПИСОК ПОЛЕЙ, ХАРАКТЕРИЗУЮЩИХ КОМАНДНУЮ СТРОКУ diff -r 0d49f33696b3 -r 3cd466f35ad6 install --- a/install Sun Nov 12 17:34:47 2006 +0200 +++ b/install Wed Feb 13 02:41:57 2008 +0200 @@ -25,6 +25,7 @@ url_perl_modules=${url_lilalo}/ perl_modules="Term-VT102 Text-Iconv" +apt_get_install_this="perl make libmodule-build-perl libc6-dev gcc" wget=wget uname -a | grep -qi bsd && wget=fetch @@ -34,6 +35,25 @@ redC='\033[0;31m' greenC='\033[0;32m' +apt_get_install_deps() +{ + if which apt-get >& /dev/null + then + apt-get install -y $apt_get_install_this + else + echo "Please install this dependencies manually:" + echo $apt_get_install_this + echo "Have you installed this already (y/n)?" + echo y | read answer + if echo $answer | grep -q ^[yY] + then + true + else + echo Please install the dependencies and rerun the script + exit 1 + fi + fi +} step() @@ -141,6 +161,7 @@ temp_dir=/tmp/lilalo-install-temp-$$ mkdir -p ${temp_dir} cd ${temp_dir} +step "Installing dependencies" apt_get_install_deps step "Downloading l3bashrc" ${wget} ${url_l3bashrc} step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3config}' step "Downloading perl modules for l3-agent" '{ for i in ${perl_modules}; do ${wget} ${url_perl_modules}/$i.tar.gz; done; }' diff -r 0d49f33696b3 -r 3cd466f35ad6 l3-cgi-lite --- a/l3-cgi-lite Sun Nov 12 17:34:47 2006 +0200 +++ b/l3-cgi-lite Wed Feb 13 02:41:57 2008 +0200 @@ -17,14 +17,26 @@ sub print_footer; sub nav_bar; +sub count_command_lines($); + my $print=""; my $path = $ENV{PATH_INFO}; remove_extra_slashes_from($path); + +my $commands_to_show_at_a_go = $l3config::Config{"commands_to_show_at_a_go"}; +my $start_from_command = "100"; +my $this_page_number=0; +if ($path =~ s/:(.*)//) { + $this_page_number = $1; + $start_from_command = $this_page_number*$commands_to_show_at_a_go; +} + my $real_path = $l3config::Config{"backend_datadir"} ; my $cgi_path = $l3config::Config{"cgi_path"} ; my $style_files = $l3config::Config{"frontend_files"} ; my $frontend_css = $l3config::Config{"frontend_css"} ; + my $data_file = "data.xml"; path_is_correct($path) @@ -51,12 +63,12 @@ unless ( -e "$real_path/$data_file" && -e "$real_path/index.html" - && (stat("$real_path/index.html"))[9] > (stat("$real_path/$data_file"))[9] ) { + && (stat("$real_path/index.html"))[9] > (stat("$real_path/$data_file"))[9] && 0!=0 ) { - my $l3_frontend = "/home/devi/cvs/lilalo/l3-frontend --backend_datafile $real_path/$data_file --output $real_path/index.html"; + my $l3_frontend = "/home/devi/cvs/lilalo/l3-frontend --backend_datafile $real_path/$data_file --output $real_path/index.html --start_from_command $start_from_command "; system($l3_frontend) == 0 or error("Файл журнала найден, но возникла ошибка при его обработке:
$!"); - $print .= "(перегенирован)
"; + #$print .= "(перегенирован)
"; } { @@ -169,6 +181,28 @@ $current_path .= "/$path_part"; $nav_bar .= "/$path_part"; } + my $pages=int(count_command_lines("$real_path/$data_file")/$commands_to_show_at_a_go)+1; + my $i=1; + while ($i<$pages) { + if ($i==$this_page_number) { + $nav_bar .= " :$i"; + } + else { + $nav_bar .= " :$i"; + } + $i++; + } return ""; } +sub count_command_lines($) +# +# Считает количество строк в файле с данными +# Грязный временный хак +# +{ + my $filename= $_[0]; + return int(`grep '' $filename |wc -l`); +# return $filename; +} + diff -r 0d49f33696b3 -r 3cd466f35ad6 l3-frontend --- a/l3-frontend Sun Nov 12 17:34:47 2006 +0200 +++ b/l3-frontend Wed Feb 13 02:41:57 2008 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/perl -w -use IO::Socket; +use POSIX qw(strftime); use lib '.'; use l3config; use utf8; @@ -9,9 +9,10 @@ our @Command_Lines_Index; our %Commands_Description; our %Args_Description; -our $Mywi_Socket; our %Sessions; +our $debug_output=""; # Используйте эту переменную, если нужно передать отладочную информацию + our %filter; our $filter_url; sub init_filter; @@ -26,12 +27,17 @@ our %Elements_Visibility; # ^^^ +our $First_Command=$0; +our $Last_Command=40; + our %Stat; our %frequency_of_command; # Сколько раз в журнале встречается какая команда our $table_number=1; +our %tigra_hints; my %mywi_cache_for; # Кэш для экономии обращений к mywi +sub count_frequency_of_commands; sub make_comment; sub make_new_entries_table; sub load_command_lines_from_xml; @@ -53,6 +59,20 @@ sub print_stat_html; sub print_header_html; sub print_footer_html; +sub tigra_hints_generate; + +#### mywi +# +sub mywi_init; +sub load_mywitxt; +sub mywi_process_query($); +# +sub add_to_log($$); +sub parse_query; +sub search_in_txt; +sub add_to_log($$); +sub mywi_guess($); +# main(); @@ -65,8 +85,8 @@ $Config{frontend_ico_path}=$Config{frontend_css}; $Config{frontend_ico_path}=~s@/[^/]*$@@; init_filter(); + mywi_init(); - open_mywi_socket(); load_command_lines_from_xml($Config{"backend_datafile"}); load_sessions_from_xml($Config{"backend_datafile"}); sort_command_lines; @@ -77,7 +97,6 @@ else { print_all_html($Config{"output"}); } - close_mywi_socket; } sub init_filter @@ -150,46 +169,75 @@ } - - - -# -# Подпрограммы для работы с mywi -# - -sub open_mywi_socket +sub mywrap($) { - $Mywi_Socket = IO::Socket::INET->new( - PeerAddr => $Config{mywi_server}, - PeerPort => $Config{mywi_port}, - Proto => "tcp", - Type => SOCK_STREAM); +return '
'.$_[0]. +'
'; } -sub close_mywi_socket +sub tigra_hints_generate { - close ($Mywi_Socket) if $Mywi_Socket ; + my $tigra_hints_items=""; + for my $hint_id (keys %tigra_hints) { + $tigra_hints{$hint_id} =~ s@\n@
@gs; + $tigra_hints{$hint_id} =~ s@ - @ — @gs; + $tigra_hints{$hint_id} =~ s@'@\\'@gs; +# $tigra_hints_items .= "'$hint_id' : mywrap('".$tigra_hints{$hint_id}."'),"; + $tigra_hints_items .= "'$hint_id' : '".mywrap($tigra_hints{$hint_id})."',"; + } + $tigra_hints_items =~ s/,$//; + return <
'+s_+ +'
'; + +} +TIGRA +$a=<; - utf8::decode($mywi); - $mywi = "" if $mywi =~ /nothing app/; + my $cline = $_[0]; + my @commands = keys %{extract_from_cline("commands", $cline)}; + for my $command (@commands) { + $frequency_of_command{$command}++; } - close_mywi_socket; - return $mywi; } sub make_comment @@ -206,9 +254,9 @@ # Commands for my $command (@commands) { $command =~ s/'//g; - $frequency_of_command{$command}++; + #$frequency_of_command{$command}++; if (!$Commands_Description{$command}) { - $mywi_cache_for{$command} ||= mywi_client($command) || ""; + $mywi_cache_for{$command} ||= mywi_process_query($command) || ""; my $mywi = join ("\n", grep(/\([18]|sh|script\)/, split(/\n/, $mywi_cache_for{$command}))); $mywi =~ s/\s+/ /; if ($mywi !~ /^\s*$/) { @@ -330,8 +378,16 @@ sub process_command_lines { + + my $current_command=0; + COMMAND_LINE_PROCESSING: for my $i (@Command_Lines_Index) { + + $current_command++; + next if $current_command < $Config{"start_from_command"}; + last if $current_command > $Config{"start_from_command"} + $Config{"commands_to_show_at_a_go"}; + my $cl = \$Command_Lines[$i]; next if !$cl; @@ -361,11 +417,15 @@ } my $hint; + count_frequency_of_commands($$cl->{"cline"}); $hint = make_comment($$cl->{"cline"}); + if ($hint) { $$cl->{hint} = $hint; } -# $$cl->{hint}=""; + $tigra_hints{$$cl->{"time"}} = $hint; + + $$cl->{hint}=""; # Выводим верхних строк # и нижних строк, @@ -491,6 +551,8 @@ my $last_session=""; my $last_day=q(); my $last_wday=q(); + my $first_command_of_the_day_unix_time=q(); + my $human_readable_time=q(); my $in_range=0; my $current_command=0; @@ -517,6 +579,10 @@ my $cl=$Command_Lines[$Command_Lines_Index[$current_command++]]; next unless $cl; + next if $current_command < $Config{"start_from_command"}; + last if $current_command > $Config{"start_from_command"} + $Config{"commands_to_show_at_a_go"}; + + # Пропускаем команды, с одинаковым временем # Это не совсем правильно. # Возможно, что это команды, набираемые с помощью @@ -592,6 +658,7 @@ my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($cl->{time}); + # Добавляем спереди 0 для удобочитаемости $min = "0".$min if $min =~ /^.$/; $hour = "0".$hour if $hour =~ /^.$/; @@ -603,6 +670,9 @@ # DAY CHANGE if ( $last_day ne $day) { + $prev_unix_time=$first_command_of_the_day_unix_time; + $first_command_of_the_day_unix_time = $cl->{time}; + $human_readable_time = strftime "%D", localtime($prev_unix_time); if ($last_day) { # Вычисляем разность множеств. @@ -610,7 +680,9 @@ # @new_commands = keys %frequency_of_command - @known_commands; - $result .= "

".$Day_Name[$last_wday]."

"; +# Выводим предыдущий день + + $result .= "

".$Day_Name[$last_wday]." ($human_readable_time)

"; for my $entry_class (sort keys %new_entries_of) { my $table_caption = "Таблица ".$table_number++.".".$Day_Name[$last_wday] .". Новые ".$new_entries_of{$entry_class}; @@ -623,7 +695,12 @@ $result .= $this_day_result; } - push @toc, "".$Day_Name[$wday]."\n"; +# Добавляем текущий день в оглавление + + $human_readable_time = strftime "%D", localtime($first_command_of_the_day_unix_time); + push @toc, "".$Day_Name[$wday]." ($human_readable_time)\n"; + + $last_day=$day; $last_wday=$wday; $this_day_result = q(); @@ -672,8 +749,8 @@ $cline = "$cline"; } - $this_day_result .= "
\n
\n"; - $this_day_result .= "
\n" . $cline ; #cline + $this_day_result .= "
\n
\n"; + $this_day_result .= "
{time}."')\" onmouseout=\"myHint.hide()\">\n" . $cline ; #cline $this_day_result .= "\n" . "\n" . "\n" if $cl->{"err"}; @@ -716,11 +793,15 @@ # Вывод очередной команды окончен $this_day_result .= "
\n"; # cblock - $this_day_result .= "
\n" + $this_day_result .= "
\n" . "\n"; # command } last: { - $result .= "

".$Day_Name[$last_wday]."

"; + $prev_unix_time=$first_command_of_the_day_unix_time; + $first_command_of_the_day_unix_time = $cl->{time}; + $human_readable_time = strftime "%D", localtime($prev_unix_time); + + $result .= "

".$Day_Name[$last_wday]." ($human_readable_time)

"; for my $entry_class (keys %new_entries_of) { my $table_caption = "Таблица ".$table_number++.".".$Day_Name[$last_wday] @@ -1120,7 +1201,8 @@ my ($command_lines,$toc) = print_command_lines_html; my $files_section = print_files_html; - $result = print_header_html($toc); + $result = $debug_output; + $result .= print_header_html($toc); # $result.= join "
", keys %Sessions; @@ -1195,9 +1277,11 @@ # Управляющая форма отключена - # Она слишеком сильно мешает, нужно что-то переделать + # Она слишком сильно мешает, нужно что-то переделать $control_form = ""; + my $tigra_hints_array=tigra_hints_generate; + my $result; $result = < @@ -1207,23 +1291,51 @@ $title - --> - + + + +