Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 7 additions & 42 deletions src/control/cmd/dmg/support.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//
// (C) Copyright 2022-2024 Intel Corporation.
// (C) Copyright 2026 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand Down Expand Up @@ -36,34 +37,6 @@ type collectLogCmd struct {
support.LogTypeSubCmd
}

// gRPC call to initiate the rsync and copy the logs to Admin (central location).
func (cmd *collectLogCmd) rsyncLog() error {
hostName, err := support.GetHostName()
if err != nil {
return err
}

req := &control.CollectLogReq{
TargetFolder: cmd.TargetFolder,
AdminNode: hostName,
LogFunction: support.RsyncLogEnum,
FileTransferExecArgs: cmd.FileTransferExecArgs,
}
cmd.Debugf("Rsync logs from servers to %s:%s ", hostName, cmd.TargetFolder)
resp, err := control.CollectLog(cmd.MustLogCtx(), cmd.ctlInvoker, req)
if err != nil && cmd.StopOnError {
return err
}
if len(resp.GetHostErrors()) > 0 {
if err := pretty.UpdateErrorSummary(resp, "rsync", &cmd.bld); err != nil {
return err
}
return resp.Errors()
}

return nil
}

// gRPC call to Archive the logs on individual servers.
func (cmd *collectLogCmd) archLogsOnServer() error {
hostName, err := support.GetHostName()
Expand Down Expand Up @@ -126,7 +99,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {

// set of support collection steps to show in progress bar
progress := support.ProgressBar{
Total: len(LogCollection) + len(DmgInfoCollection) + 1, // Extra 1 is for rsync operation.
Total: len(LogCollection) + len(DmgInfoCollection),
NoDisplay: cmd.JSONOutputEnabled(),
}

Expand Down Expand Up @@ -228,12 +201,6 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
}

params.FileTransferExecArgs = cmd.FileTransferExecArgs
// R sync the logs from servers
rsyncerr := cmd.rsyncLog()
fmt.Print(progress.Display())
if rsyncerr != nil && cmd.StopOnError {
return rsyncerr
}

// Archive the logs
if cmd.Archive {
Expand All @@ -244,14 +211,12 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
return err
}

// Archive the logs on Server node via gRPC in case of rsync failure and logs can not be
// copied to central/Admin node.
if rsyncerr != nil {
err = cmd.archLogsOnServer()
if err != nil && cmd.StopOnError {
return err
}
// Archive the logs on Server Node
err = cmd.archLogsOnServer()
if err != nil && cmd.StopOnError {
return err
}

fmt.Print(progress.Display())
}

Expand Down
28 changes: 4 additions & 24 deletions src/control/lib/support/log.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// (C) Copyright 2022-2024 Intel Corporation.
// (C) Copyright 2025 Hewlett Packard Enterprise Development LP
// (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand Down Expand Up @@ -351,13 +351,12 @@ func ArchiveLogs(log logging.Logger, opts ...CollectLogsParams) error {

// Get the system hostname
func GetHostName() (string, error) {
hn, err := exec.Command("hostname", "-s").Output()
hn, err := os.Hostname()
if err != nil {
return "", errors.Wrapf(err, "Error running hostname -s command %s", hn)
return "", errors.Wrapf(err, "Error getting Hostname %s", hn)
}
out := strings.Split(string(hn), "\n")

return out[0], nil
return hn, nil
}

// Create the local folder on each servers
Expand Down Expand Up @@ -470,25 +469,6 @@ func rsyncLog(log logging.Logger, opts ...CollectLogsParams) error {
}
}

targetLocation, err := createHostFolder(opts[0].TargetFolder, log)
if err != nil {
return err
}

cmd := strings.Join([]string{
"rsync",
"-av",
"--blocking-io",
targetLocation,
opts[0].AdminNode + ":" + opts[0].TargetFolder},
" ")

out, err := exec.Command("sh", "-c", cmd).Output()
if err != nil {
return errors.Wrapf(err, "Error running command %s %s", cmd, string(out))
}
log.Infof("rsyncCmd:= %s stdout:\n%s\n\n", cmd, string(out))

return nil
}

Expand Down
37 changes: 1 addition & 36 deletions src/control/lib/support/log_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// (C) Copyright 2022-2024 Intel Corporation.
// (C) Copyright 2025 Hewlett Packard Enterprise Development LP
// (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand Down Expand Up @@ -336,41 +336,6 @@ func TestSupport_createHostLogFolder(t *testing.T) {
}
}

func TestSupport_rsyncLog(t *testing.T) {
log, buf := logging.NewTestLogger(t.Name())
defer test.ShowBufferOnFailure(t, buf)
targetTestDir, targetCleanup := test.CreateTestDir(t)
defer targetCleanup()
srcPath := test.CreateTestFile(t, targetTestDir, "Temp File\n")
hostName, _ := os.Hostname()

rsLog := CollectLogsParams{}

for name, tc := range map[string]struct {
targetFolder string
AdminNode string
expErr error
}{
"rsync to invalid Target directory": {
targetFolder: targetTestDir + "/foo/bar",
AdminNode: hostName + ":/tmp/foo/bar/",
expErr: errors.New("Error running command"),
},
"rsync invalid log directory": {
targetFolder: srcPath + "/file1",
AdminNode: hostName,
expErr: errors.New("not a directory"),
},
} {
t.Run(name, func(t *testing.T) {
rsLog.TargetFolder = tc.targetFolder
rsLog.AdminNode = tc.AdminNode
gotErr := rsyncLog(log, rsLog)
test.CmpErr(t, tc.expErr, gotErr)
})
}
}

func TestSupport_customCopy(t *testing.T) {
log, buf := logging.NewTestLogger(t.Name())
defer test.ShowBufferOnFailure(t, buf)
Expand Down
Loading