lilalo
changeset 57:187b6636a3be
l3-agent:
Исправлен микробаг с uid
Раньше он не отправлялся в поток
l3-cgi:
При генерировании не CGI-версии
в таблице отсутствуют поля "инструктор" и "все"
На текущий момент они указывали в никуда,
поэтому я отключил их
l3-frontend:
Выводятся новые команды в начале каждого дня.
Команды сортируются по убыванию частоты использования.
l3scripts:
в письмо в одном месте е заменил на ё
Исправлен микробаг с uid
Раньше он не отправлялся в поток
l3-cgi:
При генерировании не CGI-версии
в таблице отсутствуют поля "инструктор" и "все"
На текущий момент они указывали в никуда,
поэтому я отключил их
l3-frontend:
Выводятся новые команды в начале каждого дня.
Команды сортируются по убыванию частоты использования.
l3scripts:
в письмо в одном месте е заменил на ё
author | devi |
---|---|
date | Wed Dec 28 18:44:42 2005 +0200 (2005-12-28) |
parents | 43aeb3036aaa |
children | 93e98a3fa44d |
files | l3-agent l3-cgi l3-frontend l3scripts |
line diff
1.1 --- a/l3-agent Wed Dec 28 01:01:00 2005 +0200 1.2 +++ b/l3-agent Wed Dec 28 18:44:42 2005 +0200 1.3 @@ -813,6 +813,7 @@ 1.4 print OUT "<raw_end>",$cl->{raw_end},"</raw_end>\n"; 1.5 print OUT "<raw_file>",$cl->{raw_file},"</raw_file>\n"; 1.6 print OUT "<tty>",$cl->{tty},"</tty>\n"; 1.7 + print OUT "<uid>",$cl->{uid},"</uid>\n"; 1.8 print OUT "<out_class>",$out_class,"</out_class>\n"; 1.9 print OUT "<err>",$cl->{err},"</err>\n"; 1.10 print OUT "<prompt>";
2.1 --- a/l3-cgi Wed Dec 28 01:01:00 2005 +0200 2.2 +++ b/l3-cgi Wed Dec 28 18:44:42 2005 +0200 2.3 @@ -120,9 +120,19 @@ 2.4 my $t = load_training($training); 2.5 $training ||= "current"; 2.6 2.7 + my $prefix = "/cgi-bin/l3/$training/"; 2.8 + my $suffix = ""; 2.9 + if ($is_not_cgi) { 2.10 + $prefix = ""; 2.11 + $suffix = ".html"; 2.12 + } 2.13 + my $path = $to_file; 2.14 + $path = "" unless $path =~ s@/[^/]*$@@; 2.15 + 2.16 $print .= "<html>\n"; 2.17 $print .= "<head>\n"; 2.18 $print .= "<title>Журналы лабораторных работ</title>\n"; 2.19 + $print .= "<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />"; 2.20 $print .= "<link rel='stylesheet' href='".$l3config::Config{frontend_css}."' type='text/css'/>\n"; 2.21 $print .= "</head>\n"; 2.22 $print .= "<body>\n"; 2.23 @@ -135,12 +145,6 @@ 2.24 $print .= "</tr>\n"; 2.25 for my $host (sort keys %{$t->{host}}) { 2.26 2.27 - my $prefix = "/cgi-bin/l3/$training/"; 2.28 - my $suffix = ""; 2.29 - if ($is_not_cgi) { 2.30 - $prefix = ""; 2.31 - $suffix = ".html"; 2.32 - } 2.33 2.34 $print .= "<tr>\n"; 2.35 my $h = $t->{host}->{$host}; 2.36 @@ -148,7 +152,7 @@ 2.37 $print .= "<td>$host</td>"; 2.38 $print .= "<td><a href='".$prefix.$host."/root$suffix'>root</a></td>"; 2.39 $print .= "<td><a href='".$prefix.$host."/".$h->{user}."$suffix'>".$h->{user}."</a></td>"; 2.40 - $print .= "<td><a href='".$prefix.$host."$suffix'>все</a></td>"; 2.41 + $print .= "<td><a href='".$prefix.$host."$suffix'>все</a></td>" if not $is_not_cgi; 2.42 $print .= "</td>\n"; 2.43 $print .= "</tr>\n"; 2.44 2.45 @@ -157,8 +161,7 @@ 2.46 # Если мы чувствуем, что нас вызывают для генерения индексного файла, 2.47 # нам нужно создать и файлы, на которые он указывает 2.48 # Лучше было бы это сделать хотя бы через вызов функций 2.49 - my $path = $to_file; 2.50 - $path = "" unless $path =~ s@/[^/]*$@@; 2.51 +# Такой же хак чуть ниже 2.52 mkdir("$path/$host"); 2.53 system("$0 --cgi2file $path/$prefix$host/root$suffix ". 2.54 "--cgi_path_info ".$training."/".$host."/root ". 2.55 @@ -166,15 +169,27 @@ 2.56 system("$0 --cgi2file $path/$prefix$host/".$h->{user}."$suffix ". 2.57 "--cgi_path_info ".$training."/".$host."/".$h->{user}." ". 2.58 "--frontend_css ../$l3config::Config{frontend_css}"); 2.59 + # system("$0 --cgi2file $path/$prefix$host$suffix ". 2.60 + # "--cgi_path_info ".$training."/".$host." ". 2.61 + # "--frontend_css ../$l3config::Config{frontend_css}"); 2.62 } 2.63 2.64 } 2.65 - $print .= "<tr>\n"; 2.66 - $print .= "<td>"."Инструктор"."</td>"; 2.67 - $print .= "<td>from linux.nt</td>"; 2.68 - $print .= "<td/>"; 2.69 - $print .= "<td/>"; 2.70 - $print .= "<td><a href='/cgi-bin/l3/current"."?login_from=192.168.15.254'>все</a></td>"; 2.71 +# Такой же хак был чуть выше 2.72 + if ($is_not_cgi) { 2.73 +# $print .= "<td><a href='".$prefix."instructor.".$suffix."'>все</a></td>"; 2.74 +# system("$0 --cgi2file $path/$prefix$host$suffix" 2.75 +# . " --cgi_path_info ".$training."?login_from=192.168.15.254".$host 2.76 +# . " --frontend_css ../$l3config::Config{frontend_css}"); 2.77 + } 2.78 + else { 2.79 + $print .= "<tr>\n"; 2.80 + $print .= "<td>"."Инструктор"."</td>"; 2.81 + $print .= "<td>from linux.nt</td>"; 2.82 + $print .= "<td/>"; 2.83 + $print .= "<td/>"; 2.84 + $print .= "<td><a href='$training"."?login_from=192.168.15.254'>все</a></td>"; 2.85 + } 2.86 $print .= "</tr>\n"; 2.87 $print .= "</table>\n"; 2.88 $print .= "</body>\n";
3.1 --- a/l3-frontend Wed Dec 28 01:01:00 2005 +0200 3.2 +++ b/l3-frontend Wed Dec 28 18:44:42 2005 +0200 3.3 @@ -26,6 +26,7 @@ 3.4 my %mywi_cache_for; # Кэш для экономии обращений к mywi 3.5 3.6 sub make_comment; 3.7 +sub make_new_commands_table; 3.8 sub load_command_lines_from_xml; 3.9 sub load_sessions_from_xml; 3.10 sub sort_command_lines; 3.11 @@ -301,9 +302,10 @@ 3.12 $$cl->{"class"} = $$cl->{"err"} eq 130 ? "interrupted" 3.13 : $$cl->{"err"} eq 127 ? "mistyped" 3.14 : $$cl->{"err"} ? "wrong" 3.15 - : ""; 3.16 + : "normal"; 3.17 3.18 - if (!$$cl->{"euid"}) { 3.19 + if ($$cl->{"cline"} =~ /[^|`]\s*sudo/ 3.20 + || $$cl->{"uid"} eq 0) { 3.21 $$cl->{"class"}.="_root"; 3.22 } 3.23 3.24 @@ -389,6 +391,8 @@ 3.25 3.26 my $current_command=0; 3.27 3.28 + my @known_commands; 3.29 + 3.30 my %filter; 3.31 3.32 if ($Config{filter}) { 3.33 @@ -460,9 +464,9 @@ 3.34 $note = join ("\n", map ("<p>$_</p>", split (/-\n/, $note))); 3.35 $note =~ s@(http:[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g; 3.36 $note =~ s@(www\.[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g; 3.37 - $result .= "<tr><td colspan='6'>"; 3.38 - $result .= "<h4 id='note$note_number'>".$cl->{note_title}."</h4>" if $cl->{note_title}; 3.39 - $result .= "".$note."<p/><p/></td></td>"; 3.40 + $this_day_result .= "<tr><td colspan='6'>" 3.41 + . "<h4 id='note$note_number'>".$cl->{note_title}."</h4>" if $cl->{note_title} 3.42 + . "".$note."<p/><p/></td></tr>"; 3.43 3.44 if ($cl->{note_title}) { 3.45 push @{$toc[@toc]},"<a href='#note$note_number'>".$cl->{note_title}."</a>"; 3.46 @@ -508,11 +512,6 @@ 3.47 $hour = "0".$hour if $hour =~ /^.$/; 3.48 $sec = "0".$sec if $sec =~ /^.$/; 3.49 3.50 - #my @new_commands; 3.51 - #my @new_files; 3.52 - #@new_commands = split (/\s+/, $cl->{"new_commands"}) if defined $cl->{"new_commands"}; 3.53 - #@new_files = split (/\s+/, $cl->{"new_files"}) if defined $cl->{"new_files"}; 3.54 - 3.55 $class=$cl->{"class"}; 3.56 $Stat{ErrorCommands}++ if $class =~ /wrong/; 3.57 $Stat{MistypedCommands}++ if $class =~ /mistype/; 3.58 @@ -521,8 +520,25 @@ 3.59 # DAY CHANGE 3.60 if ( $last_day ne $day) { 3.61 if ($last_day) { 3.62 + 3.63 +# Вычисляем разность множеств. 3.64 +# Что-то вроде этого, если бы так можно было писать: 3.65 +# @new_commands = keys %CommandsFDistribution - @known_commands; 3.66 + 3.67 + 3.68 $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>"; 3.69 - #$result .= "Новые команды<br/>"; 3.70 + 3.71 + my $new_commands_section = make_new_commands_table(\@known_commands); 3.72 + @known_commands = keys %CommandsFDistribution; 3.73 + 3.74 + if ($new_commands_section) { 3.75 + $result .= "<h5>Новые команды</h5>" 3.76 + . "<table class='new_commands_table'>" 3.77 + . "<tr class='new_commands_header'><td>Команда</td><td>Описание</td></tr>" 3.78 + . $new_commands_section 3.79 + . "</table>" 3.80 + } 3.81 + 3.82 $result .= "<table width='100%'>\n"; 3.83 $result .= $this_day_result; 3.84 $result .= "</table>"; 3.85 @@ -614,17 +630,53 @@ 3.86 $this_day_result .= "</td>\n"; 3.87 $this_day_result .= "</tr>\n"; 3.88 } 3.89 + last: { 3.90 + my $new_commands_section = make_new_commands_table(\@known_commands); 3.91 + @known_commands = keys %CommandsFDistribution; 3.92 3.93 - $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>"; 3.94 - $result .= "<table width='100%'>\n"; 3.95 - $result .= $this_day_result; 3.96 - $result .= "</table>"; 3.97 + $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>"; 3.98 + if ($new_commands_section) { 3.99 + $result .= "<h5>Новые команды</h5>" 3.100 + . "<table class='new_commands_table'>" 3.101 + . "<tr class='new_commands_header'><td>Команда</td><td>Описание</td></tr>" 3.102 + . $new_commands_section 3.103 + . "</table>" 3.104 + } 3.105 + 3.106 + $result .= "<table width='100%'>\n"; 3.107 + $result .= $this_day_result; 3.108 + $result .= "</table>"; 3.109 + } 3.110 3.111 return ($result, collapse_list (\@toc)); 3.112 3.113 } 3.114 3.115 +sub make_new_commands_table 3.116 +{ 3.117 + my @known_commands = @{$_[0]}; 3.118 3.119 + my %count; 3.120 + my @new_commands = (); 3.121 + for my $c (keys %CommandsFDistribution, @known_commands) { 3.122 + $count{$c}++ 3.123 + } 3.124 + for my $c (keys %CommandsFDistribution) { 3.125 + push @new_commands, $c if $count{$c} != 2; 3.126 + } 3.127 + 3.128 + 3.129 + my $new_commands_section; 3.130 + if (@new_commands){ 3.131 + my $hint; 3.132 + for my $c (reverse sort { $CommandsFDistribution{$a} <=> $CommandsFDistribution{$b} } @new_commands) { 3.133 + $hint = make_comment($c); 3.134 + my ($command, $hint) = $hint =~ m/(.*?) \s*- \s*(.*)/; 3.135 + $new_commands_section .= "<tr><td>$command</td><td>$hint</td></tr>" if $hint; 3.136 + } 3.137 + } 3.138 + return $new_commands_section; 3.139 +} 3.140 3.141 3.142 ############# 3.143 @@ -796,7 +848,7 @@ 3.144 LastCommand => "Время последней команды журнала", 3.145 TotalCommands => "Количество командных строк в журнале", 3.146 ErrorsPercentage => "Процент команд с ненулевым кодом завершения, %", 3.147 - MistypesPercentage => "Процент синтаксически неверное набранных команд, %", 3.148 + MistypesPercentage => "Процент синтаксически неверно набранных команд, %", 3.149 TotalTime => "Суммарное время работы с терминалом <sup><font size='-2'>*</font></sup>, час", 3.150 CommandsPerTime => "Количество командных строк в единицу времени, команда/мин", 3.151 CommandsFrequency => "Частота использования команд", 3.152 @@ -914,6 +966,21 @@ 3.153 должна быть указана программа script. 3.154 </p></li> 3.155 <li><p> 3.156 + Команды, при наборе которых были допущены синтаксические ошибки, 3.157 + выводятся перечёркнутым текстом: 3.158 +<table> 3.159 +<tr class='command'> 3.160 +<td class='script'> 3.161 +<pre class='mistyped_cline'> 3.162 +\$ l s-l</pre> 3.163 +<pre class='mistyped_output'>bash: l: command not found 3.164 +</pre> 3.165 +</td> 3.166 +</tr> 3.167 +</table> 3.168 +<br/> 3.169 + </p></li> 3.170 + <li><p> 3.171 Если код завершения команды равен нулю, 3.172 команда была выполнена без ошибок. 3.173 Команды, код завершения которых отличен от нуля, выделяются цветом. 3.174 @@ -921,12 +988,14 @@ 3.175 <tr class='command'> 3.176 <td class='script'> 3.177 <pre class='wrong_cline'> 3.178 -\$ l s-l</pre> 3.179 -<pre class='wrong_output'>bash: l: command not found 3.180 +\$ test 5 -lt 4</pre> 3.181 </pre> 3.182 </td> 3.183 </tr> 3.184 </table> 3.185 + Обратите внимание на то, что код завершения команды может быть отличен от нуля 3.186 + не только в тех случаях, когда команда была выполнена с ошибкой. 3.187 + Многие команды используют код завершения, например, для того чтобы показать результаты проверки 3.188 <br/> 3.189 </p></li> 3.190 <li><p> 3.191 @@ -1003,6 +1072,22 @@ 3.192 Для того чтобы получить краткую справочную информацию о команде, 3.193 нужно подвести к ней мышь. Во всплывающей подсказке появится краткое 3.194 описание команды. 3.195 + </p> 3.196 + <p> 3.197 + Если справочная информация о команде есть, 3.198 + команда выделяется голубым фоном, например: <span class="with_hint" title="главный текстовый редактор Unix">vi</span>. 3.199 + Если справочная информация отсутствует, 3.200 + команда выделяется розовым фоном, например: <span class="without_hint">notepad.exe</span>. 3.201 + Справочная информация может отсутствовать в том случае, 3.202 + если (1) команда введена неверно; (2) если распознавание команды LiLaLo выполнено неверно; 3.203 + (3) если информация о команде неизвестна LiLaLo. 3.204 + Последнее возможно для редких команд. 3.205 + </p></li> 3.206 + <li><p> 3.207 + Большие, в особенности многострочные, всплывающие подсказки лучше 3.208 + всего показываются браузерами KDE Konqueror, Apple Safari и Microsoft Internet Explorer. 3.209 + В браузерах Mozilla и Firefox они отображаются не полностью, 3.210 + а вместо перевода строки выводится специальный символ. 3.211 </p></li> 3.212 <li><p> 3.213 Время ввода команды, показанное в журнале, соответствует времени
4.1 --- a/l3scripts Wed Dec 28 01:01:00 2005 +0200 4.2 +++ b/l3scripts Wed Dec 28 18:44:42 2005 +0200 4.3 @@ -88,7 +88,7 @@ 4.4 4.5 высылаю вам журналы лабораторных работ по курсу $course, 4.6 который проходил начиная с $date в УЦ Сетевые Технологии (Киев). 4.7 -Файл с архивом прикреплен к письму. 4.8 +Файл с архивом прикреплён к письму. 4.9 4.10 Пишите, если у вас будут любые замечания/советы/вопросы 4.11 по методическому пособию или системе ведения журналов.