mirror of
https://github.com/cooperspencer/gickup
synced 2024-11-08 12:09:18 +01:00
feat: Support multiple heartbeat URLs (#109)
* feat: add heartbeat metrics * feat: Support multiple heartbeat URLs #100 introduced heartbeat support but only supported one URL. This PR was closed, however I've re-introduced this feature and added support for multiple heartbeat URLs as discussed in the #100 discussion. This also resolves #108 which is a feature request for the heartbeat feature. * fix: When sending the heartbeat fails, log an error but don't crash the program This prevents problems with external services from causing the program to quit. Co-authored-by: Matthew Toohey <contact@mtoohey.com> Co-authored-by: Jordan Crawford <>
This commit is contained in:
parent
96419e641e
commit
510e234e52
@ -150,6 +150,10 @@ log: # optional
|
||||
maxage: 7 # keep logs for 7 days
|
||||
|
||||
metrics:
|
||||
prometheus:
|
||||
prometheus: # optional
|
||||
endpoint: /metrics
|
||||
listen_addr: ":6178" # default listens on port 6178 on all IPs.
|
||||
heartbeat: # optional - upon successful backup, makes a GET http request to one or more URLs. This is useful for use with monitoring services such as healthchecks.io or deadmanssnitch.com
|
||||
urls:
|
||||
- http(s)://url-to-make-request-to
|
||||
- http(s)://another-url-to-make-request-to
|
||||
|
5
main.go
5
main.go
@ -17,6 +17,7 @@ import (
|
||||
"github.com/cooperspencer/gickup/gogs"
|
||||
"github.com/cooperspencer/gickup/local"
|
||||
"github.com/cooperspencer/gickup/logger"
|
||||
"github.com/cooperspencer/gickup/metrics/heartbeat"
|
||||
"github.com/cooperspencer/gickup/metrics/prometheus"
|
||||
"github.com/cooperspencer/gickup/types"
|
||||
"github.com/robfig/cron/v3"
|
||||
@ -183,6 +184,10 @@ func runBackup(conf *types.Conf) {
|
||||
prometheus.JobsComplete.Inc()
|
||||
prometheus.JobDuration.Observe(duration.Seconds())
|
||||
|
||||
if len(conf.Metrics.Heartbeat.URLs) > 0 {
|
||||
heartbeat.Send(conf.Metrics.Heartbeat)
|
||||
}
|
||||
|
||||
log.Info().
|
||||
Str("duration", duration.String()).
|
||||
Msg("Backup run complete")
|
||||
|
18
metrics/heartbeat/heartbeat.go
Normal file
18
metrics/heartbeat/heartbeat.go
Normal file
@ -0,0 +1,18 @@
|
||||
package heartbeat
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/cooperspencer/gickup/types"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func Send(conf types.HeartbeatConfig) {
|
||||
for _, u := range conf.URLs {
|
||||
log.Info().Str("url", u).Msg("sending heartbeat")
|
||||
_, err := http.Get(u)
|
||||
if err != nil {
|
||||
log.Error().Str("monitoring", "heartbeat").Msg(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
@ -58,9 +58,14 @@ type PrometheusConfig struct {
|
||||
Endpoint string `yaml:"endpoint"`
|
||||
}
|
||||
|
||||
type HeartbeatConfig struct {
|
||||
URLs []string `yaml:"urls"`
|
||||
}
|
||||
|
||||
// Metrics TODO.
|
||||
type Metrics struct {
|
||||
Prometheus PrometheusConfig `yaml:"prometheus"`
|
||||
Heartbeat HeartbeatConfig `yaml:"heartbeat"`
|
||||
}
|
||||
|
||||
// Logging TODO.
|
||||
|
Loading…
Reference in New Issue
Block a user