* feat(suite): Implement Suites
Fixes#1230
* Update docs
* Fix variable alignment
* Prevent always-run endpoint from running if a context placeholder fails to resolve in the URL
* Return errors when a context placeholder path fails to resolve
* Add a couple of unit tests
* Add a couple of unit tests
* fix(ui): Update group count properly
Fixes#1233
* refactor: Pass down entire config instead of several sub-configs
* fix: Change default suite interval and timeout
* fix: Deprecate disable-monitoring-lock in favor of concurrency
* fix: Make sure there are no duplicate keys
* Refactor some code
* Update watchdog/watchdog.go
* Update web/app/src/components/StepDetailsModal.vue
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* chore: Remove useless log
* fix: Set default concurrency to 3 instead of 5
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
feat: improve Prometheus metrics registration and cleanup
- Add a function to unregister all previously registered Prometheus metrics
- Track metric initialization state to prevent duplicate registration
- Ensure metrics are unregistered before re-initializing them
- Store the current registerer for proper metric cleanup
- Call the new unregister function during application stop
ref: https://github.com/TwiN/gatus/pull/979#issuecomment-3157044249
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* feat: add dynamic labels support for Prometheus metrics
- Add `toBoolPtr` function to convert a bool to a bool pointer
- Add `contains` function to check if a key exists in a slice
- Add `GetMetricLabels` method to `Config` struct to return unique metric labels from enabled endpoints
- Change file permission notation from `0644` to `0o644` in `config_test.go`
- Add `Labels` field to `Endpoint` struct for key-value pairs
- Initialize Prometheus metrics with dynamic labels from configuration
- Modify `PublishMetricsForEndpoint` to include dynamic labels
- Add test for `GetMetricLabels` method in `config_test.go`
- Update `watchdog` to pass labels to monitoring and execution functions
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* refactor: refactor pointer conversion utility and update related tests
- Rename `toBoolPtr` function to a generic `toPtr` function
- Update tests to use the new `toPtr` function instead of `toBoolPtr`
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* refactor: refactor utility functions and improve test coverage
- Move `toPtr` and `contains` utility functions to a new file `util.go`
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* missing labels parameter
* refactor: reorder parameters in metrics-related functions and tests
- Reorder parameters in `PublishMetricsForEndpoint` function
- Update test cases to match the new parameter order in `PublishMetricsForEndpoint`
- Reorder parameters in `monitor` function
- Adjust `monitor` function calls to match the new parameter order
- Reorder parameters in `execute` function call to `PublishMetricsForEndpoint`
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* Update main.go
* Update config/config.go
* docs: improve documentation formatting, examples, and readability
- Add multiple blank lines for spacing in the README file
- Fix formatting issues in markdown tables
- Correct deprecated formatting for Teams alerts
- Replace single quotes with double quotes in JSON examples
- Add new sections and examples for various configurations and endpoints
- Improve readability and consistency in the documentation
- Update links and references to examples and configurations
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* docs: enhance custom labels support in Prometheus metrics
- Add a section for custom labels in the README
- Include an example configuration for custom labels in Prometheus metrics initialization
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* refactor: rename and refactor metric labels to use ExtraLabels
- Rename the endpoint metric labels field from Labels to ExtraLabels and update its YAML tag accordingly
- Update code and tests to use ExtraLabels instead of Labels for metrics
- Replace GetMetricLabels with GetUniqueExtraMetricLabels and adjust usages throughout the codebase
- Ensure all metric publishing and monitoring functions accept and use the new extraLabels naming and semantics
- Update tests to verify correct extraction and handling of ExtraLabels for enabled endpoints
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* refactor: refactor parameter order for monitor and execute for consistency
- Change the order of parameters for monitor and execute functions to group extraLabels consistently as the last argument before context.
- Update all relevant function calls and signatures to reflect the new parameter order.
- Replace usage of labels with extraLabels for clarity and consistency.
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* test: improve initialization and labeling of Prometheus metrics
- Add a test to verify that Prometheus metrics initialize correctly with extra labels.
- Ensure metrics variables are properly initialized and not nil.
- Check that WithLabelValues accepts both default and extra labels without causing a panic.
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* test: improve Prometheus metrics testing for extra label handling
- Remove a redundant test for WithLabelValues label length.
- Add a new test to verify that extraLabels are correctly included in exported Prometheus metrics.
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* refactor: refactor metrics to support custom Prometheus registries
- Refactor metrics initialization to accept a custom Prometheus registry, defaulting to the global registry when nil
- Replace promauto with direct metric construction and explicit registration
- Update tests to use dedicated, isolated registries instead of the default global registry
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* Revert README.md to a previous version
* docs: document support for custom metric labels in endpoints
- Add documentation section explaining support for custom labels on metrics
- Provide YAML configuration example illustrating the new labels field for endpoints
- Update table of contents to include the custom labels section
Signed-off-by: appleboy <appleboy.tw@gmail.com>
---------
Signed-off-by: appleboy <appleboy.tw@gmail.com>
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Co-authored-by: TwiN <twin@linux.com>
* introduces TwiN/logr library
* use new features of logr library
* minor tweaks and formatting
* Apply suggestions from code review
---------
Co-authored-by: TwiN <twin@linux.com>
* refactor: Partially break core package into dns, result and ssh packages
* refactor: Move core package to config/endpoint
* refactor: Fix warning about overlapping imported package name with endpoint variable
* refactor: Rename EndpointStatus to Status
* refactor: Merge result pkg back into endpoint pkg, because it makes more sense
* refactor: Rename parameter r to result in Condition.evaluate
* refactor: Rename parameter r to result
* refactor: Revert accidental change to endpoint.TypeDNS
* refactor: Rename parameter r to result
* refactor: Merge util package into endpoint package
* refactor: Rename parameter r to result
* fix(watchdog): Add functions to avoid dangling file descriptors
* Change function name and add comment under core/endpoint.go
- change the function name of CloseHTTPConnection() to Close()
- add some comments above Close() function
* Update core/endpoint.go
* Update core/endpoint.go
---------
Co-authored-by: Richard Cheng <richard_cheng@trendmicro.com>
Co-authored-by: TwiN <twin@linux.com>
Host and port can be specified by either a environment variable or a
dedicated command line parameter. Command line parameters will be preferred
over environment variables, which will be preferred over the application
defaults.