@@ -5,13 +5,13 @@ import (
5
5
"crypto/tls"
6
6
"fmt"
7
7
"log"
8
+ "log/slog"
8
9
"net/http"
9
10
"os"
10
11
"os/signal"
11
12
"strconv"
12
13
"syscall"
13
14
14
- mglog "github.com/absmach/magistrala/logger"
15
15
"github.com/absmach/mproxy/examples/simple"
16
16
hproxy "github.com/absmach/mproxy/pkg/http"
17
17
"github.com/absmach/mproxy/pkg/mqtt"
@@ -104,7 +104,7 @@ type config struct {
104
104
wsMQTTConfig WSMQTTConfig
105
105
wsConfig WSConfig
106
106
107
- logLevel string
107
+ logLevel slog. Level
108
108
}
109
109
110
110
type WSConfig struct {
@@ -146,10 +146,10 @@ type HTTPConfig struct {
146
146
func main () {
147
147
cfg := loadConfig ()
148
148
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 )
153
153
154
154
h := simple .New (logger )
155
155
@@ -164,30 +164,30 @@ func main() {
164
164
}
165
165
166
166
// 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 )
168
168
go proxyMQTTWSS (cfg , tlsCfg , logger , h , errs )
169
169
// 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 )
171
171
go proxyMQTTS (ctx , cfg .mqttConfig , tlsCfg , logger , h , errs )
172
172
// 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 )
174
174
go proxyWSS (ctx , cfg , logger , h , errs )
175
175
// 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 )
177
177
go proxyHTTPS (ctx , cfg .httpConfig , logger , h , errs )
178
178
} else {
179
179
// 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 )
181
181
go proxyMQTTWS (cfg .wsMQTTConfig , logger , h , errs )
182
182
183
183
// 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 )
185
185
go proxyMQTT (ctx , cfg .mqttConfig , logger , h , errs )
186
186
// 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 )
188
188
go proxyWS (ctx , cfg .wsConfig , logger , h , errs )
189
189
// 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 )
191
191
go proxyHTTP (ctx , cfg .httpConfig , logger , h , errs )
192
192
}
193
193
@@ -197,7 +197,7 @@ func main() {
197
197
errs <- fmt .Errorf ("%s" , <- c )
198
198
}()
199
199
200
- err = <- errs
200
+ err : = <- errs
201
201
logger .Error (fmt .Sprintf ("mProxy terminated: %s" , err ))
202
202
}
203
203
@@ -215,6 +215,11 @@ func loadConfig() config {
215
215
log .Fatalf ("Invalid value passed for %s\n " , envClientTLS )
216
216
}
217
217
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
+
218
223
return config {
219
224
// WS
220
225
wsMQTTConfig : WSMQTTConfig {
@@ -261,42 +266,42 @@ func loadConfig() config {
261
266
},
262
267
263
268
// Log
264
- logLevel : env ( envLogLevel , defLogLevel ) ,
269
+ logLevel : level ,
265
270
}
266
271
}
267
272
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 ) {
269
274
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
270
275
wp := websocket .New (target , cfg .targetPath , cfg .targetScheme , handler , nil , logger )
271
276
http .Handle (cfg .path , wp .Handler ())
272
277
273
278
errs <- wp .Listen (cfg .port )
274
279
}
275
280
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 ) {
277
282
target := fmt .Sprintf ("%s:%s" , cfg .wsMQTTConfig .targetHost , cfg .wsMQTTConfig .targetPort )
278
283
wp := websocket .New (target , cfg .wsMQTTConfig .targetPath , cfg .wsMQTTConfig .targetScheme , handler , nil , logger )
279
284
http .Handle (cfg .wsMQTTConfig .wssPath , wp .Handler ())
280
285
errs <- wp .ListenTLS (tlsCfg , cfg .serverCert , cfg .serverKey , cfg .wsMQTTConfig .wssPort )
281
286
}
282
287
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 ) {
284
289
address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
285
290
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
286
291
mp := mqtt .New (address , target , handler , nil , logger )
287
292
288
293
errs <- mp .Listen (ctx )
289
294
}
290
295
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 ) {
292
297
address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .mqttsPort )
293
298
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
294
299
mp := mqtt .New (address , target , handler , nil , logger )
295
300
296
301
errs <- mp .ListenTLS (ctx , tlsCfg )
297
302
}
298
303
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 ) {
300
305
address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
301
306
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
302
307
hp , err := hproxy .NewProxy (address , target , handler , logger )
@@ -308,7 +313,7 @@ func proxyHTTP(ctx context.Context, cfg HTTPConfig, logger mglog.Logger, handler
308
313
errs <- hp .Listen ()
309
314
}
310
315
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 ) {
312
317
address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
313
318
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
314
319
hp , err := hproxy .NewProxy (address , target , handler , logger )
@@ -320,7 +325,7 @@ func proxyHTTPS(ctx context.Context, cfg HTTPConfig, logger mglog.Logger, handle
320
325
errs <- hp .ListenTLS (cfg .serverCert , cfg .serverKey )
321
326
}
322
327
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 ) {
324
329
address := fmt .Sprintf ("%s:%s" , cfg .host , cfg .port )
325
330
target := fmt .Sprintf ("%s:%s" , cfg .targetHost , cfg .targetPort )
326
331
wp , err := websockets .NewProxy (address , target , logger , handler )
@@ -330,7 +335,7 @@ func proxyWS(ctx context.Context, cfg WSConfig, logger mglog.Logger, handler ses
330
335
errs <- wp .Listen ()
331
336
}
332
337
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 ) {
334
339
address := fmt .Sprintf ("%s:%s" , cfg .wsConfig .host , cfg .wsConfig .port )
335
340
target := fmt .Sprintf ("%s:%s" , cfg .wsConfig .targetHost , cfg .wsConfig .targetPort )
336
341
wp , err := websockets .NewProxy (address , target , logger , handler )
@@ -339,3 +344,14 @@ func proxyWSS(ctx context.Context, cfg config, logger mglog.Logger, handler sess
339
344
}
340
345
errs <- wp .ListenTLS (cfg .serverCert , cfg .serverKey )
341
346
}
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