diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-09-04 17:23:21 +0300 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-09-04 17:23:21 +0300 |
| commit | edee62717fbe752556d702c029a5b39de1b04677 (patch) | |
| tree | e3c6d99d7a08e0005fd6340c664fb11912b89679 | |
| parent | c562a013ef7e40e3a7f6126a6d327552f2bc557f (diff) | |
fix regex bug
| -rw-r--r-- | cmd/dtail/main.go | 5 | ||||
| -rw-r--r-- | internal/clients/baseclient.go | 23 | ||||
| -rw-r--r-- | internal/clients/catclient.go | 5 | ||||
| -rw-r--r-- | internal/clients/grepclient.go | 3 | ||||
| -rw-r--r-- | internal/clients/maker.go | 4 | ||||
| -rw-r--r-- | internal/clients/maprclient.go | 7 | ||||
| -rw-r--r-- | internal/clients/runclient.go | 4 | ||||
| -rw-r--r-- | internal/clients/tailclient.go | 7 | ||||
| -rw-r--r-- | internal/regex/regex.go | 16 | ||||
| -rw-r--r-- | internal/server/handlers/readcommand.go | 2 |
10 files changed, 48 insertions, 28 deletions
diff --git a/cmd/dtail/main.go b/cmd/dtail/main.go index 9aaea49..1d15426 100644 --- a/cmd/dtail/main.go +++ b/cmd/dtail/main.go @@ -21,6 +21,7 @@ import ( // The evil begins here. func main() { + var args clients.Args var cfgFile string var checkHealth bool var debugEnable bool @@ -33,10 +34,6 @@ func main() { var shutdownAfter int var sshPort int - args := clients.Args{ - Mode: omode.TailClient, - } - userName := user.Name() flag.BoolVar(&args.RegexInvert, "invert", false, "Invert regex") diff --git a/internal/clients/baseclient.go b/internal/clients/baseclient.go index 102fd7c..ba18f95 100644 --- a/internal/clients/baseclient.go +++ b/internal/clients/baseclient.go @@ -38,18 +38,9 @@ type baseClient struct { Regex regex.Regex } -func (c *baseClient) init(maker maker) { +func (c *baseClient) init() { logger.Info("Initiating base client") - c.maker = maker - c.sshAuthMethods, c.hostKeyCallback = client.InitSSHAuthMethods(c.Args.SSHAuthMethods, c.Args.SSHHostKeyCallback, c.Args.TrustAllHosts, c.throttleCh, c.Args.PrivateKeyPathFile) - - discoveryService := discovery.New(c.Discovery, c.ServersStr, discovery.Shuffle) - - for _, server := range discoveryService.ServerList() { - c.connections = append(c.connections, c.makeConnection(server, c.sshAuthMethods, c.hostKeyCallback)) - } - flag := regex.Default if c.Args.RegexInvert { flag = regex.Invert @@ -59,6 +50,18 @@ func (c *baseClient) init(maker maker) { logger.FatalExit(c.Regex, "invalid regex!", err, regex) } c.Regex = regex + logger.Debug("Regex", c.Regex) + + c.sshAuthMethods, c.hostKeyCallback = client.InitSSHAuthMethods(c.Args.SSHAuthMethods, c.Args.SSHHostKeyCallback, c.Args.TrustAllHosts, c.throttleCh, c.Args.PrivateKeyPathFile) +} + +func (c *baseClient) makeConnections(maker maker) { + c.maker = maker + + discoveryService := discovery.New(c.Discovery, c.ServersStr, discovery.Shuffle) + for _, server := range discoveryService.ServerList() { + c.connections = append(c.connections, c.makeConnection(server, c.sshAuthMethods, c.hostKeyCallback)) + } c.stats = newTailStats(len(c.connections)) } diff --git a/internal/clients/catclient.go b/internal/clients/catclient.go index f089e32..d8e9196 100644 --- a/internal/clients/catclient.go +++ b/internal/clients/catclient.go @@ -31,7 +31,8 @@ func NewCatClient(args Args) (*CatClient, error) { }, } - c.init(c) + c.init() + c.makeConnections(c) return &c, nil } @@ -42,7 +43,7 @@ func (c CatClient) makeHandler(server string) handlers.Handler { func (c CatClient) makeCommands() (commands []string) { for _, file := range strings.Split(c.What, ",") { - commands = append(commands, fmt.Sprintf("%s %s regex %s", c.Mode.String(), file, c.Regex)) + commands = append(commands, fmt.Sprintf("%s %s %s", c.Mode.String(), file, c.Regex.Serialize())) } return } diff --git a/internal/clients/grepclient.go b/internal/clients/grepclient.go index 9f6b666..4024083 100644 --- a/internal/clients/grepclient.go +++ b/internal/clients/grepclient.go @@ -30,7 +30,8 @@ func NewGrepClient(args Args) (*GrepClient, error) { }, } - c.init(c) + c.init() + c.makeConnections(c) return &c, nil } diff --git a/internal/clients/maker.go b/internal/clients/maker.go index da9dfc9..1ba6482 100644 --- a/internal/clients/maker.go +++ b/internal/clients/maker.go @@ -1,6 +1,8 @@ package clients -import "github.com/mimecast/dtail/internal/clients/handlers" +import ( + "github.com/mimecast/dtail/internal/clients/handlers" +) type maker interface { makeHandler(server string) handlers.Handler diff --git a/internal/clients/maprclient.go b/internal/clients/maprclient.go index 85fa7ee..d154c9d 100644 --- a/internal/clients/maprclient.go +++ b/internal/clients/maprclient.go @@ -87,7 +87,8 @@ func NewMaprClient(args Args, queryStr string, maprClientMode MaprClientMode) (* } c.globalGroup = mapr.NewGlobalGroupSet() - c.baseClient.init(c) + c.baseClient.init() + c.baseClient.makeConnections(c) return &c, nil } @@ -119,10 +120,10 @@ func (c MaprClient) makeCommands() (commands []string) { for _, file := range strings.Split(c.What, ",") { if c.Timeout > 0 { - commands = append(commands, fmt.Sprintf("timeout %d %s %s regex %s", c.Timeout, modeStr, file, c.Regex)) + commands = append(commands, fmt.Sprintf("timeout %d %s %s %s", c.Timeout, modeStr, file, c.Regex.Serialize())) continue } - commands = append(commands, fmt.Sprintf("%s %s regex %s", modeStr, file, c.Regex)) + commands = append(commands, fmt.Sprintf("%s %s regex %s", modeStr, file, c.Regex.Serialize())) } return diff --git a/internal/clients/runclient.go b/internal/clients/runclient.go index 9f8e478..5464d54 100644 --- a/internal/clients/runclient.go +++ b/internal/clients/runclient.go @@ -38,7 +38,9 @@ func NewRunClient(args Args, background, jobName string) (*RunClient, error) { background: background, } - c.init(c) + c.init() + c.makeConnections(c) + return &c, nil } diff --git a/internal/clients/tailclient.go b/internal/clients/tailclient.go index 15e77cc..53b5ba4 100644 --- a/internal/clients/tailclient.go +++ b/internal/clients/tailclient.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/mimecast/dtail/internal/clients/handlers" + "github.com/mimecast/dtail/internal/io/logger" "github.com/mimecast/dtail/internal/omode" ) @@ -26,7 +27,8 @@ func NewTailClient(args Args) (*TailClient, error) { }, } - c.init(c) + c.init() + c.makeConnections(c) return &c, nil } @@ -36,8 +38,9 @@ func (c TailClient) makeHandler(server string) handlers.Handler { func (c TailClient) makeCommands() (commands []string) { for _, file := range strings.Split(c.What, ",") { - commands = append(commands, fmt.Sprintf("%s %s regex %s", c.Mode.String(), file, c.Regex)) + commands = append(commands, fmt.Sprintf("%s %s %s", c.Mode.String(), file, c.Regex.Serialize())) } + logger.Debug(commands) return } diff --git a/internal/regex/regex.go b/internal/regex/regex.go index e870797..707cb48 100644 --- a/internal/regex/regex.go +++ b/internal/regex/regex.go @@ -15,15 +15,20 @@ type Regex struct { re *regexp.Regexp // For now only use the first flag at flags[0], but in the future we can // set and use multiple flags. - flags []Flag + flags []Flag + initialized bool } func (r Regex) String() string { - return fmt.Sprintf("Regex(regexStr:%s,flags:%s,re==nil:%t)", r.regexStr, r.flags, r.re == nil) + return fmt.Sprintf("Regex(regexStr:%s,flags:%s,initialized:%t,re==nil:%t)", + r.regexStr, r.flags, r.initialized, r.re == nil) } func NewNoop() Regex { - return Regex{flags: []Flag{Noop}} + return Regex{ + flags: []Flag{Noop}, + initialized: true, + } } func New(regexStr string, flag Flag) (Regex, error) { @@ -46,6 +51,7 @@ func new(regexStr string, flags []Flag) (Regex, error) { } r.re = re + r.initialized = true return r, nil } @@ -81,6 +87,10 @@ func (r Regex) Serialize() string { flags = append(flags, flag.String()) } + if !r.initialized { + logger.FatalExit("Unable to serialize regex as not initialized properly", r) + } + return fmt.Sprintf("regex:%s %s", strings.Join(flags, ","), r.regexStr) } diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index d59afe7..0f9207d 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -29,7 +29,7 @@ func (r *readCommand) Start(ctx context.Context, argc int, args []string) { re := regex.NewNoop() if argc >= 4 { - deserializedRegex, err := regex.Deserialize(strings.Join(args[3:], " ")) + deserializedRegex, err := regex.Deserialize(strings.Join(args[2:], " ")) if err != nil { logger.Error(err) r.server.sendServerMessage(logger.Error(r.server.user, commandParseWarning, err)) |
