@@ -5,13 +5,13 @@ import (
55 "crypto/tls"
66 "fmt"
77 "log"
8+ "log/slog"
89 "net/http"
910 "os"
1011 "os/signal"
1112 "strconv"
1213 "syscall"
1314
14- mglog "github.com/absmach/magistrala/logger"
1515 "github.com/absmach/mproxy/examples/simple"
1616 hproxy "github.com/absmach/mproxy/pkg/http"
1717 "github.com/absmach/mproxy/pkg/mqtt"
@@ -104,7 +104,7 @@ type config struct {
104104 wsMQTTConfig WSMQTTConfig
105105 wsConfig WSConfig
106106
107- logLevel string
107+ logLevel slog. Level
108108}
109109
110110type WSConfig struct {
@@ -146,10 +146,10 @@ type HTTPConfig struct {
146146func main () {
147147 cfg := loadConfig ()
148148
149- logger , err := mglog . New (os .Stdout , cfg . logLevel )
150- if err != nil {
151- log . Fatalf ( err . Error () )
152- }
149+ logHandler := slog . NewJSONHandler (os .Stdout , & slog. HandlerOptions {
150+ Level : cfg . logLevel ,
151+ } )
152+ logger := slog . New ( logHandler )
153153
154154 h := simple .New (logger )
155155
@@ -164,30 +164,30 @@ func main() {
164164 }
165165
166166 // WSS - MQTT
167- logger . Info ( fmt . Sprintf ( "Starting encrypted WebSocket proxy on port %s " , cfg .wsMQTTConfig .wssPort ) )
167+ logServerStart ( logger , " encrypted WebSocket" , cfg .wsMQTTConfig .wssPort , cfg . wsMQTTConfig . targetPort )
168168 go proxyMQTTWSS (cfg , tlsCfg , logger , h , errs )
169169 // MQTTS
170- logger . Info ( fmt . Sprintf ( "Starting MQTTS proxy on port %s " , cfg .mqttConfig .mqttsPort ) )
170+ logServerStart ( logger , " MQTTS" , cfg .mqttConfig .mqttsPort , cfg . mqttConfig . targetPort )
171171 go proxyMQTTS (ctx , cfg .mqttConfig , tlsCfg , logger , h , errs )
172172 // WSS
173- logger . Info ( fmt . Sprintf ( "Starting WSS proxy on port %s " , cfg .wsConfig .port ) )
173+ logServerStart ( logger , " WSS" , cfg .wsConfig .port , cfg . wsConfig . targetPort )
174174 go proxyWSS (ctx , cfg , logger , h , errs )
175175 // HTTPS
176- logger . Info ( fmt . Sprintf ( "Starting HTTPS proxy on port %s " , cfg .httpConfig .port ) )
176+ logServerStart ( logger , " HTTPS" , cfg .httpConfig .port , cfg . httpConfig . targetPort )
177177 go proxyHTTPS (ctx , cfg .httpConfig , logger , h , errs )
178178 } else {
179179 // WS - MQTT
180- logger . Info ( fmt . Sprintf ( "Starting WebSocket proxy on port %s " , cfg .wsMQTTConfig .port ) )
180+ logServerStart ( logger , " WebSocket" , cfg .wsMQTTConfig .port , cfg . wsMQTTConfig . targetPort )
181181 go proxyMQTTWS (cfg .wsMQTTConfig , logger , h , errs )
182182
183183 // MQTT
184- logger . Info ( fmt . Sprintf ( "Starting MQTT proxy on port %s " , cfg .mqttConfig .port ) )
184+ logServerStart ( logger , " MQTT" , cfg .mqttConfig .port , cfg . mqttConfig . targetPort )
185185 go proxyMQTT (ctx , cfg .mqttConfig , logger , h , errs )
186186 // WS
187- logger . Info ( fmt . Sprintf ( "Starting WS proxy on port %s " , cfg .wsConfig .port ) )
187+ logServerStart ( logger , "WS " , cfg .wsConfig .port , cfg . wsConfig . targetPort )
188188 go proxyWS (ctx , cfg .wsConfig , logger , h , errs )
189189 // HTTP
190- logger . Info ( fmt . Sprintf ( "Starting HTTP proxy on port %s " , cfg .httpConfig .port ) )
190+ logServerStart ( logger , " HTTP" , cfg .httpConfig .port , cfg . httpConfig . targetPort )
191191 go proxyHTTP (ctx , cfg .httpConfig , logger , h , errs )
192192 }
193193
@@ -197,7 +197,7 @@ func main() {
197197 errs <- fmt .Errorf ("%s" , <- c )
198198 }()
199199
200- err = <- errs
200+ err : = <- errs
201201 logger .Error (fmt .Sprintf ("mProxy terminated: %s" , err ))
202202}
203203
@@ -215,6 +215,11 @@ func loadConfig() config {
215215 log .Fatalf ("Invalid value passed for %s\n " , envClientTLS )
216216 }
217217
218+ var level slog.Level
219+ if err := level .UnmarshalText ([]byte (env (envLogLevel , defLogLevel ))); err != nil {
220+ log .Fatalf ("Invalid value passed for %s with error: %s\n " , envLogLevel , err )
221+ }
222+
218223 return config {
219224 // WS
220225 wsMQTTConfig : WSMQTTConfig {
@@ -261,42 +266,42 @@ func loadConfig() config {
261266 },
262267
263268 // Log
264- logLevel : env ( envLogLevel , defLogLevel ) ,
269+ logLevel : level ,
265270 }
266271}
267272
268- func proxyMQTTWS (cfg WSMQTTConfig , logger mglog .Logger , handler session.Handler , errs chan error ) {
273+ func proxyMQTTWS (cfg WSMQTTConfig , logger * slog .Logger , handler session.Handler , errs chan error ) {
269274 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
270275 wp := websocket .New (target , cfg .targetPath , cfg .targetScheme , handler , nil , logger )
271276 http .Handle (cfg .path , wp .Handler ())
272277
273278 errs <- wp .Listen (cfg .port )
274279}
275280
276- func proxyMQTTWSS (cfg config , tlsCfg * tls.Config , logger mglog .Logger , handler session.Handler , errs chan error ) {
281+ func proxyMQTTWSS (cfg config , tlsCfg * tls.Config , logger * slog .Logger , handler session.Handler , errs chan error ) {
277282 target := fmt .Sprintf ("%s:%s" , cfg .wsMQTTConfig .targetHost , cfg .wsMQTTConfig .targetPort )
278283 wp := websocket .New (target , cfg .wsMQTTConfig .targetPath , cfg .wsMQTTConfig .targetScheme , handler , nil , logger )
279284 http .Handle (cfg .wsMQTTConfig .wssPath , wp .Handler ())
280285 errs <- wp .ListenTLS (tlsCfg , cfg .serverCert , cfg .serverKey , cfg .wsMQTTConfig .wssPort )
281286}
282287
283- func proxyMQTT (ctx context.Context , cfg MQTTConfig , logger mglog .Logger , handler session.Handler , errs chan error ) {
288+ func proxyMQTT (ctx context.Context , cfg MQTTConfig , logger * slog .Logger , handler session.Handler , errs chan error ) {
284289 address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
285290 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
286291 mp := mqtt .New (address , target , handler , nil , logger )
287292
288293 errs <- mp .Listen (ctx )
289294}
290295
291- func proxyMQTTS (ctx context.Context , cfg MQTTConfig , tlsCfg * tls.Config , logger mglog .Logger , handler session.Handler , errs chan error ) {
296+ func proxyMQTTS (ctx context.Context , cfg MQTTConfig , tlsCfg * tls.Config , logger * slog .Logger , handler session.Handler , errs chan error ) {
292297 address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .mqttsPort )
293298 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
294299 mp := mqtt .New (address , target , handler , nil , logger )
295300
296301 errs <- mp .ListenTLS (ctx , tlsCfg )
297302}
298303
299- func proxyHTTP (ctx context.Context , cfg HTTPConfig , logger mglog .Logger , handler session.Handler , errs chan error ) {
304+ func proxyHTTP (_ context.Context , cfg HTTPConfig , logger * slog .Logger , handler session.Handler , errs chan error ) {
300305 address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
301306 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
302307 hp , err := hproxy .NewProxy (address , target , handler , logger )
@@ -308,7 +313,7 @@ func proxyHTTP(ctx context.Context, cfg HTTPConfig, logger mglog.Logger, handler
308313 errs <- hp .Listen ()
309314}
310315
311- func proxyHTTPS (ctx context.Context , cfg HTTPConfig , logger mglog .Logger , handler session.Handler , errs chan error ) {
316+ func proxyHTTPS (_ context.Context , cfg HTTPConfig , logger * slog .Logger , handler session.Handler , errs chan error ) {
312317 address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
313318 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
314319 hp , err := hproxy .NewProxy (address , target , handler , logger )
@@ -320,7 +325,7 @@ func proxyHTTPS(ctx context.Context, cfg HTTPConfig, logger mglog.Logger, handle
320325 errs <- hp .ListenTLS (cfg .serverCert , cfg .serverKey )
321326}
322327
323- func proxyWS (ctx context.Context , cfg WSConfig , logger mglog .Logger , handler session.Handler , errs chan error ) {
328+ func proxyWS (_ context.Context , cfg WSConfig , logger * slog .Logger , handler session.Handler , errs chan error ) {
324329 address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
325330 target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
326331 wp , err := websockets .NewProxy (address , target , logger , handler )
@@ -330,7 +335,7 @@ func proxyWS(ctx context.Context, cfg WSConfig, logger mglog.Logger, handler ses
330335 errs <- wp .Listen ()
331336}
332337
333- func proxyWSS (ctx context.Context , cfg config , logger mglog .Logger , handler session.Handler , errs chan error ) {
338+ func proxyWSS (_ context.Context , cfg config , logger * slog .Logger , handler session.Handler , errs chan error ) {
334339 address := fmt .Sprintf ("%s:%s" , cfg .wsConfig .host , cfg .wsConfig .port )
335340 target := fmt .Sprintf ("%s:%s" , cfg .wsConfig .targetHost , cfg .wsConfig .targetPort )
336341 wp , err := websockets .NewProxy (address , target , logger , handler )
@@ -339,3 +344,14 @@ func proxyWSS(ctx context.Context, cfg config, logger mglog.Logger, handler sess
339344 }
340345 errs <- wp .ListenTLS (cfg .serverCert , cfg .serverKey )
341346}
347+
348+ func logServerStart (logger * slog.Logger , name , port , targetPort string ) {
349+ logger .Info ("Starting " + name + " proxy" ,
350+ slog .Group ("server" ,
351+ slog .String ("port" , port ),
352+ ),
353+ slog .Group ("target" ,
354+ slog .String ("port" , targetPort ),
355+ ),
356+ )
357+ }
0 commit comments