summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2021-10-06 10:55:50 +0300
committerPaul Buetow <paul@buetow.org>2021-10-06 10:55:50 +0300
commit7306afe9ab073c424ddca0ddc57950f237948118 (patch)
tree063c7181425f0657ec97e415c0224d311bafe6c5 /internal
parentfab5dc3e70434ea0abc7a0976487a1973b662331 (diff)
move health check to separate client binary
Diffstat (limited to 'internal')
-rw-r--r--internal/clients/baseclient.go1
-rw-r--r--internal/clients/handlers/healthhandler.go25
-rw-r--r--internal/clients/healthclient.go29
-rw-r--r--internal/config/initializer.go10
-rw-r--r--internal/io/dlog/dlog.go2
-rw-r--r--internal/io/signal/signal.go5
-rw-r--r--internal/server/handlers/healthhandler.go4
-rw-r--r--internal/server/handlers/serverhandler.go2
8 files changed, 51 insertions, 27 deletions
diff --git a/internal/clients/baseclient.go b/internal/clients/baseclient.go
index b474208..d5d7c2c 100644
--- a/internal/clients/baseclient.go
+++ b/internal/clients/baseclient.go
@@ -88,7 +88,6 @@ func (c *baseClient) Start(ctx context.Context, statsCh <-chan string) (status i
go func(i int, conn connectors.Connector) {
defer wg.Done()
connStatus := c.startConnection(ctx, i, conn)
- // Update global status.
mutex.Lock()
defer mutex.Unlock()
if connStatus > status {
diff --git a/internal/clients/handlers/healthhandler.go b/internal/clients/handlers/healthhandler.go
index 4b16ce4..10ba1f7 100644
--- a/internal/clients/handlers/healthhandler.go
+++ b/internal/clients/handlers/healthhandler.go
@@ -1,7 +1,6 @@
package handlers
import (
- "fmt"
"strings"
"github.com/mimecast/dtail/internal"
@@ -22,7 +21,7 @@ func NewHealthHandler(server string) *HealthHandler {
server: server,
shellStarted: false,
commands: make(chan string),
- status: -1,
+ status: 2, // Assume CRITICAL status by default.
done: internal.NewDone(),
},
}
@@ -34,14 +33,12 @@ func (h *HealthHandler) Write(p []byte) (n int, err error) {
switch b {
case '\n', protocol.MessageDelimiter:
message := h.baseHandler.receiveBuf.String()
- dlog.Client.Debug(message)
h.handleMessage(message)
h.baseHandler.receiveBuf.Reset()
default:
h.baseHandler.receiveBuf.WriteByte(b)
}
}
-
return len(p), nil
}
@@ -52,21 +49,7 @@ func (h *HealthHandler) handleMessage(message string) {
}
s := strings.Split(message, protocol.FieldDelimiter)
message = s[len(s)-1]
- status := strings.Split(message, ":")
- fmt.Println(status)
- /*
- switch status {
- case "OK":
- h.HealthStatusCh <- 0
- case "WARNING":
- h.HealthStatusCh <- 1
- case "CRITICAL":
- h.HealthStatusCh <- 2
- case "UNKNOWN":
- h.HealthStatusCh <- 3
- default:
- fmt.Println("CRITICAL: Unexpected server response: '%s'")
- h.HealthStatusCh <- 2
- }
- */
+ if message == "OK" {
+ h.baseHandler.status = 0
+ }
}
diff --git a/internal/clients/healthclient.go b/internal/clients/healthclient.go
index e2c8ccb..ac1dc20 100644
--- a/internal/clients/healthclient.go
+++ b/internal/clients/healthclient.go
@@ -1,6 +1,8 @@
package clients
import (
+ "context"
+ "fmt"
"runtime"
"github.com/mimecast/dtail/internal/clients/handlers"
@@ -42,3 +44,30 @@ func (c HealthClient) makeCommands() (commands []string) {
commands = append(commands, "health")
return
}
+
+func (c *HealthClient) Start(ctx context.Context, statsCh <-chan string) int {
+ status := c.baseClient.Start(ctx, statsCh)
+
+ switch status {
+ case 0:
+ if c.Serverless {
+ fmt.Printf("WARNING: All seems fine but the check only run in serverless mode, please specify a remote server via --server hostname:port\n")
+ return 1
+ }
+ fmt.Printf("OK: All fine at %s :-)\n", c.ServersStr)
+ case 2:
+ if c.Serverless {
+ fmt.Printf("CRITICAL: DTail server not operating properly (using serverless connction)!\n")
+ return 2
+ }
+ fmt.Printf("CRITICAL: DTail server not operating properly at %s!\n", c.ServersStr)
+ default:
+ if c.Serverless {
+ fmt.Printf("UNKNOWN: Received unknown status code %d (using serverless connection)\n", status)
+ return status
+ }
+ fmt.Printf("UNKNOWN: Received unknown status code %d from %s!\n", status, c.ServersStr)
+ }
+
+ return status
+}
diff --git a/internal/config/initializer.go b/internal/config/initializer.go
index a58f82a..ec758c8 100644
--- a/internal/config/initializer.go
+++ b/internal/config/initializer.go
@@ -96,11 +96,19 @@ func (c *initializer) transformConfig(sourceProcess source.Source, args *Args, a
common.SSHPort = args.SSHPort
}
- if args.Discovery == "" && args.ServersStr == "" {
+ if args.Discovery == "" && (args.ServersStr == "" ||
+ strings.ToLower(args.ServersStr) == "serverless") {
// We are not connecting to any servers.
args.Serverless = true
}
+ if sourceProcess == source.HealthCheck {
+ args.TrustAllHosts = true
+ if !args.Serverless && strings.ToLower(args.ServersStr) == "" {
+ args.ServersStr = fmt.Sprintf("localhost:%d", DefaultSSHPort)
+ }
+ }
+
// Interpret additional args as file list.
if args.What == "" {
var files []string
diff --git a/internal/io/dlog/dlog.go b/internal/io/dlog/dlog.go
index a17d6e9..2ae3b04 100644
--- a/internal/io/dlog/dlog.go
+++ b/internal/io/dlog/dlog.go
@@ -59,7 +59,7 @@ func Start(ctx context.Context, wg *sync.WaitGroup, sourceProcess source.Source,
Common = Server
case source.HealthCheck:
// Health check isn't logging anything.
- impl := loggers.STDOUT
+ impl := loggers.NONE
Client = New(source.HealthCheck, source.Client, level, impl, strategy)
Server = New(source.HealthCheck, source.Server, level, impl, strategy)
Common = Client
diff --git a/internal/io/signal/signal.go b/internal/io/signal/signal.go
index 500c530..14056c4 100644
--- a/internal/io/signal/signal.go
+++ b/internal/io/signal/signal.go
@@ -44,3 +44,8 @@ func InterruptCh(ctx context.Context) <-chan string {
return statsCh
}
+
+// NoCh doesn't listen on a signal.
+func NoCh(ctx context.Context) <-chan string {
+ return make(chan string)
+}
diff --git a/internal/server/handlers/healthhandler.go b/internal/server/handlers/healthhandler.go
index 3f3b932..347ff66 100644
--- a/internal/server/handlers/healthhandler.go
+++ b/internal/server/handlers/healthhandler.go
@@ -48,8 +48,8 @@ func (h *HealthHandler) handleHealthCommand(ctx context.Context, argc int, args
switch commandName {
case "health":
- h.send(h.serverMessages, "OK: DTail SSH Server seems fine")
- case "ack", ".ack":
+ h.send(h.serverMessages, "OK")
+ case ".ack":
h.handleAckCommand(argc, args)
default:
h.send(h.serverMessages, dlog.Server.Error(h.user, "Received unknown health command", commandName, argc, args))
diff --git a/internal/server/handlers/serverhandler.go b/internal/server/handlers/serverhandler.go
index aaffe14..aed8956 100644
--- a/internal/server/handlers/serverhandler.go
+++ b/internal/server/handlers/serverhandler.go
@@ -106,7 +106,7 @@ func (h *ServerHandler) handleUserCommand(ctx context.Context, argc int, args []
commandFinished()
}()
- case "ack", ".ack":
+ case ".ack":
h.handleAckCommand(argc, args)
commandFinished()