Skip to content

Commit 3966c69

Browse files
authored
Merge pull request #25 from 10gen/logimp
Logimp
2 parents de37223 + 1c55a35 commit 3966c69

File tree

9 files changed

+296
-133
lines changed

9 files changed

+296
-133
lines changed

dcrlogger/dcrlogger.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type DCRLogger struct {
2626
FileName string
2727
LogFileHandle *os.File
2828
Logger *slog.Logger
29+
LevelVar *slog.LevelVar
2930
}
3031

3132
func (dl *DCRLogger) CreateLogFileHandle() error {
@@ -39,7 +40,13 @@ func (dl *DCRLogger) Create() error {
3940
if err != nil {
4041
return err
4142
}
42-
dl.Logger = slog.New(slog.NewJSONHandler(dl.LogFileHandle, nil))
43+
44+
dl.LevelVar = new(slog.LevelVar)
45+
46+
dljsonhandler := slog.NewJSONHandler(dl.LogFileHandle, &slog.HandlerOptions{Level: dl.LevelVar})
47+
48+
dl.Logger = slog.New(dljsonhandler)
49+
4350
return nil
4451
}
4552

@@ -63,3 +70,7 @@ func (dl *DCRLogger) Warn(msg string) {
6370
func (dl *DCRLogger) Error(msg string) {
6471
dl.Logger.Error(msg)
6572
}
73+
74+
func (dl *DCRLogger) SetLogLevel(sloglvl slog.Level) {
75+
dl.LevelVar.Set(sloglvl)
76+
}

fscopy/fscopy.go

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ import (
2222
"os"
2323
"os/exec"
2424
"strings"
25+
26+
"dcrcli/dcrlogger"
2527
)
2628

2729
type RemoteCred struct {
2830
Username string
2931
Available bool
32+
Dcrlog *dcrlogger.DCRLogger
3033
}
3134

3235
func (rc *RemoteCred) Get() error {
@@ -38,12 +41,17 @@ func (rc *RemoteCred) Get() error {
3841
if err != nil {
3942
return err
4043
}
44+
4145
rc.Username = strings.TrimSuffix(username, "\n")
46+
rc.Dcrlog.Debug(fmt.Sprintf("passwordless ssh username %s:", rc.Username))
47+
4248
if rc.Username == "" {
4349
println("WARNING: PasswordLess SSH Username is empty assuming all nodes local")
4450
rc.Available = false
51+
rc.Dcrlog.Debug("passwordless ssh username left blank assuming all nodes local")
4552
} else {
4653
rc.Available = true
54+
rc.Dcrlog.Debug("passwordless ssh username provided")
4755
}
4856

4957
return nil
@@ -61,63 +69,64 @@ type DestDir struct {
6169
Path []byte
6270
}
6371

64-
// Copy job
65-
// state:
66-
// N - not started
67-
// P - Progressing
68-
// A - Aborted
69-
// C - Completed successfully
70-
type FSCopyJob struct {
71-
Src SourceDir
72-
Dst DestDir
73-
State string
74-
Output *bytes.Buffer
75-
}
76-
7772
// example rsync -a --include='mongod.log*' --exclude='*' --include='*/' ubuntu@ip-10-0-0-246:/home/ubuntu/testcluster/dbp/ .
7873
type FSCopyJobWithPattern struct {
7974
CopyJobDetails *FSCopyJob
8075
CurrentFileName string
76+
Dcrlog *dcrlogger.DCRLogger
8177
}
8278

83-
func (fcj *FSCopyJobWithPattern) StartCopyWithPattern() error {
84-
if fcj.CopyJobDetails.Src.IsLocal {
85-
return fcj.StartCopyLocalWithPattern()
79+
func (fcjwp *FSCopyJobWithPattern) StartCopyWithPattern() error {
80+
if fcjwp.CopyJobDetails.Src.IsLocal {
81+
return fcjwp.StartCopyLocalWithPattern()
8682
}
87-
return fcj.StartCopyRemoteWithPattern()
83+
return fcjwp.StartCopyRemoteWithPattern()
8884
}
8985

90-
func (fcj *FSCopyJobWithPattern) StartCopyLocalWithPattern() error {
86+
func (fcjwp *FSCopyJobWithPattern) StartCopyLocalWithPattern() error {
9187
return nil
9288
}
9389

94-
func (fcj *FSCopyJobWithPattern) StartCopyRemoteWithPattern() error {
90+
func (fcjwp *FSCopyJobWithPattern) StartCopyRemoteWithPattern() error {
9591
var cmd *exec.Cmd
9692

97-
filepattern := `'` + fcj.CurrentFileName + `*` + `'`
93+
filepattern := `'` + fcjwp.CurrentFileName + `*` + `'`
9894
excludepattern := `'` + `*` + `'`
9995

10096
// we invoke bash shell because the wildcards are interpretted by bash shell not the rsync program
97+
fcjwp.Dcrlog.Debug(
98+
fmt.Sprintf(
99+
"preparing command rsync -az --include=%s --exclude=%s --info=progress2 %s@%s:%s/ %s",
100+
filepattern,
101+
excludepattern,
102+
fcjwp.CopyJobDetails.Src.Username,
103+
fcjwp.CopyJobDetails.Src.Hostname,
104+
fcjwp.CopyJobDetails.Src.Path,
105+
fcjwp.CopyJobDetails.Dst.Path,
106+
),
107+
)
108+
101109
cmd = exec.Command(
102110
"bash",
103111
"-c",
104112
fmt.Sprintf(
105113
"rsync -az --include=%s --exclude=%s --info=progress2 %s@%s:%s/ %s",
106114
filepattern,
107115
excludepattern,
108-
fcj.CopyJobDetails.Src.Username,
109-
fcj.CopyJobDetails.Src.Hostname,
110-
fcj.CopyJobDetails.Src.Path,
111-
fcj.CopyJobDetails.Dst.Path,
116+
fcjwp.CopyJobDetails.Src.Username,
117+
fcjwp.CopyJobDetails.Src.Hostname,
118+
fcjwp.CopyJobDetails.Src.Path,
119+
fcjwp.CopyJobDetails.Dst.Path,
112120
))
113121

114-
cmd.Stdout = fcj.CopyJobDetails.Output
122+
cmd.Stdout = fcjwp.CopyJobDetails.Output
115123

116124
stderr, err := cmd.StderrPipe()
117125
if err != nil {
118126
return err
119127
}
120128

129+
fcjwp.Dcrlog.Debug("rsync command start")
121130
err = cmd.Start()
122131
if err != nil {
123132
return err
@@ -126,21 +135,47 @@ func (fcj *FSCopyJobWithPattern) StartCopyRemoteWithPattern() error {
126135
_, err = io.ReadAll(stderr)
127136
if err != nil {
128137
_ = cmd.Process.Kill()
138+
fcjwp.Dcrlog.Debug(
139+
fmt.Sprintf("StartCopyRemoteWithPattern: Error reading from stderr pipe %w", err),
140+
)
129141
return fmt.Errorf("StartCopyRemoteWithPattern: Error reading from stderr pipe %w", err)
130142
}
131143

132144
err = cmd.Wait()
133145
if err != nil {
146+
fcjwp.Dcrlog.Debug(
147+
fmt.Sprintf("StartCopyRemoteWithPattern: error doing remote copy job wait %w", err),
148+
)
134149
return fmt.Errorf("StartCopyRemoteWithPattern: error doing remote copy job wait %w", err)
135150
}
136151
return nil
137152
}
138153

154+
// Copy job
155+
// state:
156+
// N - not started
157+
// P - Progressing
158+
// A - Aborted
159+
// C - Completed successfully
160+
type FSCopyJob struct {
161+
Src SourceDir
162+
Dst DestDir
163+
State string
164+
Output *bytes.Buffer
165+
Dcrlog *dcrlogger.DCRLogger
166+
}
167+
139168
// currently only run for remote source directories
140169
func (fcj *FSCopyJob) StartCopyRemote() error {
141-
var cmd *exec.Cmd
170+
// var cmd *exec.Cmd
142171

143-
cmd = exec.Command(
172+
fcj.Dcrlog.Debug(fmt.Sprintf("preparing command rsync -az --info=progress2 %s@%s:%s/ %s",
173+
fcj.Src.Username,
174+
fcj.Src.Hostname,
175+
fcj.Src.Path,
176+
fcj.Dst.Path))
177+
178+
cmd := exec.Command(
144179
"rsync",
145180
"-az",
146181
"--info=progress2",
@@ -159,6 +194,7 @@ func (fcj *FSCopyJob) StartCopyRemote() error {
159194
return err
160195
}
161196

197+
fcj.Dcrlog.Debug("starting rsync command")
162198
err = cmd.Start()
163199
if err != nil {
164200
return err
@@ -167,11 +203,13 @@ func (fcj *FSCopyJob) StartCopyRemote() error {
167203
_, err = io.ReadAll(stderr)
168204
if err != nil {
169205
_ = cmd.Process.Kill()
170-
return fmt.Errorf("Error reading from stderr pipe %w", err)
206+
fcj.Dcrlog.Debug(fmt.Sprintf("error reading from stderr pipe %w", err))
207+
return fmt.Errorf("error reading from stderr pipe %w", err)
171208
}
172209

173210
err = cmd.Wait()
174211
if err != nil {
212+
fcj.Dcrlog.Debug(fmt.Sprintf("error doing remote copy job wait %w", err))
175213
return fmt.Errorf("error doing remote copy job wait %w", err)
176214
}
177215

0 commit comments

Comments
 (0)