Skip to content

Conversation

@TwiN
Copy link
Owner

@TwiN TwiN commented Sep 3, 2025

Summary

This is a new core feature, and makes massive changes throughout the entire codebase.

Suites are collections of endpoints that are executed sequentially with a shared context.

This allows you to create complex monitoring scenarios where the result from one endpoint can be used in subsequent endpoints, enabling workflow-style monitoring.

Here are a few cases in which suites could be useful:

  • Testing multi-step authentication flows (login -> access protected resource -> logout)
  • API workflows where you need to chain requests (create resource -> update -> verify -> delete)
  • Monitoring business processes that span multiple services
  • Validating data consistency across multiple endpoints

This is a feature I have been wanting to implement for a very long time, and coupled with Gatus' extremely powerful and customizable endpoint health validating capabilities (vs. most other status pages that are limited to basic checks), I believe that suites are what will bring Gatus into a league of its own.

2025-09-02_222312

Fixes #1230

Fixes #1233 (unrelated to suites)

Fixes #1214 (this deprecates disable-monitoring-lock in favor of a new concurrency parameter): this was needed, because some complex suites could take minutes to complete, which would have locked concurrent runs for as much time (not acceptable)

Checklist

  • Tested and/or added tests to validate that the changes work as intended, if applicable.
  • Updated documentation in README.md, if applicable.

@TwiN TwiN added feature New feature or request area/storage Related to storage area/ui Related to the user interface area/metrics Related to metrics area/api Related to the REST API labels Sep 3, 2025
@TwiN TwiN requested a review from Copilot September 5, 2025 19:11
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements Suites - a major new feature that allows creating collections of endpoints that execute sequentially with shared context. This enables complex monitoring scenarios like multi-step authentication flows and API workflows where results from one endpoint can be used in subsequent endpoints.

Key changes include:

  • Added complete suite execution engine with context sharing and sequential endpoint processing
  • Added suite storage layer with database schema and API endpoints
  • Added comprehensive frontend UI for viewing suite execution results and flow diagrams

Reviewed Changes

Copilot reviewed 70 out of 74 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
web/static/css/app.css Updated compiled Tailwind CSS with new suite-related styles
web/app/src/views/SuiteDetails.vue New comprehensive suite details view with execution flow visualization
web/app/src/views/Home.vue Enhanced dashboard to display both endpoints and suites
web/app/src/views/EndpointDetails.vue Migrated from helper mixin to time utilities
web/app/src/utils/time.js New centralized time formatting utilities
web/app/src/utils/format.js New duration formatting utilities
web/app/src/router/index.js Added route for suite details page
web/app/src/components/* New suite-specific UI components for flow visualization
storage/store/sql/sql.go Added comprehensive suite storage with database schema
config/suite/* Core suite implementation with execution engine
watchdog/* Extended monitoring system to support suite execution
metrics/metrics.go Added Prometheus metrics for suite monitoring

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@TwiN
Copy link
Owner Author

TwiN commented Sep 5, 2025

I've gone over the changes at least 20 times. I'm sure I missed something, so I'll have to let this soak on the latest tag for some time, but here goes nothing.

@TwiN TwiN merged commit d668a14 into master Sep 5, 2025
3 checks passed
@TwiN TwiN deleted the feat/suites branch September 5, 2025 19:39
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Sep 18, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/twin/gatus](https://github.com/TwiN/gatus) | minor | `v5.23.2` -> `v5.24.0` |

---

### Release Notes

<details>
<summary>TwiN/gatus (ghcr.io/twin/gatus)</summary>

### [`v5.24.0`](https://github.com/TwiN/gatus/releases/tag/v5.24.0)

[Compare Source](TwiN/gatus@v5.23.2...v5.24.0)

Another big update worthy of highlights. There are 3 big changes coming to Gatus with this release.

- **Suites** (ALPHA): To keep it short, this allows you to monitor a list of endpoints in order, but those endpoints have a shared context that allows you to store values and compare or use them in other endpoints. For more information, see <TwiN/gatus#1241>
- **New alerting providers**: 14 new alerting providers have been added, but there's a catch. I don't have time to test this many providers, so I'm trying something new, namely, letting users who want to use those alerting providers test them for me. For more information, see <TwiN/gatus#1223>
- **RDAP support for `[DOMAIN_EXPIRATION]` placeholder**: Some TLDs have started dropping support for WHOIS, as such, support for RDAP has been added. WHOIS will still be used as a fallback if RDAP fails to resolve the domain expiration of a domain.

I am very excited to finally have made some progress on suites. It's missing some features, and it required a lot of redesigning, so I expect some complaints, but with suites, the possibilities feel endless. You can monitor entire workflows, simulate complex user behavior, not just READ-type of behavior, but WRITE as well, as you can configure an endpoint to run even if the workflow fails to clean up whatever resource you created, and so much more. Suites have some serious potential.

#### What's Changed

- feat(suite): Implement Suites by [@&#8203;TwiN](https://github.com/TwiN) in [#&#8203;1239](TwiN/gatus#1239)
- feat(alerting): Add new providers for Datadog, IFTTT, Line, NewRelic, Plivo, RocketChat, SendGrid, Signal, SIGNL4, Splunk, Squadcast, Vonage, Webex and Zapier by [@&#8203;TwiN](https://github.com/TwiN) in [#&#8203;1224](TwiN/gatus#1224)
- feat(client): Add RDAP support for domain expiration by [@&#8203;ju-ef](https://github.com/ju-ef) in [#&#8203;1181](TwiN/gatus#1181)
- feat(client): starttls support for dns resolver by [@&#8203;eleith](https://github.com/eleith) in [#&#8203;1253](TwiN/gatus#1253)
- fix(alerting): Adjust minimum reminder config parsing by [@&#8203;xconverge](https://github.com/xconverge) in [#&#8203;1226](TwiN/gatus#1226)
- fix(client): add forward ip support in PTR query-name by [@&#8203;denis-ev](https://github.com/denis-ev) in [#&#8203;1261](TwiN/gatus#1261)
- docs: Fix typo in Zulip configuration section by [@&#8203;XavierDupuis](https://github.com/XavierDupuis) in [#&#8203;1220](TwiN/gatus#1220)
- docs: information on escaping endpoint url in config by [@&#8203;muzy](https://github.com/muzy) in [#&#8203;1242](TwiN/gatus#1242)

#### New Contributors

- [@&#8203;XavierDupuis](https://github.com/XavierDupuis) made their first contribution in [#&#8203;1220](TwiN/gatus#1220)
- [@&#8203;eleith](https://github.com/eleith) made their first contribution in [#&#8203;1253](TwiN/gatus#1253)
- [@&#8203;ju-ef](https://github.com/ju-ef) made their first contribution in [#&#8203;1181](TwiN/gatus#1181)
- [@&#8203;denis-ev](https://github.com/denis-ev) made their first contribution in [#&#8203;1261](TwiN/gatus#1261)
- [@&#8203;muzy](https://github.com/muzy) made their first contribution in [#&#8203;1242](TwiN/gatus#1242)

**Full Changelog**: <TwiN/gatus@v5.23.2...v5.24.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMTYuNSIsInVwZGF0ZWRJblZlciI6IjQxLjExNi41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbWFnZSJdfQ==-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/1491
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/api Related to the REST API area/metrics Related to metrics area/storage Related to storage area/ui Related to the user interface feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Failing count for groups not updated feat: Implement suites (multi-endpoint test scenarios)

2 participants