2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-04 20:17:55 +00:00

refactor(xcatd): keep command response state in CmdLog

Own collection, sensitivity, finalization, and reset as one request-scoped state object so xcatd only forwards callbacks and appends the finalized text.
This commit is contained in:
Vinícius Ferrão
2026-08-26 19:41:19 -03:00
parent 5d9d7403b7
commit b7aa8eaa0f
2 changed files with 34 additions and 20 deletions
+28
View File
@@ -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]
+6 -20
View File
@@ -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();
}
# --------------------------------------------------------------------------------