Skip to content

Commit 8388ddc

Browse files
committed
Allow regenerating files when sighup is received
Fixes #135
1 parent cb69dac commit 8388ddc

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

generator.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package dockergen
33
import (
44
"fmt"
55
"log"
6+
"os"
67
"os/exec"
8+
"os/signal"
79
"strings"
810
"sync"
11+
"syscall"
912
"time"
1013

1114
"github.com/fsouza/go-dockerclient"
@@ -66,11 +69,34 @@ func (g *generator) Generate() error {
6669
g.generateFromContainers(g.Client)
6770
g.generateAtInterval(g.Client, g.Configs)
6871
g.generateFromEvents(g.Client, g.Configs)
72+
g.generateFromSignals()
6973
g.wg.Wait()
7074

7175
return nil
7276
}
7377

78+
func (g *generator) generateFromSignals() {
79+
sigs := make(chan os.Signal, 1)
80+
signal.Notify(sigs, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGKILL)
81+
82+
g.wg.Add(1)
83+
go func() {
84+
defer g.wg.Done()
85+
86+
for {
87+
sig := <-sigs
88+
log.Printf("Received signal: %s\n", sig)
89+
switch sig {
90+
case syscall.SIGHUP:
91+
g.generateFromContainers(g.Client)
92+
case syscall.SIGQUIT, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGINT:
93+
// exit when context is done
94+
return
95+
}
96+
}
97+
}()
98+
}
99+
74100
func (g *generator) generateFromContainers(client *docker.Client) {
75101
containers, err := g.getContainers(client)
76102
if err != nil {

0 commit comments

Comments
 (0)