Skip to content

Commit 8e0b286

Browse files
committed
clean up monitor creation
1 parent cf5e523 commit 8e0b286

File tree

3 files changed

+45
-53
lines changed

3 files changed

+45
-53
lines changed

command/agent/monitor/export_monitor.go

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type ExportMonitor struct {
3333
doneCh chan struct{}
3434

3535
// ExportReader can read from the cli or the NomadFilePath
36-
ExportReader ExportReader
36+
ExportReader *ExportReader
3737

3838
bufSize int
3939
}
@@ -76,49 +76,43 @@ type ExportReader struct {
7676
// returning a new ExportMonitor or the appropriate error
7777
func NewExportMonitor(opts MonitorExportOpts) (*ExportMonitor, error) {
7878
var (
79-
multiReader io.Reader
80-
cmd *exec.Cmd
81-
prepErr error
82-
bufSize int
79+
exportReader *ExportReader
80+
bufSize int
8381
)
8482

85-
ExportReader := ExportReader{Follow: opts.Follow}
86-
8783
if runtime.GOOS != "linux" &&
8884
opts.ServiceName != "" {
8985
return nil, errors.New("journald log monitoring only available on linux")
9086
}
9187

88+
if opts.bufSize == 0 {
89+
bufSize = defaultBufSize
90+
} else {
91+
bufSize = opts.bufSize
92+
}
93+
9294
if opts.OnDisk && opts.ServiceName == "" {
93-
multiReader, prepErr = fileReader(opts.NomadLogPath)
95+
e, prepErr := fileReader(opts)
9496
if prepErr != nil {
9597
return nil, prepErr
9698
}
99+
exportReader = e
100+
}
97101

98-
ExportReader.Reader = multiReader
99-
ExportReader.UseCli = false
100-
} else {
101-
cmd, multiReader, prepErr = cliReader(opts)
102+
if opts.ServiceName != "" && !opts.OnDisk {
103+
e, prepErr := cliReader(opts)
102104
if prepErr != nil {
103105
return nil, prepErr
104106
}
105-
106-
ExportReader.Reader = multiReader
107-
ExportReader.Cmd = cmd
108-
ExportReader.UseCli = true
107+
exportReader = e
109108
}
110109

111-
if opts.bufSize == 0 {
112-
bufSize = defaultBufSize
113-
} else {
114-
bufSize = opts.bufSize
115-
}
116110
sw := ExportMonitor{
117111
logger: hclog.Default().Named("export"),
118112
doneCh: make(chan struct{}, 1),
119113
logCh: make(chan []byte, bufSize),
120114
bufSize: bufSize,
121-
ExportReader: ExportReader,
115+
ExportReader: exportReader,
122116
}
123117

124118
return &sw, nil
@@ -170,16 +164,17 @@ func ScanServiceName(input string) error {
170164
return nil
171165
}
172166

173-
func cliReader(opts MonitorExportOpts) (*exec.Cmd, io.Reader, error) {
167+
func cliReader(opts MonitorExportOpts) (*ExportReader, error) {
168+
isCli := true
174169
// Vet servicename again
175170
if err := ScanServiceName(opts.ServiceName); err != nil {
176-
return nil, nil, err
171+
return nil, err
177172
}
178173
cmdDuration := "72 hours"
179174
if opts.LogsSince != "" {
180175
parsedDur, err := time.ParseDuration(opts.LogsSince)
181176
if err != nil {
182-
return nil, nil, err
177+
return nil, err
183178
}
184179
cmdDuration = parsedDur.String()
185180
}
@@ -194,24 +189,26 @@ func cliReader(opts MonitorExportOpts) (*exec.Cmd, io.Reader, error) {
194189
// set up reader
195190
stdOut, err := cmd.StdoutPipe()
196191
if err != nil {
197-
return nil, nil, err
192+
return nil, err
198193
}
199194
stdErr, err := cmd.StderrPipe()
200195
if err != nil {
201-
return nil, nil, err
196+
return nil, err
202197
}
203198
multiReader := io.MultiReader(stdOut, stdErr)
204199
cmd.Start()
205-
return cmd, multiReader, nil
200+
201+
return &ExportReader{multiReader, cmd, isCli, opts.Follow}, nil
206202
}
207203

208-
func fileReader(logPath string) (io.Reader, error) {
209-
file, err := os.Open(logPath)
204+
func fileReader(opts MonitorExportOpts) (*ExportReader, error) {
205+
notCli := false
206+
file, err := os.Open(opts.NomadLogPath)
210207
if err != nil {
211208
return nil, err
212209
}
210+
return &ExportReader{file, nil, notCli, opts.Follow}, nil
213211

214-
return file, nil
215212
}
216213

217214
// Stop stops the monitoring process

command/agent/monitor/monitor_test.go

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"fmt"
99
"os"
1010
"strings"
11-
"sync"
11+
1212
"testing"
1313
"time"
1414

@@ -168,28 +168,23 @@ func TestMonitor_Export(t *testing.T) {
168168
if tc.expectClose {
169169
cancel()
170170
}
171-
var (
172-
builder strings.Builder
173-
wg sync.WaitGroup
174-
)
175-
wg.Add(1)
176-
go func() {
177-
defer wg.Done()
178-
TEST:
179-
for {
180-
select {
181-
case log, ok := <-logCh:
182-
if !ok {
183-
break TEST
184-
}
185-
builder.Write(log)
186-
default:
187-
continue
188-
}
189171

172+
var builder strings.Builder
173+
174+
TEST:
175+
for {
176+
select {
177+
case log, ok := <-logCh:
178+
if !ok {
179+
break TEST
180+
}
181+
builder.Write(log)
182+
default:
183+
continue
190184
}
191-
}()
192-
wg.Wait()
185+
186+
}
187+
193188
if !tc.expectClose {
194189
must.Eq(t, strings.TrimSpace(tc.expected), strings.TrimSpace(builder.String()))
195190
} else {

command/agent/monitor/test_helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func NewMockExportMonitor(opts MonitorExportOpts) (*ExportMonitor, error) {
113113
doneCh: make(chan struct{}, 1),
114114
logCh: make(chan []byte, bufSize),
115115
bufSize: bufSize,
116-
ExportReader: ExportReader,
116+
ExportReader: &ExportReader,
117117
}
118118
return &sw, nil
119119
}

0 commit comments

Comments
 (0)