diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-09-04 14:42:38 +0300 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-09-04 14:42:38 +0300 |
| commit | b45e7d33de6f2e5089ef5fa6cd8220bcfe4ccae2 (patch) | |
| tree | eccadaab2b051496a76e2a642766d77e6634b456 /internal/server/handlers/readcommand.go | |
| parent | 47401f94f6c429cb17a0fb32fb06d8b29156f396 (diff) | |
server side support for new regex package
Diffstat (limited to 'internal/server/handlers/readcommand.go')
| -rw-r--r-- | internal/server/handlers/readcommand.go | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index d4c871c..d59afe7 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -10,6 +10,7 @@ import ( "github.com/mimecast/dtail/internal/io/fs" "github.com/mimecast/dtail/internal/io/logger" "github.com/mimecast/dtail/internal/omode" + "github.com/mimecast/dtail/internal/regex" ) type readCommand struct { @@ -25,21 +26,25 @@ func newReadCommand(server *ServerHandler, mode omode.Mode) *readCommand { } func (r *readCommand) Start(ctx context.Context, argc int, args []string) { - regex := "." + re := regex.NewNoop() + if argc >= 4 { - switch args[2] { + deserializedRegex, err := regex.Deserialize(strings.Join(args[3:], " ")) + if err != nil { + logger.Error(err) + r.server.sendServerMessage(logger.Error(r.server.user, commandParseWarning, err)) + return } - regex = strings.Join(args[3:], " ") - logger.Debug("Joined regex", regex) + re = deserializedRegex } if argc < 3 { r.server.sendServerMessage(logger.Warn(r.server.user, commandParseWarning, args, argc)) return } - r.readGlob(ctx, args[1], regex) + r.readGlob(ctx, args[1], re) } -func (r *readCommand) readGlob(ctx context.Context, glob string, regex string) { +func (r *readCommand) readGlob(ctx context.Context, glob string, re regex.Regex) { retryInterval := time.Second * 5 glob = filepath.Clean(glob) @@ -70,23 +75,23 @@ func (r *readCommand) readGlob(ctx context.Context, glob string, regex string) { continue } - r.readFiles(ctx, paths, glob, regex, retryInterval) + r.readFiles(ctx, paths, glob, re, retryInterval) break } } -func (r *readCommand) readFiles(ctx context.Context, paths []string, glob string, regex string, retryInterval time.Duration) { +func (r *readCommand) readFiles(ctx context.Context, paths []string, glob string, re regex.Regex, retryInterval time.Duration) { var wg sync.WaitGroup wg.Add(len(paths)) for _, path := range paths { - go r.readFileIfPermissions(ctx, &wg, path, glob, regex) + go r.readFileIfPermissions(ctx, &wg, path, glob, re) } wg.Wait() } -func (r *readCommand) readFileIfPermissions(ctx context.Context, wg *sync.WaitGroup, path, glob, regex string) { +func (r *readCommand) readFileIfPermissions(ctx context.Context, wg *sync.WaitGroup, path, glob string, re regex.Regex) { defer wg.Done() globID := r.makeGlobID(path, glob) @@ -96,10 +101,10 @@ func (r *readCommand) readFileIfPermissions(ctx context.Context, wg *sync.WaitGr return } - r.readFile(ctx, path, globID, regex) + r.readFile(ctx, path, globID, re) } -func (r *readCommand) readFile(ctx context.Context, path, globID, regex string) { +func (r *readCommand) readFile(ctx context.Context, path, globID string, re regex.Regex) { logger.Info(r.server.user, "Start reading file", path, globID) var reader fs.FileReader @@ -120,7 +125,7 @@ func (r *readCommand) readFile(ctx context.Context, path, globID, regex string) } for { - if err := reader.Start(ctx, lines, regex); err != nil { + if err := reader.Start(ctx, lines, re); err != nil { logger.Error(r.server.user, path, globID, err) } |
