From 9bd5c38a966074b564ecd843ad362ca6495a7250 Mon Sep 17 00:00:00 2001 From: newsr <35871065+1newsr@users.noreply.github.com> Date: Sun, 19 Sep 2021 00:52:11 +0900 Subject: [PATCH] Add enabled parameter to service (#175) * feat: Add enabled flag to service * Add IsEnabled method Co-authored-by: 1newsr <1newsr@users.noreply.github.com> --- README.md | 1 + core/service.go | 11 +++++++++++ core/service_test.go | 12 ++++++++++++ watchdog/watchdog.go | 8 +++++--- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bb33f917..2c537a44 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ If you want to test it locally, see [Docker](#docker). | `metrics` | Whether to expose metrics at /metrics. | `false` | | `storage` | [Storage configuration](#storage) | `{}` | | `services` | List of services to monitor. | Required `[]` | +| `services[].enabled` | Whether to enable the service. | `true` | | `services[].name` | Name of the service. Can be anything. | Required `""` | | `services[].group` | Group name. Used to group multiple services together on the dashboard.
See [Service groups](#service-groups). | `""` | | `services[].url` | URL to send the request to. | Required `""` | diff --git a/core/service.go b/core/service.go index d8db2f49..4840e9d5 100644 --- a/core/service.go +++ b/core/service.go @@ -45,6 +45,9 @@ var ( // Service is the configuration of a monitored endpoint type Service struct { + // Enabled defines whether to enable the service + Enabled *bool `yaml:"enabled,omitempty"` + // Name of the service. Can be anything. Name string `yaml:"name"` @@ -91,6 +94,14 @@ type Service struct { NumberOfSuccessesInARow int } +// IsEnabled returns whether the service is enabled or not +func (service Service) IsEnabled() bool { + if service.Enabled == nil { + return true + } + return *service.Enabled +} + // ValidateAndSetDefaults validates the service's configuration and sets the default value of fields that have one func (service *Service) ValidateAndSetDefaults() error { // Set default values diff --git a/core/service_test.go b/core/service_test.go index ab6d0ce1..cdaee2ce 100644 --- a/core/service_test.go +++ b/core/service_test.go @@ -10,6 +10,18 @@ import ( "github.com/TwinProduction/gatus/client" ) +func TestService_IsEnabled(t *testing.T) { + if !(Service{Enabled: nil}).IsEnabled() { + t.Error("service.IsEnabled() should've returned true, because Enabled was set to nil") + } + if value := false; (Service{Enabled: &value}).IsEnabled() { + t.Error("service.IsEnabled() should've returned false, because Enabled was set to false") + } + if value := true; !(Service{Enabled: &value}).IsEnabled() { + t.Error("Service.IsEnabled() should've returned true, because Enabled was set to true") + } +} + func TestService_ValidateAndSetDefaults(t *testing.T) { condition := Condition("[STATUS] == 200") service := Service{ diff --git a/watchdog/watchdog.go b/watchdog/watchdog.go index d4ff1642..4689cfef 100644 --- a/watchdog/watchdog.go +++ b/watchdog/watchdog.go @@ -26,9 +26,11 @@ var ( func Monitor(cfg *config.Config) { ctx, cancelFunc = context.WithCancel(context.Background()) for _, service := range cfg.Services { - // To prevent multiple requests from running at the same time, we'll wait for a little bit before each iteration - time.Sleep(1111 * time.Millisecond) - go monitor(service, cfg.Alerting, cfg.DisableMonitoringLock, cfg.Metrics, cfg.Debug, ctx) + if service.IsEnabled() { + // To prevent multiple requests from running at the same time, we'll wait for a little bit before each iteration + time.Sleep(1111 * time.Millisecond) + go monitor(service, cfg.Alerting, cfg.DisableMonitoringLock, cfg.Metrics, cfg.Debug, ctx) + } } }