Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DAOS-13936 support: Collect the specific logs and Time range log for support #13325

Merged
merged 16 commits into from
Feb 28, 2024
Merged
Show file tree
Hide file tree
Changes from 15 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
11 changes: 10 additions & 1 deletion src/control/cmd/daos_agent/support.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ type collectLogCmd struct {
}

func (cmd *collectLogCmd) Execute(_ []string) error {
err := cmd.DateTimeValidate()
if err != nil {
return err
}

var LogCollection = map[int32][]string{
support.CopyAgentConfigEnum: {""},
support.CollectAgentLogEnum: {""},
Expand Down Expand Up @@ -66,6 +71,10 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
params.TargetFolder = cmd.TargetFolder
params.ExtraLogsDir = cmd.ExtraLogsDir
params.Config = cmd.getSupportConf()
params.LogStartDate = cmd.LogStartDate
params.LogEndDate = cmd.LogEndDate
params.LogStartTime = cmd.LogStartTime
params.LogEndTime = cmd.LogEndTime
for logFunc, logCmdSet := range LogCollection {
for _, logCmd := range logCmdSet {
cmd.Debugf("Log Function Enum = %d -- Log Collect Cmd = %s ", logFunc, logCmd)
Expand All @@ -75,7 +84,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
err := support.CollectSupportLog(cmd.Logger, params)
if err != nil {
fmt.Println(err)
if cmd.Stop {
if cmd.StopOnError {
return err
}
}
Expand Down
33 changes: 27 additions & 6 deletions src/control/cmd/daos_server/support.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,31 @@ type collectLogCmd struct {
cfgCmd
cmdutil.LogCmd
support.CollectLogSubCmd
support.LogTypeSubCmd
}

func (cmd *collectLogCmd) Execute(_ []string) error {
var LogCollection = map[int32][]string{
support.CopyServerConfigEnum: {""},
support.CollectSystemCmdEnum: support.SystemCmd,
support.CollectServerLogEnum: support.ServerLog,
support.CollectDaosServerCmdEnum: support.DaosServerCmd,
var LogCollection = map[int32][]string{}
err := cmd.DateTimeValidate()
if err != nil {
return err
}

// Only collect the specific logs Admin,Control or Engine.
// This will ignore the system information collection.
if cmd.LogType != "" {
LogCollection[support.CollectServerLogEnum], err = cmd.LogTypeValidate()
if err != nil {
return err
}
} else {
LogCollection[support.CopyServerConfigEnum] = []string{""}
LogCollection[support.CollectSystemCmdEnum] = support.SystemCmd
LogCollection[support.CollectDaosServerCmdEnum] = support.DaosServerCmd
LogCollection[support.CollectServerLogEnum], err = cmd.LogTypeValidate()
if err != nil {
return err
}
}

// Default 4 steps of log/conf collection.
Expand Down Expand Up @@ -63,6 +80,10 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
params.Config = cmd.configPath()
params.TargetFolder = cmd.TargetFolder
params.ExtraLogsDir = cmd.ExtraLogsDir
params.LogStartDate = cmd.LogStartDate
params.LogEndDate = cmd.LogEndDate
params.LogStartTime = cmd.LogStartTime
params.LogEndTime = cmd.LogEndTime
for logFunc, logCmdSet := range LogCollection {
for _, logCmd := range logCmdSet {
cmd.Debugf("Log Function Enum = %d -- Log Collect Cmd = %s ", logFunc, logCmd)
Expand All @@ -72,7 +93,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
err := support.CollectSupportLog(cmd.Logger, params)
if err != nil {
fmt.Println(err)
if cmd.Stop {
if cmd.StopOnError {
return err
}
}
Expand Down
59 changes: 41 additions & 18 deletions src/control/cmd/dmg/support.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ type collectLogCmd struct {
cmdutil.JSONOutputCmd
support.CollectLogSubCmd
bld strings.Builder
support.LogTypeSubCmd
}

// gRPC call to initiate the rsync and copy the logs to Admin (central location).
Expand All @@ -49,7 +50,7 @@ func (cmd *collectLogCmd) rsyncLog() error {
}
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.Stop {
if err != nil && cmd.StopOnError {
return err
}
if len(resp.GetHostErrors()) > 0 {
Expand All @@ -76,7 +77,7 @@ func (cmd *collectLogCmd) archLogsOnServer() error {
}
cmd.Debugf("Archiving the Log Folder %s", cmd.TargetFolder)
resp, err := control.CollectLog(cmd.MustLogCtx(), cmd.ctlInvoker, req)
if err != nil && cmd.Stop {
if err != nil && cmd.StopOnError {
return err
}
if len(resp.GetHostErrors()) > 0 {
Expand All @@ -92,17 +93,34 @@ func (cmd *collectLogCmd) archLogsOnServer() error {
// Execute is run when supportCmd activates.
func (cmd *collectLogCmd) Execute(_ []string) error {
// Default log collection set
var LogCollection = map[int32][]string{
support.CollectSystemCmdEnum: support.SystemCmd,
support.CollectServerLogEnum: support.ServerLog,
support.CollectDaosServerCmdEnum: support.DaosServerCmd,
support.CopyServerConfigEnum: {""},
var LogCollection = map[int32][]string{}
var DmgInfoCollection = map[int32][]string{}

err := cmd.DateTimeValidate()
if err != nil {
return err
}

// dmg command info collection set
var DmgInfoCollection = map[int32][]string{
support.CollectDmgCmdEnum: support.DmgCmd,
support.CollectDmgDiskInfoEnum: {""},
// Only collect the specific logs Admin,Control or Engine.
// This will ignore the system information collection.
if cmd.LogType != "" {
LogCollection[support.CollectServerLogEnum], err = cmd.LogTypeValidate()
if err != nil {
return err
}
} else {
// Default collect everything from servers
LogCollection[support.CollectSystemCmdEnum] = support.SystemCmd
LogCollection[support.CollectDaosServerCmdEnum] = support.DaosServerCmd
LogCollection[support.CopyServerConfigEnum] = []string{""}
LogCollection[support.CollectServerLogEnum], err = cmd.LogTypeValidate()
if err != nil {
return err
}

// dmg command info collection set
DmgInfoCollection[support.CollectDmgCmdEnum] = support.DmgCmd
DmgInfoCollection[support.CollectDmgDiskInfoEnum] = []string{""}
}

// set of support collection steps to show in progress bar
Expand Down Expand Up @@ -141,7 +159,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
params.TargetFolder = cmd.TargetFolder
params.LogCmd = "dmg system query"

err := support.CollectSupportLog(cmd.Logger, params)
err = support.CollectSupportLog(cmd.Logger, params)

if err != nil {
return err
Expand All @@ -157,19 +175,24 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
ExtraLogsDir: cmd.ExtraLogsDir,
LogFunction: logFunc,
LogCmd: logCmd,
LogStartDate: cmd.LogStartDate,
LogEndDate: cmd.LogEndDate,
LogStartTime: cmd.LogStartTime,
LogEndTime: cmd.LogEndTime,
StopOnError: cmd.StopOnError,
}
req.SetHostList(cmd.hostlist)

resp, err := control.CollectLog(ctx, cmd.ctlInvoker, req)
if err != nil && cmd.Stop {
if err != nil && cmd.StopOnError {
return err
}
if len(resp.GetHostErrors()) > 0 {
if err := pretty.UpdateErrorSummary(resp, logCmd, &cmd.bld); err != nil {
return err
}

if cmd.Stop {
if cmd.StopOnError {
return resp.Errors()
}
}
Expand All @@ -191,7 +214,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {

err := support.CollectSupportLog(cmd.Logger, params)
if err != nil {
if cmd.Stop {
if cmd.StopOnError {
return err
}
}
Expand All @@ -202,7 +225,7 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
// R sync the logs from servers
rsyncerr := cmd.rsyncLog()
fmt.Printf(progress.Display())
if rsyncerr != nil && cmd.Stop {
if rsyncerr != nil && cmd.StopOnError {
return rsyncerr
}

Expand All @@ -211,15 +234,15 @@ func (cmd *collectLogCmd) Execute(_ []string) error {
// Archive the logs on Admin Node
cmd.Debugf("Archiving the Log Folder on Admin Node%s", cmd.TargetFolder)
err := support.ArchiveLogs(cmd.Logger, params)
if err != nil && cmd.Stop {
if err != nil && cmd.StopOnError {
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.Stop {
if err != nil && cmd.StopOnError {
return err
}
}
Expand Down
69 changes: 60 additions & 9 deletions src/control/common/proto/ctl/support.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions src/control/lib/control/support.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ type (
JsonOutput bool
LogFunction int32
LogCmd string
LogStartDate string
LogEndDate string
LogStartTime string
LogEndTime string
StopOnError bool
}

// CollectLogResp contains the results of a collect-log
Expand All @@ -46,6 +51,11 @@ func CollectLog(ctx context.Context, rpcClient UnaryInvoker, req *CollectLogReq)
JsonOutput: req.JsonOutput,
LogFunction: req.LogFunction,
LogCmd: req.LogCmd,
LogStartDate: req.LogStartDate,
LogEndDate: req.LogEndDate,
LogStartTime: req.LogStartTime,
LogEndTime: req.LogEndTime,
StopOnError: req.StopOnError,
})
})

Expand Down
Loading
Loading