token-validator: add a cache when calling wg dump

This commit is contained in:
nemunaire 2020-04-02 16:36:29 +02:00
parent ea61426809
commit 4409886b98
1 changed files with 35 additions and 1 deletions

View File

@ -8,6 +8,7 @@ import (
"net"
"os/exec"
"strings"
"sync"
"time"
)
@ -26,7 +27,13 @@ type WGDump struct {
KeepAlive string
}
func readWgDump() (wgd map[string]WGDump, err error) {
var (
wgDumpCache_data map[string]WGDump = nil
wgDumpCache_time time.Time
wgDumpCache_mutex sync.RWMutex
)
func _readWgDump() (wgd map[string]WGDump, err error) {
out, errr := exec.Command("wg", "show", "wg-adlin", "dump").Output()
if errr != nil {
@ -46,6 +53,33 @@ func readWgDump() (wgd map[string]WGDump, err error) {
return
}
func readWgDump() (wgd map[string]WGDump, err error) {
wgDumpCache_mutex.RLock()
defer wgDumpCache_mutex.RUnlock()
wgd = wgDumpCache_data
if time.Since(wgDumpCache_time) > time.Second*10 {
wgDumpCache_mutex.RUnlock()
wgDumpCache_mutex.Lock()
if time.Since(wgDumpCache_time) > time.Second*10 {
wgd, err = _readWgDump()
if err != nil {
return
}
wgDumpCache_data = wgd
wgDumpCache_time = time.Now()
}
wgDumpCache_mutex.Unlock()
wgDumpCache_mutex.RLock()
}
return wgd, nil
}
type TunnelToken struct {
token []byte
TokenText string