# HG changeset patch
# User devi
# Date 1135788282 -7200
# Node ID 187b6636a3be6bfcccc32f803f2fba8123138746
# Parent 43aeb3036aaa0a3f35edad44a800683cc8028db1
l3-agent:
Исправлен микробаг с uid
Раньше он не отправлялся в поток
l3-cgi:
При генерировании не CGI-версии
в таблице отсутствуют поля "инструктор" и "все"
На текущий момент они указывали в никуда,
поэтому я отключил их
l3-frontend:
Выводятся новые команды в начале каждого дня.
Команды сортируются по убыванию частоты использования.
l3scripts:
в письмо в одном месте е заменил на ё
diff -r 43aeb3036aaa -r 187b6636a3be l3-agent
--- a/l3-agent Wed Dec 28 01:01:00 2005 +0200
+++ b/l3-agent Wed Dec 28 18:44:42 2005 +0200
@@ -813,6 +813,7 @@
print OUT " $_\n";
my $h = $t->{host}->{$host};
@@ -148,7 +152,7 @@
$print .= " \n";
@@ -157,8 +161,7 @@
# Если мы чувствуем, что нас вызывают для генерения индексного файла,
# нам нужно создать и файлы, на которые он указывает
# Лучше было бы это сделать хотя бы через вызов функций
- my $path = $to_file;
- $path = "" unless $path =~ s@/[^/]*$@@;
+# Такой же хак чуть ниже
mkdir("$path/$host");
system("$0 --cgi2file $path/$prefix$host/root$suffix ".
"--cgi_path_info ".$training."/".$host."/root ".
@@ -166,15 +169,27 @@
system("$0 --cgi2file $path/$prefix$host/".$h->{user}."$suffix ".
"--cgi_path_info ".$training."/".$host."/".$h->{user}." ".
"--frontend_css ../$l3config::Config{frontend_css}");
+ # system("$0 --cgi2file $path/$prefix$host$suffix ".
+ # "--cgi_path_info ".$training."/".$host." ".
+ # "--frontend_css ../$l3config::Config{frontend_css}");
}
}
- $print .= "$host ";
$print .= "root ";
$print .= "".$h->{user}." ";
- $print .= "все ";
+ $print .= "все " if not $is_not_cgi;
$print .= "\n";
$print .= "\n";
- $print .= " "."Инструктор"." ";
- $print .= "from linux.nt ";
- $print .= "";
- $print .= " ";
- $print .= " все ";
+# Такой же хак был чуть выше
+ if ($is_not_cgi) {
+# $print .= "все ";
+# system("$0 --cgi2file $path/$prefix$host$suffix"
+# . " --cgi_path_info ".$training."?login_from=192.168.15.254".$host
+# . " --frontend_css ../$l3config::Config{frontend_css}");
+ }
+ else {
+ $print .= "\n";
+ $print .= " \n";
$print .= "\n";
$print .= "\n";
diff -r 43aeb3036aaa -r 187b6636a3be l3-frontend
--- a/l3-frontend Wed Dec 28 01:01:00 2005 +0200
+++ b/l3-frontend Wed Dec 28 18:44:42 2005 +0200
@@ -26,6 +26,7 @@
my %mywi_cache_for; # Кэш для экономии обращений к mywi
sub make_comment;
+sub make_new_commands_table;
sub load_command_lines_from_xml;
sub load_sessions_from_xml;
sub sort_command_lines;
@@ -301,9 +302,10 @@
$$cl->{"class"} = $$cl->{"err"} eq 130 ? "interrupted"
: $$cl->{"err"} eq 127 ? "mistyped"
: $$cl->{"err"} ? "wrong"
- : "";
+ : "normal";
- if (!$$cl->{"euid"}) {
+ if ($$cl->{"cline"} =~ /[^|`]\s*sudo/
+ || $$cl->{"uid"} eq 0) {
$$cl->{"class"}.="_root";
}
@@ -389,6 +391,8 @@
my $current_command=0;
+ my @known_commands;
+
my %filter;
if ($Config{filter}) {
@@ -460,9 +464,9 @@
$note = join ("\n", map (""."Инструктор"." ";
+ $print .= "from linux.nt ";
+ $print .= "";
+ $print .= " ";
+ $print .= " все ";
+ }
$print .= "";
- $result .= " ";
+ $this_day_result .= "".$cl->{note_title}."
" if $cl->{note_title};
- $result .= "".$note." ";
if ($cl->{note_title}) {
push @{$toc[@toc]},"".$cl->{note_title}."";
@@ -508,11 +512,6 @@
$hour = "0".$hour if $hour =~ /^.$/;
$sec = "0".$sec if $sec =~ /^.$/;
- #my @new_commands;
- #my @new_files;
- #@new_commands = split (/\s+/, $cl->{"new_commands"}) if defined $cl->{"new_commands"};
- #@new_files = split (/\s+/, $cl->{"new_files"}) if defined $cl->{"new_files"};
-
$class=$cl->{"class"};
$Stat{ErrorCommands}++ if $class =~ /wrong/;
$Stat{MistypedCommands}++ if $class =~ /mistype/;
@@ -521,8 +520,25 @@
# DAY CHANGE
if ( $last_day ne $day) {
if ($last_day) {
+
+# Вычисляем разность множеств.
+# Что-то вроде этого, если бы так можно было писать:
+# @new_commands = keys %CommandsFDistribution - @known_commands;
+
+
$result .= ""
+ . " ".$cl->{note_title}."
" if $cl->{note_title}
+ . "".$note."".$Day_Name[$last_wday]."
";
- #$result .= "Новые команды
";
+
+ my $new_commands_section = make_new_commands_table(\@known_commands);
+ @known_commands = keys %CommandsFDistribution;
+
+ if ($new_commands_section) {
+ $result .= "Новые команды
"
+ . ""
+ . "
"
+ }
+
$result .= " "
+ . $new_commands_section
+ . "Команда Описание \n";
$result .= $this_day_result;
$result .= "
";
@@ -614,17 +630,53 @@
$this_day_result .= "\n";
$this_day_result .= "\n";
}
+ last: {
+ my $new_commands_section = make_new_commands_table(\@known_commands);
+ @known_commands = keys %CommandsFDistribution;
- $result .= "".$Day_Name[$last_wday]."
";
- $result .= "\n";
- $result .= $this_day_result;
- $result .= "
";
+ $result .= "".$Day_Name[$last_wday]."
";
+ if ($new_commands_section) {
+ $result .= "Новые команды
"
+ . ""
+ . "
"
+ }
+
+ $result .= " "
+ . $new_commands_section
+ . "Команда Описание \n";
+ $result .= $this_day_result;
+ $result .= "
";
+ }
return ($result, collapse_list (\@toc));
}
+sub make_new_commands_table
+{
+ my @known_commands = @{$_[0]};
+ my %count;
+ my @new_commands = ();
+ for my $c (keys %CommandsFDistribution, @known_commands) {
+ $count{$c}++
+ }
+ for my $c (keys %CommandsFDistribution) {
+ push @new_commands, $c if $count{$c} != 2;
+ }
+
+
+ my $new_commands_section;
+ if (@new_commands){
+ my $hint;
+ for my $c (reverse sort { $CommandsFDistribution{$a} <=> $CommandsFDistribution{$b} } @new_commands) {
+ $hint = make_comment($c);
+ my ($command, $hint) = $hint =~ m/(.*?) \s*- \s*(.*)/;
+ $new_commands_section .= " " if $hint;
+ }
+ }
+ return $new_commands_section;
+}
#############
@@ -796,7 +848,7 @@
LastCommand => "Время последней команды журнала",
TotalCommands => "Количество командных строк в журнале",
ErrorsPercentage => "Процент команд с ненулевым кодом завершения, %",
- MistypesPercentage => "Процент синтаксически неверное набранных команд, %",
+ MistypesPercentage => "Процент синтаксически неверно набранных команд, %",
TotalTime => "Суммарное время работы с терминалом *, час",
CommandsPerTime => "Количество командных строк в единицу времени, команда/мин",
CommandsFrequency => "Частота использования команд",
@@ -914,6 +966,21 @@
должна быть указана программа script.
$command $hint
+ Команды, при наборе которых были допущены синтаксические ошибки, + выводятся перечёркнутым текстом: +
++\$ l s-l+ bash: l: command not found ++ |
+
Если код завершения команды равен нулю, команда была выполнена без ошибок. Команды, код завершения которых отличен от нуля, выделяются цветом. @@ -921,12 +988,14 @@
-\$ l s-l-
bash: l: command not found +\$ test 5 -lt 4
@@ -1003,6 +1072,22 @@ Для того чтобы получить краткую справочную информацию о команде, нужно подвести к ней мышь. Во всплывающей подсказке появится краткое описание команды. +
++ Если справочная информация о команде есть, + команда выделяется голубым фоном, например: vi. + Если справочная информация отсутствует, + команда выделяется розовым фоном, например: notepad.exe. + Справочная информация может отсутствовать в том случае, + если (1) команда введена неверно; (2) если распознавание команды LiLaLo выполнено неверно; + (3) если информация о команде неизвестна LiLaLo. + Последнее возможно для редких команд. +
+ Большие, в особенности многострочные, всплывающие подсказки лучше + всего показываются браузерами KDE Konqueror, Apple Safari и Microsoft Internet Explorer. + В браузерах Mozilla и Firefox они отображаются не полностью, + а вместо перевода строки выводится специальный символ.
Время ввода команды, показанное в журнале, соответствует времени diff -r 43aeb3036aaa -r 187b6636a3be l3scripts --- a/l3scripts Wed Dec 28 01:01:00 2005 +0200 +++ b/l3scripts Wed Dec 28 18:44:42 2005 +0200 @@ -88,7 +88,7 @@ высылаю вам журналы лабораторных работ по курсу $course, который проходил начиная с $date в УЦ Сетевые Технологии (Киев). -Файл с архивом прикреплен к письму. +Файл с архивом прикреплён к письму. Пишите, если у вас будут любые замечания/советы/вопросы по методическому пособию или системе ведения журналов.