Skip to content

Commit

Permalink
Add zerolog as logger
Browse files Browse the repository at this point in the history
  • Loading branch information
elct9620 authored and tjjh89017 committed Sep 18, 2024
1 parent 2c6885d commit 53bd12b
Show file tree
Hide file tree
Showing 17 changed files with 166 additions and 69 deletions.
5 changes: 4 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@ require (
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mdlayher/genetlink v1.3.2 // indirect
github.com/mdlayher/netlink v1.7.2 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/rs/zerolog v1.33.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
Expand All @@ -38,7 +41,7 @@ require (
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/sys v0.25.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.17.0 // indirect
Expand Down
16 changes: 16 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/cloudflare/cloudflare-go v0.17.0 h1:lbNR+leC9ZHZteksrTwYVlxg+4eMx5f8wW4jnyMvicM=
github.com/cloudflare/cloudflare-go v0.17.0/go.mod h1:sPWL/lIC6biLEdyGZwBQ1rGQKF1FhM7N60fuNiFdYTI=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand All @@ -10,6 +11,7 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
Expand All @@ -30,6 +32,13 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw=
github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o=
Expand All @@ -53,6 +62,9 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
Expand Down Expand Up @@ -123,12 +135,16 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
Expand Down
5 changes: 4 additions & 1 deletion internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ var envs = map[string][]string{
type Config struct {
WireGuard string `mapstructure:"wg"`
RefreshInterval time.Duration `mapstructure:"refresh_interval"`
Stun struct {
Log struct {
Level string `mapstructure:"level"`
} `mapstructure:"log"`
Stun struct {
Address string `mapstructure:"address"`
} `mapstructure:"stun"`
Cloudflare struct {
Expand Down
8 changes: 5 additions & 3 deletions internal/ctrl/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package ctrl

import (
"context"
"log"

"github.com/rs/zerolog"
"github.com/tjjh89017/stunmesh-go/internal/config"
"github.com/tjjh89017/stunmesh-go/internal/entity"
"golang.zx2c4.com/wireguard/wgctrl"
Expand All @@ -14,21 +14,23 @@ type BootstrapController struct {
config *config.Config
devices DeviceRepository
peers PeerRepository
logger zerolog.Logger
}

func NewBootstrapController(wg *wgctrl.Client, config *config.Config, devices DeviceRepository, peers PeerRepository) *BootstrapController {
func NewBootstrapController(wg *wgctrl.Client, config *config.Config, devices DeviceRepository, peers PeerRepository, logger *zerolog.Logger) *BootstrapController {
return &BootstrapController{
wg: wg,
config: config,
devices: devices,
peers: peers,
logger: logger.With().Str("controller", "bootstrap").Logger(),
}
}

func (ctrl *BootstrapController) Execute(ctx context.Context) {
device, err := ctrl.wg.Device(ctrl.config.WireGuard)
if err != nil {
log.Panic(err)
ctrl.logger.Error().Err(err).Msg("failed to get device")
return
}

Expand Down
24 changes: 15 additions & 9 deletions internal/ctrl/establish.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package ctrl

import (
"context"
"log"
"net"

"github.com/rs/zerolog"
"github.com/tjjh89017/stunmesh-go/internal/entity"
"github.com/tjjh89017/stunmesh-go/plugin"
"golang.zx2c4.com/wireguard/wgctrl"
Expand All @@ -17,35 +17,39 @@ type EstablishController struct {
peers PeerRepository
store plugin.Store
decryptor EndpointDecryptor
logger zerolog.Logger
}

func NewEstablishController(ctrl *wgctrl.Client, devices DeviceRepository, peers PeerRepository, store plugin.Store, decryptor EndpointDecryptor) *EstablishController {
func NewEstablishController(ctrl *wgctrl.Client, devices DeviceRepository, peers PeerRepository, store plugin.Store, decryptor EndpointDecryptor, logger *zerolog.Logger) *EstablishController {
return &EstablishController{
wgCtrl: ctrl,
devices: devices,
peers: peers,
store: store,
decryptor: decryptor,
logger: logger.With().Str("controller", "establish").Logger(),
}
}

func (c *EstablishController) Execute(ctx context.Context, peerId entity.PeerId) {
peer, err := c.peers.Find(ctx, peerId)
if err != nil {
log.Print(err)
c.logger.Error().Err(err).Msg("failed to find peer")
return
}

device, err := c.devices.Find(ctx, entity.DeviceId(peer.DeviceName()))
if err != nil {
log.Print(err)
c.logger.Error().Err(err).Msg("failed to find device")
return
}

endpointData, err := c.store.Get(ctx, peer.RemoteId())
logger := c.logger.With().Str("peer", peer.LocalId()).Str("device", string(device.Name())).Logger()

storeCtx := logger.WithContext(ctx)
endpointData, err := c.store.Get(storeCtx, peer.RemoteId())
if err != nil {
// Failed to get, maybe endpoint didn't upload the record yet, skip.
log.Print(err)
logger.Warn().Err(err).Msg("endpoint is unavailable or not ready")
return
}

Expand All @@ -55,7 +59,8 @@ func (c *EstablishController) Execute(ctx context.Context, peerId entity.PeerId)
Data: endpointData,
})
if err != nil {
log.Panic(err)
logger.Error().Err(err).Msg("failed to decrypt endpoint")
return
}

err = c.wgCtrl.ConfigureDevice(peer.DeviceName(), wgtypes.Config{
Expand All @@ -72,6 +77,7 @@ func (c *EstablishController) Execute(ctx context.Context, peerId entity.PeerId)
})

if err != nil {
log.Panic(err)
logger.Error().Err(err).Msg("failed to configure device")
return
}
}
26 changes: 17 additions & 9 deletions internal/ctrl/publish.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package ctrl

import (
"context"
"log"

"github.com/rs/zerolog"
"github.com/tjjh89017/stunmesh-go/plugin"
)

Expand All @@ -13,53 +13,61 @@ type PublishController struct {
store plugin.Store
resolver StunResolver
encryptor EndpointEncryptor
logger zerolog.Logger
}

func NewPublishController(devices DeviceRepository, peers PeerRepository, store plugin.Store, resolver StunResolver, encryptor EndpointEncryptor) *PublishController {
func NewPublishController(devices DeviceRepository, peers PeerRepository, store plugin.Store, resolver StunResolver, encryptor EndpointEncryptor, logger *zerolog.Logger) *PublishController {
return &PublishController{
devices: devices,
peers: peers,
store: store,
resolver: resolver,
encryptor: encryptor,
logger: logger.With().Str("controller", "publish").Logger(),
}
}

func (c *PublishController) Execute(ctx context.Context) {
devices, err := c.devices.List(ctx)
if err != nil {
log.Print(err)
c.logger.Error().Err(err).Msg("failed to list devices")
return
}

for _, device := range devices {
logger := c.logger.With().Str("device", string(device.Name())).Logger()

host, port, err := c.resolver.Resolve(ctx, uint16(device.ListenPort()))
if err != nil {
log.Panic(err)
logger.Error().Err(err).Msg("failed to resolve outside address")
continue
}
log.Printf("%s outside address:%s:%d", device.Name(), host, port)

logger.Info().Str("host", host).Int("port", int(port)).Msg("outside address")
peers, err := c.peers.ListByDevice(ctx, device.Name())
if err != nil {
log.Print(err)
logger.Error().Err(err).Msg("failed to list peers")
continue
}

for _, peer := range peers {
logger := logger.With().Str("peer", peer.LocalId()).Logger()

res, err := c.encryptor.Encrypt(ctx, &EndpointEncryptRequest{
PeerPublicKey: peer.PublicKey(),
PrivateKey: device.PrivateKey(),
Host: host,
Port: port,
})
if err != nil {
log.Print(err)
logger.Error().Err(err).Msg("failed to encrypt endpoint")
continue
}

err = c.store.Set(ctx, peer.LocalId(), res.Data)
storeCtx := logger.WithContext(ctx)
err = c.store.Set(storeCtx, peer.LocalId(), res.Data)
if err != nil {
log.Print(err)
logger.Error().Err(err).Msg("failed to store endpoint")
continue
}
}
Expand Down
17 changes: 10 additions & 7 deletions internal/ctrl/refresh.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,28 @@ package ctrl

import (
"context"
"log"

"github.com/rs/zerolog"
)

type RefreshController struct {
peers PeerRepository
queue RefreshQueue
peers PeerRepository
queue RefreshQueue
logger zerolog.Logger
}

func NewRefreshController(peers PeerRepository, queue RefreshQueue) *RefreshController {
func NewRefreshController(peers PeerRepository, queue RefreshQueue, logger *zerolog.Logger) *RefreshController {
return &RefreshController{
peers: peers,
queue: queue,
peers: peers,
queue: queue,
logger: logger.With().Str("controller", "refresh").Logger(),
}
}

func (c *RefreshController) Execute(ctx context.Context) {
peers, err := c.peers.List(ctx)
if err != nil {
log.Print(err)
c.logger.Error().Err(err).Msg("failed to list peers")
return
}

Expand Down
21 changes: 15 additions & 6 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ package daemon

import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"

"github.com/rs/zerolog"
"github.com/tjjh89017/stunmesh-go/internal/config"
"github.com/tjjh89017/stunmesh-go/internal/ctrl"
"github.com/tjjh89017/stunmesh-go/internal/entity"
Expand All @@ -21,16 +21,25 @@ type Daemon struct {
publishCtrl *ctrl.PublishController
establishCtrl *ctrl.EstablishController
refreshCtrl *ctrl.RefreshController
logger zerolog.Logger
}

func New(config *config.Config, queue *queue.Queue[entity.PeerId], boot *ctrl.BootstrapController, publish *ctrl.PublishController, establish *ctrl.EstablishController, refresh *ctrl.RefreshController) *Daemon {
func New(
config *config.Config,
queue *queue.Queue[entity.PeerId],
boot *ctrl.BootstrapController,
publish *ctrl.PublishController,
establish *ctrl.EstablishController,
refresh *ctrl.RefreshController,
logger *zerolog.Logger) *Daemon {
return &Daemon{
config: config,
queue: queue,
bootCtrl: boot,
publishCtrl: publish,
establishCtrl: establish,
refreshCtrl: refresh,
logger: logger.With().Str("component", "daemon").Logger(),
}
}

Expand All @@ -41,7 +50,7 @@ func (d *Daemon) Run(ctx context.Context) {
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

defer func() {
log.Println("Shutting down")
d.logger.Info().Msg("shutting down")
signal.Stop(signalChan)
close(signalChan)
cancel()
Expand All @@ -50,7 +59,7 @@ func (d *Daemon) Run(ctx context.Context) {
d.bootCtrl.Execute(daemonCtx)
go d.refreshCtrl.Execute(daemonCtx)
go d.publishCtrl.Execute(daemonCtx)
log.Printf("Daemon started with refresh interval %s", d.config.RefreshInterval)
d.logger.Info().Msgf("daemon started with refresh interval %s", d.config.RefreshInterval)

ticker := time.NewTicker(d.config.RefreshInterval)

Expand All @@ -61,11 +70,11 @@ func (d *Daemon) Run(ctx context.Context) {
case <-signalChan:
return
case peerId := <-d.queue.Dequeue():
log.Printf("Processing peer %s", peerId)
d.logger.Info().Str("peer", peerId.String()).Msg("processing peer")

go d.establishCtrl.Execute(daemonCtx, peerId)
case <-ticker.C:
log.Println("Refreshing peers")
d.logger.Info().Msg("refreshing peers")

go d.publishCtrl.Execute(daemonCtx)
go d.refreshCtrl.Execute(daemonCtx)
Expand Down
Loading

0 comments on commit 53bd12b

Please sign in to comment.