* 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: 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>
* chore: initial commit for 30d badge/chart UI support
* chore revert some changes
* chore build frontend
* chore remove old line
* rebuild frontend
* re-order list
* feat: add support for 1h response chart
* chore(docs): add section about response time chart
* chore(frontend): add missing select
* chore: code format
* chore: new web build
* Revert "chore: code format"
This reverts commit 517f0ce3c8.
* chore(responsechart): remove support for 1h charts
response time is only stored at 1h intervals, having a chart for the past 1h does not make sense.
* feat(alerting): add support for including endpoint errors in custom alerts
- Updated `buildHTTPRequest` method in `AlertProvider` to accept a `result` parameter.
- Added support for including `[ENDPOINT_ERRORS]` in both the request body and URL, which will be replaced by the errors from `Result.Errors[]`.
- Adjusted `CreateExternalEndpointResult` to capture and store errors from query parameters.
- This allows custom alerts to include detailed error information, enhancing the flexibility of alert notifications.
* feat: add ENDPOINT_ERRORS example
* feat: add tests
* Refactor: code review feedback
* delete unsed errors
* Update README.md
* Apply suggestions from code review
---------
Co-authored-by: raojinlin <raojinlin302@gmail.com>
Co-authored-by: TwiN <twin@linux.com>
* feat(storage): Add support for 30d uptime badge
Fix#714
* Fix typo
* Fix test
* Fix typo
* Improve implementation
* Add check in existing test
* Add extra test to ensure functionality works
* Add support for 30d response time chart too
* 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
This fixes the `431 Request Header Fields Too Large` error
By default, the read-buffer-size is 8192, up from fiber's default of 4096.
Fixes#674Fixes#636
Supersedes #637
Supersedes #663
* feat: shields.io endpoint badge
Signed-off-by: Steven Kreitzer <skre@skre.me>
* chore: update readme to include new shields.io badge
Signed-off-by: Steven Kreitzer <skre@skre.me>
---------
Signed-off-by: Steven Kreitzer <skre@skre.me>
Co-authored-by: TwiN <twin@linux.com>
This is because fiber does not work the same way that mux did wrt groups (mux referred to them as subrouters).
I could not apply a middleware to a specific fiber Group due to the groups being prefix-based.
In other words, the only other way to apply middlewares to specific endpoints without changing the path is by applying the security middleware after the routes that did not need to be protected and before the routes that did need to be protected