|
@@ -6,6 +6,7 @@ import (
|
|
|
"syscall"
|
|
|
"time"
|
|
|
|
|
|
+ leaky "github.com/crowdsecurity/crowdsec/pkg/leakybucket"
|
|
|
"github.com/crowdsecurity/crowdsec/pkg/outputs"
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
|
@@ -13,33 +14,61 @@ import (
|
|
|
)
|
|
|
|
|
|
func reloadHandler(sig os.Signal) error {
|
|
|
+
|
|
|
+ //stop go routines
|
|
|
+ if err := ShutdownRoutines(); err != nil {
|
|
|
+ log.Errorf("Failed to shut down routines: %s", err)
|
|
|
+ }
|
|
|
+ //dump buckets state
|
|
|
+ if err := leaky.DumpBucketsStateAt("buckets_state.json", time.Now(), buckets); err != nil {
|
|
|
+ log.Fatalf("Failed dumping bucket state : %s", err)
|
|
|
+ }
|
|
|
+ //reload configurations
|
|
|
+
|
|
|
+ //restore bucket state
|
|
|
+ //start processing routines
|
|
|
+ //start acquis routine
|
|
|
+
|
|
|
+ log.Printf("reloading")
|
|
|
dumpMetrics()
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func termHandler(sig os.Signal) error {
|
|
|
- log.Warningf("Shutting down routines")
|
|
|
+func ShutdownRoutines() error {
|
|
|
+ var reterr error
|
|
|
|
|
|
acquisTomb.Kill(nil)
|
|
|
log.Infof("waiting for acquisition to finish")
|
|
|
if err := acquisTomb.Wait(); err != nil {
|
|
|
log.Warningf("Acquisition returned error : %s", err)
|
|
|
+ reterr = err
|
|
|
}
|
|
|
log.Infof("acquisition is finished, wait for parser/bucket/ouputs.")
|
|
|
parsersTomb.Kill(nil)
|
|
|
if err := parsersTomb.Wait(); err != nil {
|
|
|
log.Warningf("Parsers returned error : %s", err)
|
|
|
+ reterr = err
|
|
|
}
|
|
|
log.Infof("parsers is done")
|
|
|
bucketsTomb.Kill(nil)
|
|
|
if err := bucketsTomb.Wait(); err != nil {
|
|
|
log.Warningf("Buckets returned error : %s", err)
|
|
|
+ reterr = err
|
|
|
}
|
|
|
log.Infof("buckets is done")
|
|
|
outputsTomb.Kill(nil)
|
|
|
if err := outputsTomb.Wait(); err != nil {
|
|
|
log.Warningf("Ouputs returned error : %s", err)
|
|
|
+ reterr = err
|
|
|
+
|
|
|
+ }
|
|
|
+ return reterr
|
|
|
+}
|
|
|
|
|
|
+func termHandler(sig os.Signal) error {
|
|
|
+ log.Warningf("Shutting down routines")
|
|
|
+ if err := ShutdownRoutines(); err != nil {
|
|
|
+ log.Warningf("Error encountered while shutting down routines : %s", err)
|
|
|
}
|
|
|
log.Infof("ouputs is done")
|
|
|
dumpMetrics()
|