summaryrefslogtreecommitdiff
path: root/internal/clients
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/clients
parentfab5dc3e70434ea0abc7a0976487a1973b662331 (diff)
move health check to separate client binary
Diffstat (limited to 'internal/clients')
-rw-r--r--internal/clients/baseclient.go1
-rw-r--r--internal/clients/handlers/healthhandler.go25
-rw-r--r--internal/clients/healthclient.go29
3 files changed, 33 insertions, 22 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
+}