token-validator: add a cache when calling wg dump
This commit is contained in:
parent
ea61426809
commit
4409886b98
|
@ -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
|
||||
|
|
Reference in New Issue