summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-05 08:50:33 +0200
committerPaul Buetow <paul@buetow.org>2026-03-05 08:50:33 +0200
commit5d1b9f1062d38c301c0995ec6da980bdf5e48332 (patch)
tree81e1a8963ea66cf06164e89beb6cd2da0ee325f7 /cmd
parentbb46cfbccea301721fb93485ea7169f5841feda3 (diff)
Improve lint/vet reliability and refactor client runtime/bootstrap
Diffstat (limited to 'cmd')
-rw-r--r--cmd/dcat/main.go48
-rw-r--r--cmd/dgrep/main.go47
-rw-r--r--cmd/dmap/main.go50
-rw-r--r--cmd/dtail/main.go57
4 files changed, 48 insertions, 154 deletions
diff --git a/cmd/dcat/main.go b/cmd/dcat/main.go
index 4203809..9b8da4f 100644
--- a/cmd/dcat/main.go
+++ b/cmd/dcat/main.go
@@ -1,18 +1,12 @@
package main
import (
- "context"
"flag"
"os"
- "sync"
-
- "net/http"
- _ "net/http"
- _ "net/http/pprof"
+ "github.com/mimecast/dtail/internal/cli"
"github.com/mimecast/dtail/internal/clients"
"github.com/mimecast/dtail/internal/config"
- "github.com/mimecast/dtail/internal/io/dlog"
"github.com/mimecast/dtail/internal/io/signal"
"github.com/mimecast/dtail/internal/profiling"
"github.com/mimecast/dtail/internal/source"
@@ -61,44 +55,18 @@ func main() {
version.PrintAndExit()
}
- ctx, cancel := context.WithCancel(context.Background())
- var wg sync.WaitGroup
- wg.Add(1)
- dlog.Start(ctx, &wg, source.Client)
-
- // Set up profiling
- profiler := profiling.NewProfiler(profileFlags.ToConfig("dcat"))
- defer profiler.Stop()
-
- if pprof != "" {
- dlog.Client.Info("Starting PProf", pprof)
- go func() {
- panic(http.ListenAndServe(pprof, nil))
- }()
- }
-
- // Log initial metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("startup")
- }
+ runtime := cli.NewClientRuntime(nil, profileFlags, "dcat")
+ runtime.StartPProf(pprof)
+ runtime.LogStartupMetrics()
client, err := clients.NewCatClient(args)
if err != nil {
+ runtime.Stop()
panic(err)
}
- status := client.Start(ctx, signal.InterruptCh(ctx))
-
- // Log final metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("shutdown")
- }
-
- // Stop profiler before exit
- profiler.Stop()
-
- cancel()
-
- wg.Wait()
+ status := client.Start(runtime.Context(), signal.InterruptCh(runtime.Context()))
+ runtime.LogShutdownMetrics()
+ runtime.Stop()
os.Exit(status)
}
diff --git a/cmd/dgrep/main.go b/cmd/dgrep/main.go
index 0002c89..0e4eb29 100644
--- a/cmd/dgrep/main.go
+++ b/cmd/dgrep/main.go
@@ -1,18 +1,12 @@
package main
import (
- "context"
"flag"
"os"
- "sync"
-
- "net/http"
- _ "net/http"
- _ "net/http/pprof"
+ "github.com/mimecast/dtail/internal/cli"
"github.com/mimecast/dtail/internal/clients"
"github.com/mimecast/dtail/internal/config"
- "github.com/mimecast/dtail/internal/io/dlog"
"github.com/mimecast/dtail/internal/io/signal"
"github.com/mimecast/dtail/internal/profiling"
"github.com/mimecast/dtail/internal/source"
@@ -67,48 +61,23 @@ func main() {
version.PrintAndExit()
}
- ctx, cancel := context.WithCancel(context.Background())
- var wg sync.WaitGroup
- wg.Add(1)
- dlog.Start(ctx, &wg, source.Client)
-
- // Set up profiling
- profiler := profiling.NewProfiler(profileFlags.ToConfig("dgrep"))
- defer profiler.Stop()
+ runtime := cli.NewClientRuntime(nil, profileFlags, "dgrep")
if grep != "" {
args.RegexStr = grep
}
- if pprof != "" {
- dlog.Client.Info("Starting PProf", pprof)
- go func() {
- panic(http.ListenAndServe(pprof, nil))
- }()
- }
-
- // Log initial metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("startup")
- }
+ runtime.StartPProf(pprof)
+ runtime.LogStartupMetrics()
client, err := clients.NewGrepClient(args)
if err != nil {
+ runtime.Stop()
panic(err)
}
- status := client.Start(ctx, signal.InterruptCh(ctx))
-
- // Log final metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("shutdown")
- }
-
- // Stop profiler before exit
- profiler.Stop()
-
- cancel()
-
- wg.Wait()
+ status := client.Start(runtime.Context(), signal.InterruptCh(runtime.Context()))
+ runtime.LogShutdownMetrics()
+ runtime.Stop()
os.Exit(status)
}
diff --git a/cmd/dmap/main.go b/cmd/dmap/main.go
index 498a09e..ca3981f 100644
--- a/cmd/dmap/main.go
+++ b/cmd/dmap/main.go
@@ -1,15 +1,10 @@
package main
import (
- "context"
"flag"
"os"
- "sync"
-
- "net/http"
- _ "net/http"
- _ "net/http/pprof"
+ "github.com/mimecast/dtail/internal/cli"
"github.com/mimecast/dtail/internal/clients"
"github.com/mimecast/dtail/internal/config"
"github.com/mimecast/dtail/internal/io/dlog"
@@ -67,44 +62,21 @@ func main() {
version.PrintAndExit()
}
- ctx, cancel := context.WithCancel(context.Background())
- var wg sync.WaitGroup
- wg.Add(1)
- dlog.Start(ctx, &wg, source.Client)
-
- // Set up profiling
- profiler := profiling.NewProfiler(profileFlags.ToConfig("dmap"))
- defer profiler.Stop()
-
- if pprof != "" {
- dlog.Client.Info("Starting PProf", pprof)
- go func() {
- panic(http.ListenAndServe(pprof, nil))
- }()
- }
-
- // Log initial metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("startup")
- }
+ runtime := cli.NewClientRuntime(nil, profileFlags, "dmap")
+ runtime.StartPProf(pprof)
+ runtime.LogStartupMetrics()
client, err := clients.NewMaprClient(args, clients.DefaultMode)
if err != nil {
+ runtime.Stop()
dlog.Client.FatalPanic(err)
}
- status := client.Start(ctx, signal.InterruptChWithCancel(ctx, cancel))
-
- // Log final metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("shutdown")
- }
-
- // Stop profiler before exit
- profiler.Stop()
-
- cancel()
-
- wg.Wait()
+ status := client.Start(
+ runtime.Context(),
+ signal.InterruptChWithCancel(runtime.Context(), runtime.Cancel),
+ )
+ runtime.LogShutdownMetrics()
+ runtime.Stop()
os.Exit(status)
}
diff --git a/cmd/dtail/main.go b/cmd/dtail/main.go
index 45c0275..ee34cc5 100644
--- a/cmd/dtail/main.go
+++ b/cmd/dtail/main.go
@@ -4,17 +4,13 @@ import (
"context"
"flag"
"fmt"
- "net/http"
- _ "net/http"
- _ "net/http/pprof"
"os"
- "sync"
"time"
+ "github.com/mimecast/dtail/internal/cli"
"github.com/mimecast/dtail/internal/clients"
"github.com/mimecast/dtail/internal/color"
"github.com/mimecast/dtail/internal/config"
- "github.com/mimecast/dtail/internal/io/dlog"
"github.com/mimecast/dtail/internal/io/signal"
"github.com/mimecast/dtail/internal/omode"
"github.com/mimecast/dtail/internal/profiling"
@@ -91,39 +87,27 @@ func main() {
}
}
- ctx, cancel := context.WithCancel(context.Background())
+ baseCtx := context.Background()
+ var timeoutCancel context.CancelFunc
if shutdownAfter > 0 {
// NEXT: This does not work (auto shutdown)
- ctx, cancel = context.WithTimeout(ctx, time.Duration(shutdownAfter)*time.Second)
- defer cancel()
+ baseCtx, timeoutCancel = context.WithTimeout(baseCtx, time.Duration(shutdownAfter)*time.Second)
}
- var wg sync.WaitGroup
- wg.Add(1)
- dlog.Start(ctx, &wg, source.Client)
-
- // Set up profiling
- profiler := profiling.NewProfiler(profileFlags.ToConfig("dtail"))
- defer profiler.Stop()
+ runtime := cli.NewClientRuntime(baseCtx, profileFlags, "dtail")
if checkHealth {
fmt.Println("WARN: DTail health check has moved to separate binary dtailhealth" +
" - please adjust the monitoring scripts!")
- cancel()
+ runtime.Stop()
+ if timeoutCancel != nil {
+ timeoutCancel()
+ }
os.Exit(1)
}
- if pprof != "" {
- dlog.Client.Info("Starting PProf", pprof)
- go func() {
- panic(http.ListenAndServe(pprof, nil))
- }()
- }
-
- // Log initial metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("startup")
- }
+ runtime.StartPProf(pprof)
+ runtime.LogStartupMetrics()
var client clients.Client
var err error
@@ -132,23 +116,24 @@ func main() {
switch args.QueryStr {
case "":
if client, err = clients.NewTailClient(args); err != nil {
+ runtime.Stop()
panic(err)
}
default:
if client, err = clients.NewMaprClient(args, clients.DefaultMode); err != nil {
+ runtime.Stop()
panic(err)
}
}
- status := client.Start(ctx, signal.InterruptChWithCancel(ctx, cancel))
-
- // Log final metrics if profiling is enabled
- if profileFlags.Enabled() {
- profiler.LogMetrics("shutdown")
+ status := client.Start(
+ runtime.Context(),
+ signal.InterruptChWithCancel(runtime.Context(), runtime.Cancel),
+ )
+ runtime.LogShutdownMetrics()
+ runtime.Stop()
+ if timeoutCancel != nil {
+ timeoutCancel()
}
-
- cancel()
-
- wg.Wait()
os.Exit(status)
}