# HG changeset patch # User devi # Date 1131444980 -7200 # Node ID f5f07049bd4f4bd923d7dd7142dd152fcd065e6a # Parent b3f5f5560802e685c070ef4b68d2e1a132205a15 l3-agent: Исправлен баг с инициализацией session_id l3-cgi: * Добавлена поддержка index-страницы. При обращении на /cgi-bin/l3/index показывается таблица с ссылками на журналы всех тренингов В самом журнале корректно показывается информация о курсе. * Поскольку термин "class" перегружен, вместо него теперь используется термин "training". В дальнейшем такая замена произойдёт во всём коде. * Теперь l3-cgi использует конфигурационный модуль l3config.pm Загрузка выполняется с помощью require на этапе исполнения l3config.pm: Перенесены конфигурационные параметры lm. ОСТОРОЖНО! Сам lm ПОКА ЧТО не использует l3config.pm для конфигурирования. diff -r b3f5f5560802 -r f5f07049bd4f l3-agent --- a/l3-agent Mon Nov 07 13:28:15 2005 +0200 +++ b/l3-agent Tue Nov 08 12:16:20 2005 +0200 @@ -249,7 +249,7 @@ my $local_session_id; # Начальное значение идентификатора текущего сеанса определяем из имени скрипта # Впоследствии оно может быть уточнено - $file =~ /.*\/(.*)\.script$/; + $file =~ m@.*/([^/]*)\.script$@; $local_session_id = $1; #Если файл только что появился, @@ -792,7 +792,7 @@ # Начинаем вывод команды print OUT "\n"; - print OUT "",$cl->{session_id},"\n"; + print OUT "",$cl->{local_session_id},"\n"; print OUT "\n"; print OUT "",$cl->{raw_start},"\n"; print OUT "",$cl->{raw_output_start},"\n"; diff -r b3f5f5560802 -r f5f07049bd4f l3-cgi --- a/l3-cgi Mon Nov 07 13:28:15 2005 +0200 +++ b/l3-cgi Tue Nov 08 12:16:20 2005 +0200 @@ -2,29 +2,98 @@ use strict; use CGI qw(:standard); +use XML::Simple; + +BEGIN { + chdir("/home/devi/cvs/lilalo"); + require l3config; +}; my $value = param('PARAM'); +my %Trainings; +my $XMLTraining; +my %Machines; + +sub load_training +{ + my $classfile = + $_[0]|| + $l3config::Config{"classfile"} || + $l3config::Config{"path_classes"}."/".$l3config::Config{"class"}.$l3config::Config{"class_suffix"}; + + my $XMLTraining = XMLin($classfile , ForceArray => [ 'student' ] ) + or die "Can't open file of the class ",$classfile,"\n"; + + for my $student (@{$XMLTraining->{"student"}}) { + $XMLTraining->{host}->{$student->{"host"}}=$student; + } + return $XMLTraining; +} + print header( -charset => "utf-8", ); -chdir("/home/devi/cvs/lilalo"); -# Вызов производится по URL -my ($skip, $course, $host, $user) = split /\//,$ENV{PATH_INFO},4; -my @args=( - "--output" => "-", - "--show_comments" => "no", - "--course-center" => "\"Сетевые Технологии\"", - "--course-trainer" => "\"Игорь Чубин\"", - "--course-student" => "\"$user\@$host\"", - "--course-code" => "\"$course\"", -); +if ($ENV{PATH_INFO} eq "/index") { + # Показываем индекс курсов + my @training_files = glob($l3config::Config{"path_classes"}."/*".$l3config::Config{"class_suffix"}); + if (@training_files) { + for my $training_file (@training_files) { + my $training = load_training($training_file); + $Trainings{$training->{"date"}}=$training; + } + print "\n"; + for my $tdate (reverse sort keys %Trainings) { + my $t = $Trainings{$tdate}; + print ""; + print ""; + print ""; + print "\n"; + print ""; + print "\n"; + } + print "
".$t->{date}."".$t->{course}."
"; + print "
";
+			for my $host (sort keys %{$t->{host}}) {
+				my $h = $t->{host}->{$host};
+				print "$host";
+				print " ".$h->{firstname}." ".$h->{surname}." ";
+				print "root ";
+				print "".$h->{user}." ";
+				print "\n";
+			}
+			print "
"; + print "
\n"; + } + else { + print "No training-files found
\n"; + print "Template to load files: ".$l3config::Config{"path_classes"}."*".$l3config::Config{"class_suffix"}."\n" + } +} +else { + # Вызов производится по URL + my ($skip, $course, $host, $user) = split /\//,$ENV{PATH_INFO},4; -open (FRONTEND, "./l3-frontend ".join(" ",@args)." |"); -while () { - print; + $l3config::Config{"class"}=$course; + $XMLTraining = load_training; + + my @args=( + "--output" => "-", + "--show_comments" => "no", + "--course-center" => $XMLTraining->{center}, + "--course-trainer" => $XMLTraining->{instructor}->{firstname}." ".$XMLTraining->{instructor}->{surname}, + "--course-student" => $XMLTraining->{host}->{$host}->{firstname}." ".$XMLTraining->{host}->{$host}->{surname}, + "--course-code" => $XMLTraining->{course}, + "--course-date" => $XMLTraining->{date}, + "--backend_datafile" => "/var/lilalo/lablogs-xml/$course/$host/$user.xml", + ); + + open (FRONTEND, "./l3-frontend ".join(" ",map("\"$_\"",@args))." |"); + while () { + print; + } + close(FRONTEND); } -close(FRONTEND); diff -r b3f5f5560802 -r f5f07049bd4f l3config.pm --- a/l3config.pm Mon Nov 07 13:28:15 2005 +0200 +++ b/l3config.pm Tue Nov 08 12:16:20 2005 +0200 @@ -1,6 +1,7 @@ package l3config; use Exporter; +use vars qw(@ISA @EXPORT $VERSION); use Getopt::Long; @ISA = ('Exporter'); @@ -82,6 +83,37 @@ "course-center" => "", "course-trainer" => "", "course-student" => "", + + + #lm + "show_host" => "no", + + # Вспомогательные программы + #"l3-report" => "./lm-report", + "l3-report" => "./l3-report", + + # Каталоги + "path_lilalo" => "/var/lilalo/", + "path_classes" => "/var/lilalo/classes/", + "path_lablogs" => "/var/lilalo/lablogs/", + "courses_path" => "/var/lilalo/courses/", + "outpath" => "/var/lilalo/out/", + "path_web" => "/var/www/l3", # Путь к web-отчётам + "path_share" => "./share/", # Путь к web-отчётам + + # Файлы + "runfile" => "lm.run", + "logfile" => "lm.log", + + "class" => "class", # Имя файла класса + "class_suffix" => ".xml", # Cуффикс файла класса + "classfile" => "", + + "sshkey" => "$ENV{HOME}/.ssh/id_dsa.pub", + "lmssh" => "./lm-ssh", + "lminstall" => "./lm-install", + "ssh_user" => "root", + ); sub read_config_file