X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=gosa-si%2Fserver%2Fevents%2FclMessages.pm;h=a6fad7e3dd9f17268a07ebb7d4cd69a2803a70ff;hb=9ab60891c47d98a282baa89c21fe830bcb63c666;hp=5cc1a4ea002c4c145d60120bc1ee71b2fdc95aa7;hpb=f25296aa4d1b68410a0c7c3d260c974c24ae92a5;p=gosa.git diff --git a/gosa-si/server/events/clMessages.pm b/gosa-si/server/events/clMessages.pm index 5cc1a4ea0..a6fad7e3d 100644 --- a/gosa-si/server/events/clMessages.pm +++ b/gosa-si/server/events/clMessages.pm @@ -55,7 +55,7 @@ sub read_configfile { my ($cfg_file, %cfg_defaults) = @_; my $cfg; - if( defined( $cfg_file) && ( length($cfg_file) > 0 )) { + if( defined( $cfg_file) && ( (-s $cfg_file) > 0 )) { if( -r $cfg_file ) { $cfg = Config::IniFiles->new( -file => $cfg_file ); } else { @@ -95,7 +95,7 @@ sub save_fai_log { my $time = &get_time; $time = substr($time, 0, 8)."_".substr($time, 8, 6); - $client_fai_log_dir = File::Spec->catfile( $client_fai_log_dir, "install-$time" ); + $client_fai_log_dir = File::Spec->catfile( $client_fai_log_dir, "install_$time" ); mkdir($client_fai_log_dir, 0755); my @all_logs = split(/log_file:/, $all_logs); @@ -134,27 +134,16 @@ sub LOGIN { return; } -# TODO umstellen wie bei LOGIN + sub LOGOUT { my ($msg, $msg_hash, $session_id) = @_; my $header = @{$msg_hash->{'header'}}[0]; my $source = @{$msg_hash->{'source'}}[0]; my $login = @{$msg_hash->{$header}}[0]; - - my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$source'"; - my $res = $main::known_clients_db->select_dbentry($sql_statement); - if( 1 != keys(%$res) ) { - &main::daemon_log("DEBUG: clMessages.pm: LOGOUT: no or more hits found in known_clients_db for host '$source'"); - return; - } - - my $act_login = $res->{'1'}->{'login'}; - $act_login =~ s/$login,?//gi; - - if( $act_login eq "" ){ $act_login = "nobody"; } - - $sql_statement = "UPDATE known_clients SET login='$act_login' WHERE hostname='$source'"; - $res = $main::known_clients_db->update_dbentry($sql_statement); + + my $sql_statement = "DELETE FROM $main::login_users_tn WHERE (client='$source' AND user='$login')"; + my $res = $main::login_users_db->del_dbentry($sql_statement); + &main::daemon_log("$session_id INFO: delete user '$login' at client '$source' from login_user_db", 5); return; } @@ -222,20 +211,14 @@ sub GOTOACTIVATION { my $macaddress = @{$msg_hash->{'macaddress'}}[0]; # test whether content is an empty hash or a string which is required -######### -# testing - my $content = @{$msg_hash->{$header}}[0]; + my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######## # clean up header $header =~ s/CLMSG_//g; my $sql_statement = "UPDATE $main::job_queue_tn ". - "SET status='processing', result='$header"."$content' ". + "SET status='processing', progress='goto-activation' ". "WHERE status='processing' AND macaddress LIKE '$macaddress'"; &main::daemon_log("$session_id DEBUG: $sql_statement", 7); my $res = $main::job_db->update_dbentry($sql_statement); @@ -251,17 +234,8 @@ sub PROGRESS { my $macaddress = @{$msg_hash->{'macaddress'}}[0]; # test whether content is an empty hash or a string which is required - my $content; - my $cont = @{$msg_hash->{$header}}[0]; -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing - my $content = @{$msg_hash->{$header}}[0]; + my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######## # clean up header $header =~ s/CLMSG_//g; @@ -284,16 +258,8 @@ sub FAIREBOOT { my $macaddress = @{$msg_hash->{'macaddress'}}[0]; # test whether content is an empty hash or a string which is required - my $content = @{$msg_hash->{$header}}[0]; -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### # clean up header $header =~ s/CLMSG_//g; @@ -316,16 +282,8 @@ sub TASKSKIP { my $macaddress = @{$msg_hash->{'macaddress'}}[0]; # test whether content is an empty hash or a string which is required - my $content = @{$msg_hash->{$header}}[0]; -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### # clean up header $header =~ s/CLMSG_//g; @@ -346,23 +304,15 @@ sub TASKBEGIN { my $header = @{$msg_hash->{'header'}}[0]; my $source = @{$msg_hash->{'target'}}[0]; my $macaddress = @{$msg_hash->{'macaddress'}}[0]; - my $content = @{$msg_hash->{$header}}[0]; # test whether content is an empty hash or a string which is required -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### # clean up header $header =~ s/CLMSG_//g; - # check if installation finished + # TASKBEGIN eq finish or faiend if (($content eq 'finish') || ($content eq 'faiend')){ my $sql_statement = "UPDATE $main::job_queue_tn ". "SET status='done', result='$header "."$content' ". @@ -374,14 +324,56 @@ sub TASKBEGIN { # set fai_state to localboot &main::change_fai_state('localboot', \@{$msg_hash->{'macaddress'}}, $session_id); + # other TASKBEGIN msgs } else { - my $sql_statement = "UPDATE $main::job_queue_tn ". - "SET status='processing', result='$header "."$content' ". - "WHERE status='processing' AND macaddress LIKE '$macaddress'"; - &main::daemon_log("$session_id DEBUG: $sql_statement", 7); - my $res = $main::job_db->update_dbentry($sql_statement); - &main::daemon_log("$session_id INFO: $header at '$macaddress' - '$content'", 5); - + # select processing jobs for host + my $sql_statement = "SELECT * FROM $main::job_queue_tn WHERE status='processing' AND macaddress LIKE '$macaddress'"; + &main::daemon_log("$session_id DEBUG: $sql_statement", 7); + my $res = $main::job_db->select_dbentry($sql_statement); + + # there is exactly one job entry in queue for this host + if (keys(%$res) == 1) { + &main::daemon_log("$session_id DEBUG: there is already one processing job in queue for host '$macaddress', run an update for this entry", 7); + my $sql_statement = "UPDATE $main::job_queue_tn SET result='$header $content' WHERE status='processing' AND macaddress LIKE '$macaddress'"; + my $err = $main::job_db->update_dbentry($sql_statement); + if (not defined $err) { + &main::daemon_log("$session_id ERROR: cannot update job_db entry: ".Dumper($err), 1); + } + + # there is no entry or more than one enties + } else { + # in case of more than one running jobs in queue, delete all jobs + if (keys(%$res) > 1) { + &main::daemon_log("$session_id DEBUG: there are more than one processing job in queue for host '$macaddress', ". + "delete entries", 7); + + my $sql_statement = "DELETE FROM $main::job_queue_tn WHERE status='processing' AND macaddress LIKE '$macaddress'"; + my ($err) = $main::job_db->del_dbentry($sql_statement); + if (not defined $err) { + &main::daemon_log("$session_id ERROR: can not delete multiple processing queue entries for host '$macaddress': ".Dumper($err), 1); + } + } + + # in case of no and more than one running jobs in queue, add on single job + &main::daemon_log("$session_id DEBUG: add job to queue for host '$macaddress'", 7); + my $func_dic = {table=>$main::job_queue_tn, + primkey=>['id'], + timestamp=>&get_time, + status=>'processing', + result=>"$header $content", + progress=>'none', + headertag=>'trigger_action_reinstall', + targettag=>$source, + xmlmessage=>'none', + macaddress=>$macaddress, + plain_name=>'none', + }; + my ($err, $error_str) = $main::job_db->add_dbentry($func_dic); + if ($err != 0) { + &main::daemon_log("$session_id ERROR: cannot add entry to job_db: $error_str", 1); + } + + } # -----------------------> Update hier # finish @@ -402,26 +394,27 @@ sub TASKEND { # test whether content is an empty hash or a string which is required my $content = @{$msg_hash->{$header}}[0]; -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing - my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### # clean up header $header =~ s/CLMSG_//g; - my $sql_statement = "UPDATE $main::job_queue_tn ". - "SET status='processing', result='$header "."$content' ". - "WHERE status='processing' AND macaddress LIKE '$macaddress'"; - &main::daemon_log("$session_id DEBUG: $sql_statement", 7); - my $res = $main::job_db->update_dbentry($sql_statement); - &main::daemon_log("$session_id INFO: $header at '$macaddress' - '$content'", 5); + if ($content eq "savelog 0") { + &main::daemon_log("$session_id DEBUG: got savelog from host '$source' - jub done", 7); + my $sql_statement = "DELETE FROM $main::job_queue_tn WHERE status='processing' AND macaddress LIKE '$macaddress'"; + &main::daemon_log("$session_id DEBUG: $sql_statement", 7); + my $res = $main::job_db->del_dbentry($sql_statement); + + } else { + + my $sql_statement = "UPDATE $main::job_queue_tn ". + "SET status='processing', result='$header "."$content' ". + "WHERE status='processing' AND macaddress LIKE '$macaddress'"; + &main::daemon_log("$session_id DEBUG: $sql_statement", 7); + my $res = $main::job_db->update_dbentry($sql_statement); + &main::daemon_log("$session_id INFO: $header at '$macaddress' - '$content'", 5); + } # -----------------------> Update hier # finish #
CLMSG_TASKBEGIN
@@ -443,15 +436,7 @@ sub TASKERROR { # test whether content is an empty hash or a string which is required my $content = @{$msg_hash->{$header}}[0]; -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing - my $content = @{$msg_hash->{$header}}[0]; - if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### + if(ref($content) eq "HASH") { $content = ""; } # set fai_state to localboot &main::change_fai_state('error', \@{$msg_hash->{'macaddress'}}, $session_id); @@ -483,17 +468,8 @@ sub HOOK { $header =~ s/CLMSG_//g; # test whether content is an empty hash or a string which is required - my $content = @{$msg_hash->{$header}}[0]; - -# TODO eval ändern auf if(ref($content) eq "HASH") dann ... else, dann... -######### -# testing my $content = @{$msg_hash->{$header}}[0]; if(ref($content) eq "HASH") { $content = ""; } - #eval{ if( 0 == keys(%$content) ) { $content = ""; } }; - #if( $@ ) { $content = "$content"; } -# testing -######### my $sql_statement = "UPDATE $main::job_queue_tn ". "SET status='processing', result='$header "."$content' ".