@@ -8,11 +8,10 @@ import (
88 "os"
99 "os/signal"
1010 "syscall"
11- "time"
1211
1312 "github.com/tma/mbproxy/internal/config"
14- "github.com/tma/mbproxy/internal/health"
1513 "github.com/tma/mbproxy/internal/logging"
14+ "github.com/tma/mbproxy/internal/modbus"
1615 "github.com/tma/mbproxy/internal/proxy"
1716)
1817
@@ -21,8 +20,7 @@ func main() {
2120 flag .Parse ()
2221
2322 if * healthCheck {
24- addr := config .GetEnv ("HEALTH_LISTEN" , ":8080" )
25- if err := health .CheckHealth (addr ); err != nil {
23+ if err := runHealthCheck (); err != nil {
2624 fmt .Fprintln (os .Stderr , err )
2725 os .Exit (1 )
2826 }
@@ -50,19 +48,6 @@ func main() {
5048 os .Exit (1 )
5149 }
5250
53- // Start health server
54- hs := health .NewServer (cfg .HealthListen , p , logger )
55- hsLn , err := hs .Listen ()
56- if err != nil {
57- logger .Error ("failed to start health server" , "error" , err )
58- os .Exit (1 )
59- }
60- go func () {
61- if err := hs .Serve (hsLn ); err != nil {
62- logger .Error ("health server error" , "error" , err )
63- }
64- }()
65-
6651 // Start proxy in background
6752 errCh := make (chan error , 1 )
6853 go func () {
@@ -83,16 +68,31 @@ func main() {
8368 // Graceful shutdown
8469 cancel ()
8570
86- shutdownCtx , shutdownCancel := context .WithTimeout (context .Background (), 5 * time .Second )
87- defer shutdownCancel ()
88- if err := hs .Shutdown (shutdownCtx ); err != nil {
89- logger .Error ("health server shutdown error" , "error" , err )
90- }
91-
9271 if err := p .Shutdown (cfg .ShutdownTimeout ); err != nil {
9372 logger .Error ("shutdown error" , "error" , err )
9473 os .Exit (1 )
9574 }
9675
9776 logger .Info ("shutdown complete" )
9877}
78+
79+ func runHealthCheck () error {
80+ cfg , err := config .Load ()
81+ if err != nil {
82+ return err
83+ }
84+
85+ return checkUpstreamHealth (cfg , logging .New (cfg .LogLevel ))
86+ }
87+
88+ func checkUpstreamHealth (cfg * config.Config , logger * slog.Logger ) (err error ) {
89+ client := modbus .NewClient (cfg .Upstream , cfg .Timeout , cfg .RequestDelay , cfg .ConnectDelay , logger )
90+ defer func () {
91+ closeErr := client .Close ()
92+ if err == nil && closeErr != nil {
93+ err = closeErr
94+ }
95+ }()
96+
97+ return client .Connect ()
98+ }
0 commit comments