feat: add support for extra labels in alert email notifications
- Add support for including extra labels in email alert messages if present
- Update tests to cover cases with and without extra labels in alert emails
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.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>
- Use `time.Ticker` instead of `time.After` for periodic operations in `autoSave` function
- Use `time.Ticker` instead of `time.After` for periodic operations in `monitor` function
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* feat: implement Gitea alerting provider integration
- Add TypeGitea for the gitea alerting provider
- Introduce a new file for the gitea alerting provider implementation
- Implement the AlertProvider struct with necessary fields for gitea integration
- Add validation logic for the AlertProvider configuration
- Create tests for the AlertProvider's validation and sending functionality
- Update go.mod to include the gitea SDK as a dependency
- Modify the alerting configuration validation to recognize TypeGitea
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* chore: integrate Gitea alerting provider configuration
- Add Gitea alerting provider import to the configuration file
- Update the comment for the RepositoryURL field to reflect Gitea instead of GitHub
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* feat: add Assignees support to AlertProvider functionality
- Add a field for Assignees to the AlertProvider struct
- Update the Send function to include Assignees in the alert payload
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* feat: implement Gitea alerting configuration and documentation
- Add a new image asset for Gitea alerts
- Update the README to include configuration details for Gitea alerts
- Introduce parameters for Gitea alerting, including repository URL and personal access token
- Document the behavior of the Gitea alerting provider regarding issue creation and resolution
- Include an example YAML configuration for Gitea alerts
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* Update README.md
Co-authored-by: TwiN <twin@linux.com>
* Update README.md
Co-authored-by: TwiN <twin@linux.com>
* Update README.md
Co-authored-by: TwiN <twin@linux.com>
* feat: refactor AlertProvider for improved client configuration
- Add import for the Gatus client library
- Remove the SkipVerify field from the AlertProvider struct
- Introduce ClientConfig field in the AlertProvider struct for client configuration
- Update validation logic to check for ClientConfig instead of SkipVerify
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* Update README.md
Co-authored-by: TwiN <twin@linux.com>
* chore: update configuration for Gitea integration
- Change references from GitHub to Gitea in the configuration section
- Update alerting provider descriptions to reflect the correct platform
- Swap the order of GitHub and Gitea configurations
- Replace Gitea alert image with GitHub alert image
- Adjust the type field from gitea to github in the relevant sections
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* fix: ensure ClientConfig is validated and defaults set
- Add a check for nil ClientConfig in the IsValid function
- Set ClientConfig to a default configuration if it is nil
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
---------
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Co-authored-by: TwiN <twin@linux.com>
* feat: enhance HTTP client configuration with proxy support
- Add `ProxyURL` field to `Config` struct with YAML tag
- Implement proxy URL parsing and setting in `getHTTPClient` method
- Add test case for `getHTTPClient` method with custom proxy URL setting
- Include `net/url` package in both `config.go` and `config_test.go` files
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* docs: enhance README with Proxy and OAuth2 Docs
- Remove empty lines from README.md
- Add documentation for proxy configuration in client examples
- Include YAML examples for client using a proxy, custom DNS resolver, OAuth2, and identity-aware proxy configurations in README.md
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* docs: add proxy client
Signed-off-by: appleboy <appleboy.tw@gmail.com>
* Update client/config.go
* Update README.md
* Update client/config_test.go
---------
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Signed-off-by: appleboy <appleboy.tw@gmail.com>
Co-authored-by: TwiN <twin@linux.com>
* build: refine Makefile targets and build command
- Remove `test` from `.PHONY` and add `install`, `run`, and `clean` targets to `.PHONY`
- Replace build command to include verbose flag and remove `-mod vendor` option
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* docs: refine README structure and update tests
- Add a "Table of Contents" section to the README
- Reorganize sections within the README, moving "Configuring AWS SES alerts" and "How to change the color thresholds of the response time badge"
- Remove "Sponsors" section from the README
- Update the test command in the README from `go test ./... -mod vendor` to `go test -v ./...`
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
---------
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* feat(alerting): Add group-specific webhook URL for discord
Add group-specific webhook URL for discord alert
Provides support for paging multiple Discords based on the group selector while keeping backward compatibility to the old Discords configuration manifest
integration per team can be specified in the overrides sections in an array form.
ref: #96
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* docs: update
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
* Update README.md
* Update README.md
* Update alerting/provider/discord/discord.go
Co-authored-by: TwiN <twin@linux.com>
* Update README.md
Co-authored-by: TwiN <twin@linux.com>
* test: revert testing name
* Update alerting/provider/discord/discord_test.go
Co-authored-by: TwiN <twin@linux.com>
Co-authored-by: TwiN <twin@linux.com>