Skip to content

Commit

Permalink
DAOS-13936 support: Collect the specific logs and Time range log for …
Browse files Browse the repository at this point in the history
…support (#13325)

 - Adding feature to collect specific log only, Admin/Control/Engine.
 - Adding option to collect the engine log based on date and time range.
 - Fix the control log to add the date to be aligned with server engine/admin logs.

Signed-off-by: Samir Raval <[email protected]>
  • Loading branch information
Samir Raval authored Feb 28, 2024
1 parent 1792904 commit 59b2f55
Show file tree
Hide file tree
Showing 13 changed files with 911 additions and 57 deletions.
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

0 comments on commit 59b2f55

Please sign in to comment.