-
Notifications
You must be signed in to change notification settings - Fork 291
/
support.go
120 lines (103 loc) · 3.01 KB
/
support.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// (C) Copyright 2022-2023 Intel Corporation.
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
package main
import (
"fmt"
"os"
"path/filepath"
"time"
"github.com/daos-stack/daos/src/control/common/cmdutil"
"github.com/daos-stack/daos/src/control/lib/support"
)
// supportCmd is the struct representing the top-level support subcommand.
type supportCmd struct {
CollectLog collectLogCmd `command:"collect-log" description:"Collect logs from server"`
}
// collectLogCmd is the struct representing the command to collect the Logs/config for support purpose
type collectLogCmd struct {
cfgCmd
cmdutil.LogCmd
support.CollectLogSubCmd
support.LogTypeSubCmd
}
func (cmd *collectLogCmd) Execute(_ []string) error {
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.
progress := support.ProgressBar{
Total: len(LogCollection),
NoDisplay: false,
}
if cmd.Archive {
progress.Total++
}
// Copy custom log folder
if cmd.ExtraLogsDir != "" {
LogCollection[support.CollectExtraLogsDirEnum] = []string{""}
progress.Total++
}
if cmd.TargetFolder == "" {
folderName := fmt.Sprintf("daos_support_server_logs_%s", time.Now().Format(time.RFC3339))
cmd.TargetFolder = filepath.Join(os.TempDir(), folderName)
}
cmd.Infof("Support logs will be copied to %s", cmd.TargetFolder)
progress.Steps = 100 / progress.Total
params := support.CollectLogsParams{}
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)
params.LogFunction = logFunc
params.LogCmd = logCmd
err := support.CollectSupportLog(cmd.Logger, params)
if err != nil {
fmt.Println(err)
if cmd.StopOnError {
return err
}
}
}
fmt.Printf(progress.Display())
}
if cmd.Archive {
cmd.Debugf("Archiving the Log Folder %s", cmd.TargetFolder)
err := support.ArchiveLogs(cmd.Logger, params)
if err != nil {
return err
}
// FIXME: DAOS-13290 Workaround for files held open
for i := 1; i < 3; i++ {
os.RemoveAll(cmd.TargetFolder)
}
}
fmt.Printf(progress.Display())
return nil
}