diff --git a/README.md b/README.md index d67c27b..ed68e91 100644 --- a/README.md +++ b/README.md @@ -58,4 +58,5 @@ Usage of ./statsdaemon: -receive-counter="": Metric name for total metrics received per interval -tcpaddr="": TCP service address, if set -version=false: print version string + -heartbeat-file="": heartbeat file to update after a successful write to graphite ``` diff --git a/statsdaemon.go b/statsdaemon.go index a4d24e6..e52f04d 100644 --- a/statsdaemon.go +++ b/statsdaemon.go @@ -101,6 +101,7 @@ var ( percentThreshold = Percentiles{} prefix = flag.String("prefix", "", "Prefix for all stats") postfix = flag.String("postfix", "", "Postfix for all stats") + heartbeatFilePath = flag.String("heartbeat-file", "", "heartbeat file to update after a successful write to graphite.") ) func init() { @@ -245,6 +246,9 @@ func submit(deadline time.Time) error { } log.Printf("sent %d stats to %s", num, *graphiteAddress) + if *heartbeatFilePath != "" { + heartbeat() + } return nil } @@ -572,6 +576,26 @@ func tcpListener() { } } +func heartbeat() { + _, err := os.Stat(*heartbeatFilePath) + if os.IsNotExist(err) { + file, err := os.Create(*heartbeatFilePath) + if err != nil { + log.Fatalf("ERROR: Creating heartbeat file - %s", err) + } + defer file.Close() + } else { + currentTime := time.Now() + err = os.Chtimes(*heartbeatFilePath, currentTime, currentTime) + if err != nil { + log.Fatalf("ERROR: Touching %s", err) + } + } + if err != nil { + log.Fatalf("ERROR: %s", err) + } +} + func main() { flag.Parse()