diff --git a/xCAT-server/lib/perl/xCAT/CmdLog.pm b/xCAT-server/lib/perl/xCAT/CmdLog.pm index 34168aa39..b7481ad23 100644 --- a/xCAT-server/lib/perl/xCAT/CmdLog.pm +++ b/xCAT-server/lib/perl/xCAT/CmdLog.pm @@ -7,6 +7,34 @@ use warnings; use xCAT::xcatd; +sub new { + my ($class) = @_; + return bless { + buffer => '', + sensitive => 0, + }, $class; +} + +sub start_response { + my ($self, $req, $req_redacted) = @_; + $self->{sensitive} = response_is_sensitive($req, $req_redacted); + return; +} + +sub collect { + my ($self, $response, $local_server) = @_; + $self->{buffer} .= format_response($response, $local_server); + return 0; +} + +sub finalize { + my ($self) = @_; + my $response = finalize_response($self->{buffer}, $self->{sensitive}); + $self->{buffer} = ''; + $self->{sensitive} = 0; + return $response; +} + sub response_is_sensitive { my ($req, $req_redacted) = @_; return 1 if defined $req->{command}->[0] diff --git a/xCAT-server/sbin/xcatd b/xCAT-server/sbin/xcatd index 488fb49a6..b8487f1b5 100755 --- a/xCAT-server/sbin/xcatd +++ b/xCAT-server/sbin/xcatd @@ -225,8 +225,7 @@ if ($tmp) { } my $cmdlog_alllog = "====================================================\n"; my $cmdlog_starttime=undef; -my $cmdlog_response_buffer = ""; -my $cmdlog_response_sensitive = 0; +my $cmdlog_response = xCAT::CmdLog->new(); # ----used for command log end--------- my $enable_perf = $sitetab->getAttribs({'key'=>'enableperf'},'value'); @@ -2893,7 +2892,7 @@ sub service_connection { $cmdlog_request = xCAT::xcatd->redact_password($cmdlog_request); $cmdlog_req_redacted = 1 if $cmdlog_request ne $cmdlog_before_redact; $cmdlog_alllog .= $cmdlog_request . "\n[Response]\n"; - $cmdlog_response_sensitive = cmdlog_response_is_sensitive($req, $cmdlog_req_redacted); + $cmdlog_response->start_response($req, $cmdlog_req_redacted); # ----used for command log end---------- @@ -3401,34 +3400,21 @@ sub disable_callingtrace { =head3 cmdlog_collectlog - Used by recording command output feature. - collecting each output for one specific command - The most part of this subroutine logic comes from handle_response subroutine in Client.pm + Collect one response fragment for the current command. + Response formatting and buffering are handled by xCAT::CmdLog. Returns: 0 -> successful - 1 -> failed =cut # -------------------------------------------------------------------------------- sub cmdlog_collectlog() { my $response = shift; - $cmdlog_response_buffer .= xCAT::CmdLog::format_response($response, $MYXCATSERVER); - return 0; -} - -sub cmdlog_response_is_sensitive { - my ($req, $req_redacted) = @_; - return xCAT::CmdLog::response_is_sensitive($req, $req_redacted); + return $cmdlog_response->collect($response, $MYXCATSERVER); } sub cmdlog_finalize_response { - $cmdlog_alllog .= xCAT::CmdLog::finalize_response( - $cmdlog_response_buffer, - $cmdlog_response_sensitive, - ); - $cmdlog_response_buffer = ""; - $cmdlog_response_sensitive = 0; + $cmdlog_alllog .= $cmdlog_response->finalize(); } # --------------------------------------------------------------------------------