From 5ab924f5ad4e46913f5593439e1fbeadf509989d Mon Sep 17 00:00:00 2001 From: rasmus Date: Fri, 18 Aug 2023 02:47:55 +0300 Subject: [PATCH] Implement #5: SIGUSR1 https://git.k-space.ee/k-space/godoor/issues/5 --- godoor.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/godoor.go b/godoor.go index d9e7af8..639998a 100644 --- a/godoor.go +++ b/godoor.go @@ -134,7 +134,7 @@ func main() { godoorBuildInfo.WithLabelValues(Version, Commit).Set(1) go func() { - setup() + setup(ctx) }() <-ctx.Done() @@ -188,7 +188,7 @@ func loadConfig() { } } -func setup() { +func setup(ctx context.Context) { log.Println("Started Setup") if config.mock { @@ -239,6 +239,8 @@ func setup() { } }() + go listenSig1(ctx, wiegand) + log.Println("Initialized longpoll event loop") go cardRunner(wiegand) @@ -246,6 +248,24 @@ func setup() { log.Println("Setup completed") } +func listenSig1(ctx context.Context, wiegand Wiegand) { + usrSig := make(chan os.Signal) + signal.Notify(usrSig, syscall.SIGUSR1) + + for { + select { + case <-usrSig: + err := OpenAndCloseDoor(wiegand) + log.Printf("Emergecy opening door as prompted by SIGUSR1") + if err != nil { + log.Printf("opening door: %v", err) + } + case <-ctx.Done(): + return + } + } +} + func runHttpServer() { http.Handle("/metrics", promhttp.Handler()) log.Printf("Running prometheus metrics on http://%s/metrics", config.prometheusMetricsBind)