lilalo

changeset 30:f5f07049bd4f

l3-agent:
Исправлен баг с инициализацией session_id

l3-cgi:
* Добавлена поддержка index-страницы.
При обращении на /cgi-bin/l3/index показывается таблица
с ссылками на журналы всех тренингов
В самом журнале корректно показывается информация
о курсе.

* Поскольку термин "class" перегружен, вместо него теперь
используется термин "training".
В дальнейшем такая замена произойдёт во всём коде.

* Теперь l3-cgi использует конфигурационный модуль l3config.pm
Загрузка выполняется с помощью require на этапе исполнения

l3config.pm:
Перенесены конфигурационные параметры lm.
ОСТОРОЖНО! Сам lm ПОКА ЧТО не использует l3config.pm для конфигурирования.
author devi
date Tue Nov 08 12:16:20 2005 +0200 (2005-11-08)
parents b3f5f5560802
children 196c82b6e538
files l3-agent l3-cgi l3config.pm
line diff
     1.1 --- a/l3-agent	Mon Nov 07 13:28:15 2005 +0200
     1.2 +++ b/l3-agent	Tue Nov 08 12:16:20 2005 +0200
     1.3 @@ -249,7 +249,7 @@
     1.4  		my $local_session_id;
     1.5  		# Начальное значение идентификатора текущего сеанса определяем из имени скрипта
     1.6  		# Впоследствии оно может быть уточнено
     1.7 -		$file =~ /.*\/(.*)\.script$/;
     1.8 +		$file =~ m@.*/([^/]*)\.script$@;
     1.9  		$local_session_id = $1;
    1.10  
    1.11  		#Если файл только что появился, 
    1.12 @@ -792,7 +792,7 @@
    1.13  
    1.14  		# Начинаем вывод команды
    1.15  		print OUT "<command>\n";
    1.16 -		print OUT "<local_session_id>",$cl->{session_id},"</local_session_id>\n";
    1.17 +		print OUT "<local_session_id>",$cl->{local_session_id},"</local_session_id>\n";
    1.18  		print OUT "<time>",$cl->{time},"</time>\n";
    1.19  		print OUT "<raw_start>",$cl->{raw_start},"</raw_start>\n";
    1.20  		print OUT "<raw_output_start>",$cl->{raw_output_start},"</raw_output_start>\n";
     2.1 --- a/l3-cgi	Mon Nov 07 13:28:15 2005 +0200
     2.2 +++ b/l3-cgi	Tue Nov 08 12:16:20 2005 +0200
     2.3 @@ -2,29 +2,98 @@
     2.4  
     2.5  use strict;
     2.6  use CGI qw(:standard);
     2.7 +use XML::Simple;
     2.8 +
     2.9 +BEGIN {
    2.10 +	chdir("/home/devi/cvs/lilalo");
    2.11 +	require l3config;
    2.12 +};
    2.13  
    2.14  my $value = param('PARAM');
    2.15  
    2.16 +my %Trainings;
    2.17 +my $XMLTraining;
    2.18 +my %Machines;
    2.19 +
    2.20 +sub load_training
    2.21 +{
    2.22 +        my $classfile = 
    2.23 +	$_[0]||
    2.24 +        $l3config::Config{"classfile"} || 
    2.25 +        $l3config::Config{"path_classes"}."/".$l3config::Config{"class"}.$l3config::Config{"class_suffix"};
    2.26 +
    2.27 +        my $XMLTraining = XMLin($classfile , ForceArray => [ 'student' ] )  
    2.28 +                or die "Can't open file of the class ",$classfile,"\n";
    2.29 +
    2.30 +        for my $student (@{$XMLTraining->{"student"}}) {
    2.31 +		$XMLTraining->{host}->{$student->{"host"}}=$student;
    2.32 +        }
    2.33 +	return $XMLTraining;
    2.34 +}
    2.35 +
    2.36  print header(
    2.37  		-charset => "utf-8", 
    2.38  		);
    2.39 -chdir("/home/devi/cvs/lilalo");
    2.40  
    2.41 -# Вызов производится по URL
    2.42 -my ($skip, $course, $host, $user) = split /\//,$ENV{PATH_INFO},4;
    2.43  
    2.44 -my @args=(
    2.45 -	"--output" 		=>	"-",
    2.46 -	"--show_comments" 	=>	"no",
    2.47 -	"--course-center"	=>	"\"Сетевые Технологии\"",
    2.48 -	"--course-trainer"	=>	"\"Игорь Чубин\"",
    2.49 -	"--course-student"	=>	"\"$user\@$host\"",
    2.50 -	"--course-code"		=>	"\"$course\"",
    2.51 -);
    2.52 +if ($ENV{PATH_INFO} eq "/index") {
    2.53 +	# Показываем индекс курсов
    2.54 +	my @training_files = glob($l3config::Config{"path_classes"}."/*".$l3config::Config{"class_suffix"});
    2.55 +	if (@training_files) {
    2.56 +		for my $training_file (@training_files) {
    2.57 +			my $training = load_training($training_file);
    2.58 +			$Trainings{$training->{"date"}}=$training;
    2.59 +		}
    2.60 +		print "<table>\n";
    2.61 +		for my $tdate (reverse sort keys %Trainings) {
    2.62 +			my $t = $Trainings{$tdate};
    2.63 +			print "<tr>";
    2.64 +			print "<td>".$t->{date}."</td>";
    2.65 +			print "<td>".$t->{course}."</td>";
    2.66 +			print "</tr>\n";
    2.67 +			print "<tr>";
    2.68 +			print "<td/>";
    2.69 +			print "<td><pre>";
    2.70 +			for my $host (sort keys %{$t->{host}}) {
    2.71 +				my $h = $t->{host}->{$host};
    2.72 +				print "$host";
    2.73 +				print " ".$h->{firstname}." ".$h->{surname}." ";
    2.74 +				print "<a href='/cgi-bin/l3/".$tdate."/".$host."/root'>root</a> ";
    2.75 +				print "<a href='/cgi-bin/l3/".$tdate."/".$host."/".$h->{user}."'>".$h->{user}."</a> ";
    2.76 +				print "\n";
    2.77 +			}
    2.78 +			print "</pre><td>";
    2.79 +			print "</tr>\n";
    2.80 +		}
    2.81 +		print "</table>\n";
    2.82 +	}
    2.83 +	else {
    2.84 +		print "No training-files found<br/>\n";
    2.85 +		print "Template to load files: ".$l3config::Config{"path_classes"}."*".$l3config::Config{"class_suffix"}."\n"
    2.86 +	}
    2.87 +}
    2.88 +else {
    2.89 +	# Вызов производится по URL
    2.90 +	my ($skip, $course, $host, $user) = split /\//,$ENV{PATH_INFO},4;
    2.91  
    2.92 -open (FRONTEND, "./l3-frontend ".join(" ",@args)." |");
    2.93 -while (<FRONTEND>) {
    2.94 -	print;
    2.95 +	$l3config::Config{"class"}=$course;
    2.96 +	$XMLTraining = load_training;
    2.97 +
    2.98 +	my @args=(
    2.99 +		"--output" 		=>	"-",
   2.100 +		"--show_comments" 	=>	"no",
   2.101 +		"--course-center"	=>	$XMLTraining->{center},
   2.102 +		"--course-trainer"	=>	$XMLTraining->{instructor}->{firstname}." ".$XMLTraining->{instructor}->{surname},
   2.103 +		"--course-student"	=>	$XMLTraining->{host}->{$host}->{firstname}." ".$XMLTraining->{host}->{$host}->{surname},
   2.104 +		"--course-code"		=>	$XMLTraining->{course},
   2.105 +		"--course-date"		=>	$XMLTraining->{date},
   2.106 +		"--backend_datafile"	=>	"/var/lilalo/lablogs-xml/$course/$host/$user.xml",
   2.107 +	);
   2.108 +
   2.109 +	open (FRONTEND, "./l3-frontend ".join(" ",map("\"$_\"",@args))." |");
   2.110 +	while (<FRONTEND>) {
   2.111 +		print;
   2.112 +	}
   2.113 +	close(FRONTEND);
   2.114  }
   2.115 -close(FRONTEND);
   2.116  
     3.1 --- a/l3config.pm	Mon Nov 07 13:28:15 2005 +0200
     3.2 +++ b/l3config.pm	Tue Nov 08 12:16:20 2005 +0200
     3.3 @@ -1,6 +1,7 @@
     3.4  package l3config;
     3.5  
     3.6  use Exporter;
     3.7 +use vars qw(@ISA @EXPORT $VERSION);
     3.8  use Getopt::Long;
     3.9  
    3.10  @ISA = ('Exporter');
    3.11 @@ -82,6 +83,37 @@
    3.12  		"course-center" => "", 
    3.13  		"course-trainer" => "", 
    3.14  		"course-student" => "", 
    3.15 +
    3.16 +
    3.17 +		#lm
    3.18 +		"show_host" 	=> "no",
    3.19 +
    3.20 +		# Вспомогательные программы
    3.21 +		#"l3-report"	=> "./lm-report",
    3.22 +		"l3-report"	=> "./l3-report",
    3.23 +
    3.24 +		# Каталоги
    3.25 +		"path_lilalo" => "/var/lilalo/",
    3.26 +		"path_classes"	=> "/var/lilalo/classes/",
    3.27 +		"path_lablogs"	=> "/var/lilalo/lablogs/",
    3.28 +		"courses_path"	=> "/var/lilalo/courses/",
    3.29 +		"outpath"	=> "/var/lilalo/out/",
    3.30 +		"path_web"	=> "/var/www/l3",		# Путь к web-отчётам
    3.31 +		"path_share"	=> "./share/",		# Путь к web-отчётам
    3.32 +
    3.33 +		# Файлы
    3.34 +		"runfile"	=> "lm.run", 
    3.35 +		"logfile"	=> "lm.log", 
    3.36 +
    3.37 +		"class" 	=> "class", 				# Имя файла класса
    3.38 +		"class_suffix" 	=> ".xml", 				# Cуффикс файла класса
    3.39 +		"classfile"	=> "",
    3.40 +
    3.41 +		"sshkey"	=> "$ENV{HOME}/.ssh/id_dsa.pub",
    3.42 +		"lmssh"		=> "./lm-ssh",
    3.43 +		"lminstall"	=> "./lm-install",
    3.44 +		"ssh_user"	=> "root",
    3.45 +		
    3.46  		);
    3.47  
    3.48  sub read_config_file