You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wg-access-server/internal/devices/metadata.go

47 lines
1.1 KiB
Go

package devices
import (
"time"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
func metadataLoop(d *DeviceManager) {
for {
syncMetrics(d)
time.Sleep(30 * time.Second)
}
}
func syncMetrics(d *DeviceManager) {
logrus.Debug("metadata sync executing")
devices, err := d.ListAllDevices()
if err != nil {
logrus.Warn(errors.Wrap(err, "failed to list devices - metrics cannot be recorded"))
return
}
peers, err := d.wg.ListPeers()
if err != nil {
logrus.Warn(errors.Wrap(err, "failed to list peers - metrics cannot be recorded"))
return
}
for _, peer := range peers {
for _, device := range devices {
if peer.PublicKey.String() == device.PublicKey {
device.ReceiveBytes = peer.ReceiveBytes
device.TransmitBytes = peer.TransmitBytes
if !peer.LastHandshakeTime.IsZero() {
device.LastHandshakeTime = &peer.LastHandshakeTime
}
if peer.Endpoint != nil {
device.Endpoint = peer.Endpoint.IP.String()
}
if err := d.SaveDevice(device); err != nil {
logrus.Debug(errors.Wrap(err, "failed to update device metadata"))
}
}
}
}
}