summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2020-09-04 17:23:21 +0300
committerPaul Buetow <pbuetow@mimecast.com>2020-09-04 17:23:21 +0300
commitedee62717fbe752556d702c029a5b39de1b04677 (patch)
treee3c6d99d7a08e0005fd6340c664fb11912b89679
parentc562a013ef7e40e3a7f6126a6d327552f2bc557f (diff)
fix regex bug
-rw-r--r--cmd/dtail/main.go5
-rw-r--r--internal/clients/baseclient.go23
-rw-r--r--internal/clients/catclient.go5
-rw-r--r--internal/clients/grepclient.go3
-rw-r--r--internal/clients/maker.go4
-rw-r--r--internal/clients/maprclient.go7
-rw-r--r--internal/clients/runclient.go4
-rw-r--r--internal/clients/tailclient.go7
-rw-r--r--internal/regex/regex.go16
-rw-r--r--internal/server/handlers/readcommand.go2
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))