lilalo

changeset 115:9e6359b7ad55

Исправлена ошибка с смешением выводв сеансов
Добавлена поддержка таблуяции (tab completion)
l3config.pm перенесён в /etc/lilalo/ ; возможно не окончательно
Имя сервера для l3-upload не прописывается теперь жёстко в коде, а берётся из конфигурационного файла
author igor
date Sun Mar 09 22:54:22 2008 +0200 (2008-03-09)
parents 658b4ea105c1
children f45ba4b5dc7f
files install l3-agent l3-backend l3-cgi l3-cgi-lite l3-frontend l3-upload l3bashrc l3files/break.png l3files/tab.png
line diff
     1.1 --- a/install	Sun Mar 09 02:38:56 2008 +0200
     1.2 +++ b/install	Sun Mar 09 22:54:22 2008 +0200
     1.3 @@ -21,7 +21,8 @@
     1.4  url_lilalo="http://xgu.ru/lilalo"
     1.5  url_l3bashrc="${url_lilalo}"/l3bashrc
     1.6  url_l3agent="${url_lilalo}"/l3-agent
     1.7 -url_l3config="${url_lilalo}"/l3config.pm
     1.8 +url_l3config_pm="${url_lilalo}"/l3config.pm
     1.9 +url_l3config="${url_lilalo}"/l3-config
    1.10  url_l3prompt="${url_lilalo}"/l3prompt
    1.11  url_perl_modules=${url_lilalo}/
    1.12  perl_modules="Term-VT102 Text-Iconv"
    1.13 @@ -89,9 +90,11 @@
    1.14      do
    1.15          user_home=`get_user_home "$user"`
    1.16          mkdir -p ${user_home}/${lilalo_home}
    1.17 -        cp l3config.pm /usr/local/bin
    1.18 +        mkdir /etc/lilalo/
    1.19 +        cp l3config.pm /etc/lilalo/
    1.20          cp l3-agent /usr/local/bin
    1.21 -        chmod 755 /usr/local/bin/l3-agent
    1.22 +        cp l3-config /usr/local/bin
    1.23 +        chmod 755 /usr/local/bin/l3-{agent,config}
    1.24          cp l3bashrc ${user_home}/${lilalo_home}
    1.25          cp l3prompt ${user_home}/${lilalo_home}
    1.26          chmod 755 ${user_home}/${lilalo_home}/l3prompt
    1.27 @@ -167,7 +170,7 @@
    1.28  step "Installing dependencies" apt_get_install_deps
    1.29  step "Downloading l3bashrc" ${wget} ${url_l3bashrc} 
    1.30  step "Downloading l3prompt" ${wget} ${url_l3prompt} 
    1.31 -step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3config}'
    1.32 +step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3configpm}; ${wget} ${url_l3config}'
    1.33  step "Downloading perl modules for l3-agent" '{ for i in ${perl_modules}; do ${wget} ${url_perl_modules}/$i.tar.gz; done; }'
    1.34  step "Installing perl modules for l3-agent" '{ for i in ${perl_modules}; do tar xvfz $i.tar.gz; cd $i*[^z]; perl Makefile.PL; make; make install; cd ..; done; }'
    1.35  step "Installing l3bashrc to users home directories" install_to_users_homes $install_l3bashrc_for_this_users
     2.1 --- a/l3-agent	Sun Mar 09 02:38:56 2008 +0200
     2.2 +++ b/l3-agent	Sun Mar 09 22:54:22 2008 +0200
     2.3 @@ -15,7 +15,7 @@
     2.4  use Time::Local 'timelocal_nocheck';
     2.5  use IO::Socket;
     2.6  
     2.7 -use lib "/usr/local/bin";
     2.8 +use lib "/etc/lilalo";
     2.9  use l3config;
    2.10  
    2.11  
    2.12 @@ -250,9 +250,7 @@
    2.13      my $cline_re2_v3 = qr/$cline_re2_v3_base$/sx;
    2.14  
    2.15  
    2.16 -
    2.17 -    my $vt = Term::VT102->new ( 'cols' => $Config{"terminal_width"}, 
    2.18 -                                'rows' => $Config{"terminal_height"});
    2.19 +    my %vt;     # Хэш виртуальных терминалов. По одному на каждый сеанс
    2.20      my $cline_vt = Term::VT102->new (
    2.21                                  'cols' => $Config{"terminal_width"}, 
    2.22                                  'rows' => $Config{"terminal_height"});
    2.23 @@ -282,6 +280,12 @@
    2.24          $file =~ m@.*/([^/]*)\.script$@;
    2.25          $local_session_id = $1;
    2.26  
    2.27 +        if (not defined($vt{$local_session_id})) {
    2.28 +            $vt{$local_session_id} = Term::VT102->new ( 
    2.29 +                                        'cols' => $Config{"terminal_width"}, 
    2.30 +                                        'rows' => $Config{"terminal_height"});
    2.31 +        }
    2.32 +
    2.33          #Если файл только что появился, 
    2.34          #пытаемся найти и загрузить информацию о соответствующей ему сессии
    2.35          if (!$Script_Files{$file}) {
    2.36 @@ -413,7 +417,7 @@
    2.37                  # Output
    2.38                  if (!$last_cl{"suppress_output"} || $last_cl{"err"}) {
    2.39                      for (my $i=0; $i<$Config{"terminal_height"}; $i++) {
    2.40 -                        my $line= $vt->row_plaintext($i);
    2.41 +                        my $line= $vt{$local_session_id}->row_plaintext($i);
    2.42                          next if !defined ($line) ; #|| $line =~ /^\s*$/;
    2.43                          $line =~ s/\s*$//;
    2.44                          $line .= "\n" unless $line =~ /^\s*$/;
    2.45 @@ -424,7 +428,7 @@
    2.46                      $last_cl{"output"}= "";
    2.47                  }
    2.48  
    2.49 -                $vt->reset();
    2.50 +                $vt{$local_session_id}->reset();
    2.51  
    2.52  
    2.53                  # Save 
    2.54 @@ -538,7 +542,7 @@
    2.55                  # Output
    2.56                  if (!$last_cl{"suppress_output"} || $last_cl{"err"}) {
    2.57                      for (my $i=0; $i<$Config{"terminal_height"}; $i++) {
    2.58 -                        my $line= $vt->row_plaintext($i);
    2.59 +                        my $line= $vt{$local_session_id}->row_plaintext($i);
    2.60                          next if !defined ($line) ; #|| $line =~ /^\s*$/;
    2.61                          $line =~ s/\s*$//;
    2.62                          $line .= "\n" unless $line =~ /^\s*$/;
    2.63 @@ -549,7 +553,7 @@
    2.64                      $last_cl{"output"}= "";
    2.65                  }
    2.66  
    2.67 -                $vt->reset();
    2.68 +                $vt{$local_session_id}->reset();
    2.69  
    2.70  
    2.71                  # Changing encoding 
    2.72 @@ -575,7 +579,7 @@
    2.73              $last_output_length+=length($_);
    2.74              #if (!$cl{"suppress_output"} || $last_output_length < 5000) {
    2.75              if ($last_output_length < 50000) {
    2.76 -                $vt->process("$_"."\n") 
    2.77 +                $vt{$local_session_id}->process("$_"."\n") 
    2.78              }
    2.79              else
    2.80              {
     3.1 --- a/l3-backend	Sun Mar 09 02:38:56 2008 +0200
     3.2 +++ b/l3-backend	Sun Mar 09 22:54:22 2008 +0200
     3.3 @@ -1,7 +1,7 @@
     3.4  #!/usr/bin/perl
     3.5  
     3.6  use strict;
     3.7 -use lib '.';
     3.8 +use lib '/etc/lilalo/';
     3.9  use l3config;
    3.10  use IO::Socket;
    3.11  use POSIX qw(:sys_wait_h);
     4.1 --- a/l3-cgi	Sun Mar 09 02:38:56 2008 +0200
     4.2 +++ b/l3-cgi	Sun Mar 09 22:54:22 2008 +0200
     4.3 @@ -6,7 +6,7 @@
     4.4  use utf8;
     4.5  
     4.6  BEGIN {
     4.7 -    chdir("/home/devi/cvs/lilalo");
     4.8 +    chdir("/etc/lilalo");
     4.9      require l3config;
    4.10      l3config::init_config();
    4.11  };
     5.1 --- a/l3-cgi-lite	Sun Mar 09 02:38:56 2008 +0200
     5.2 +++ b/l3-cgi-lite	Sun Mar 09 22:54:22 2008 +0200
     5.3 @@ -5,7 +5,7 @@
     5.4  use utf8;
     5.5  
     5.6  BEGIN {
     5.7 -    chdir("/home/devi/cvs/lilalo");
     5.8 +    chdir("/etc/lilalo/");
     5.9      require l3config;
    5.10      l3config::init_config();
    5.11  };
     6.1 --- a/l3-frontend	Sun Mar 09 02:38:56 2008 +0200
     6.2 +++ b/l3-frontend	Sun Mar 09 22:54:22 2008 +0200
     6.3 @@ -1,7 +1,7 @@
     6.4  #!/usr/bin/perl -w
     6.5  
     6.6  use POSIX qw(strftime);
     6.7 -use lib '.';
     6.8 +use lib '/etc/lilalo';
     6.9  use l3config;
    6.10  use utf8;
    6.11  
    6.12 @@ -380,6 +380,11 @@
    6.13  
    6.14  
    6.15      my $current_command=0;
    6.16 +    my $prev_i;
    6.17 +
    6.18 +    my $tab_seq =0 ; # номер команды в последовательности tab-completion
    6.19 +                     # отличен от нуля только для тех последовательностей, 
    6.20 +                     # где постоянно нажимается клавиша tab
    6.21  
    6.22  COMMAND_LINE_PROCESSING:
    6.23      for my $i (@Command_Lines_Index) {
    6.24 @@ -390,6 +395,12 @@
    6.25  
    6.26          my $cl = \$Command_Lines[$i];
    6.27  
    6.28 +        # Запоминаем предыщуюу команду
    6.29 +        # Она нам потребуется, в частности, для ввода tab_seq рпи обработке tab_completion
    6.30 +        my $prev_cl;
    6.31 +        $prev_cl = \$Command_Lines[$prev_i] if defined($prev_i);
    6.32 +        $prev_i = $i;
    6.33 +
    6.34          next if !$cl;
    6.35  
    6.36          for my $filter_key (keys %filter) {
    6.37 @@ -403,6 +414,7 @@
    6.38  
    6.39          $$cl->{err} ||=0;
    6.40  
    6.41 +
    6.42          # Класс команды
    6.43  
    6.44          $$cl->{"class"} =   $$cl->{"err"} eq 130 ?  "interrupted"
    6.45 @@ -460,6 +472,25 @@
    6.46          }
    6.47          $$cl->{short_output} = $output;
    6.48  
    6.49 +# Обработка команд с одинаковым временем
    6.50 +# Скорее всего они набраны с помощью tab-completion
    6.51 +        if (defined($prev_cl)) {
    6.52 +           if ($$prev_cl->{time} == $$cl->{time}) {
    6.53 +            $tab_seq++;
    6.54 +           } 
    6.55 +           else {
    6.56 +            $tab_seq=0;
    6.57 +           };
    6.58 +           $$prev_cl->{tab_seq}=$tab_seq;
    6.59 +
    6.60 +# Обработка команд с одинаковым номером в истории
    6.61 +# Скорее всего они набраны с помощью Ctrl-C
    6.62 +           if ($$prev_cl->{history} == $$cl->{history}) {
    6.63 +            $$prev_cl->{break}=1;
    6.64 +           }
    6.65 +        }
    6.66 +
    6.67 +
    6.68  #Обработка пометок
    6.69  #  Если несколько пометок (notes) идут подряд, 
    6.70  #  они все объединяются
    6.71 @@ -588,12 +619,6 @@
    6.72          last if $current_command > $Config{"start_from_command"} + $Config{"commands_to_show_at_a_go"};
    6.73  
    6.74  
    6.75 -# Пропускаем команды, с одинаковым временем
    6.76 -# Это не совсем правильно.
    6.77 -# Возможно, что это команды, набираемые с помощью <completion>
    6.78 -# или запомненные с помощью <ctrl-c>
    6.79 -
    6.80 -        next if $Stat{LastCommand} == $cl->{time};
    6.81  
    6.82  # Пропускаем строки, которые противоречат фильтру
    6.83  # Если у нас недостаточно информации о том, подходит строка под  фильтр или нет, 
    6.84 @@ -760,7 +785,13 @@
    6.85          $this_day_result .= "<div class='cline'>" . $cline ;      #cline
    6.86          $this_day_result .= "<span title='Код завершения ".$cl->{"err"}."'>\n"
    6.87                           .  "<img src='".$Config{frontend_ico_path}."/error.png'/>\n"
    6.88 -                         .  "</span>\n" if $cl->{"err"};
    6.89 +                         .  "</span>\n" if ($cl->{"err"} and not $cl->{tab_seq} and not $cl->{break});
    6.90 +        $this_day_result .= "<span title='Tab completion ".$cl->{tab_seq}."'>\n"
    6.91 +                         .  "<img src='".$Config{frontend_ico_path}."/tab.png'/>\n"
    6.92 +                         .  "</span>\n" if $cl->{tab_seq};
    6.93 +        $this_day_result .= "<span title='Ctrl-C pressed'>\n"
    6.94 +                         .  "<img src='".$Config{frontend_ico_path}."/break.png'/>\n"
    6.95 +                         .  "</span>\n" if ($cl->{break} and not $cl->{tab_seq});
    6.96          $this_day_result .= "</div>\n";                             #cline
    6.97  
    6.98  # OUTPUT
     7.1 --- a/l3-upload	Sun Mar 09 02:38:56 2008 +0200
     7.2 +++ b/l3-upload	Sun Mar 09 22:54:22 2008 +0200
     7.3 @@ -2,7 +2,7 @@
     7.4  #
     7.5  
     7.6  use CGI;
     7.7 -$upload_dir = "/var/www/xguru/l3shot";
     7.8 +$upload_dir = "/var/www/l3shot";
     7.9  $query = new CGI;
    7.10  
    7.11  $filename = $query->param("photo"); 
     8.1 --- a/l3bashrc	Sun Mar 09 02:38:56 2008 +0200
     8.2 +++ b/l3bashrc	Sun Mar 09 22:54:22 2008 +0200
     8.3 @@ -182,7 +182,6 @@
     8.4      unset `set | grep '^_l3_.*=' | sed 's/=.*//'`
     8.5  }
     8.6  
     8.7 -
     8.8  l3shot()
     8.9  {
    8.10      if [ -x "`which xwd`" ]
    8.11 @@ -193,7 +192,7 @@
    8.12          [ -d ${_l3_home} ] || mkdir -p ${_l3_home}
    8.13          xwd -out "$_l3_home/$shot_name" \
    8.14          && echo Screenshot is written to ${_l3_home}/${shot_name} \
    8.15 -        && curl -s -F photo=@$_l3_home/$shot_name http://xgu.ru/l3-upload
    8.16 +        && curl -s -F photo=@$_l3_home/$shot_name http://`l3-config backend_address`/l3-upload
    8.17      else
    8.18          {
    8.19              echo
    8.20 @@ -228,7 +227,7 @@
    8.21              cp $source /tmp/$target
    8.22          fi
    8.23          echo Uploaded file name is ${target}
    8.24 -        curl -s -F photo=@/tmp/$target http://xgu.ru/l3-upload && rm -f /tmp/$target
    8.25 +        curl -s -F photo=@/tmp/$target http://`l3-config backend_address`/l3-upload && rm -f /tmp/$target
    8.26      fi
    8.27  }
    8.28  
     9.1 Binary file l3files/break.png has changed
    10.1 Binary file l3files/tab.png has changed