@@ -33,7 +33,7 @@ type ExportMonitor struct {
33
33
doneCh chan struct {}
34
34
35
35
// ExportReader can read from the cli or the NomadFilePath
36
- ExportReader ExportReader
36
+ ExportReader * ExportReader
37
37
38
38
bufSize int
39
39
}
@@ -76,49 +76,43 @@ type ExportReader struct {
76
76
// returning a new ExportMonitor or the appropriate error
77
77
func NewExportMonitor (opts MonitorExportOpts ) (* ExportMonitor , error ) {
78
78
var (
79
- multiReader io.Reader
80
- cmd * exec.Cmd
81
- prepErr error
82
- bufSize int
79
+ exportReader * ExportReader
80
+ bufSize int
83
81
)
84
82
85
- ExportReader := ExportReader {Follow : opts .Follow }
86
-
87
83
if runtime .GOOS != "linux" &&
88
84
opts .ServiceName != "" {
89
85
return nil , errors .New ("journald log monitoring only available on linux" )
90
86
}
91
87
88
+ if opts .bufSize == 0 {
89
+ bufSize = defaultBufSize
90
+ } else {
91
+ bufSize = opts .bufSize
92
+ }
93
+
92
94
if opts .OnDisk && opts .ServiceName == "" {
93
- multiReader , prepErr = fileReader (opts . NomadLogPath )
95
+ e , prepErr : = fileReader (opts )
94
96
if prepErr != nil {
95
97
return nil , prepErr
96
98
}
99
+ exportReader = e
100
+ }
97
101
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 )
102
104
if prepErr != nil {
103
105
return nil , prepErr
104
106
}
105
-
106
- ExportReader .Reader = multiReader
107
- ExportReader .Cmd = cmd
108
- ExportReader .UseCli = true
107
+ exportReader = e
109
108
}
110
109
111
- if opts .bufSize == 0 {
112
- bufSize = defaultBufSize
113
- } else {
114
- bufSize = opts .bufSize
115
- }
116
110
sw := ExportMonitor {
117
111
logger : hclog .Default ().Named ("export" ),
118
112
doneCh : make (chan struct {}, 1 ),
119
113
logCh : make (chan []byte , bufSize ),
120
114
bufSize : bufSize ,
121
- ExportReader : ExportReader ,
115
+ ExportReader : exportReader ,
122
116
}
123
117
124
118
return & sw , nil
@@ -170,16 +164,17 @@ func ScanServiceName(input string) error {
170
164
return nil
171
165
}
172
166
173
- func cliReader (opts MonitorExportOpts ) (* exec.Cmd , io.Reader , error ) {
167
+ func cliReader (opts MonitorExportOpts ) (* ExportReader , error ) {
168
+ isCli := true
174
169
// Vet servicename again
175
170
if err := ScanServiceName (opts .ServiceName ); err != nil {
176
- return nil , nil , err
171
+ return nil , err
177
172
}
178
173
cmdDuration := "72 hours"
179
174
if opts .LogsSince != "" {
180
175
parsedDur , err := time .ParseDuration (opts .LogsSince )
181
176
if err != nil {
182
- return nil , nil , err
177
+ return nil , err
183
178
}
184
179
cmdDuration = parsedDur .String ()
185
180
}
@@ -194,24 +189,26 @@ func cliReader(opts MonitorExportOpts) (*exec.Cmd, io.Reader, error) {
194
189
// set up reader
195
190
stdOut , err := cmd .StdoutPipe ()
196
191
if err != nil {
197
- return nil , nil , err
192
+ return nil , err
198
193
}
199
194
stdErr , err := cmd .StderrPipe ()
200
195
if err != nil {
201
- return nil , nil , err
196
+ return nil , err
202
197
}
203
198
multiReader := io .MultiReader (stdOut , stdErr )
204
199
cmd .Start ()
205
- return cmd , multiReader , nil
200
+
201
+ return & ExportReader {multiReader , cmd , isCli , opts .Follow }, nil
206
202
}
207
203
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 )
210
207
if err != nil {
211
208
return nil , err
212
209
}
210
+ return & ExportReader {file , nil , notCli , opts .Follow }, nil
213
211
214
- return file , nil
215
212
}
216
213
217
214
// Stop stops the monitoring process
0 commit comments