Add alert for rate limited GroupHook and ProjectHook webhooks on project and group pages
Webhooks may be rate limited and as a consequence not fire. We log the fact that a webhook has been rate limited in `app/services/web_hook_service.rb`, but it would be good to add alerting in the UI. We could adopt the approach used to address this [issue](https://gitlab.com/gitlab-org/gitlab/-/issues/363027) for adding alerts for disabled webhooks. This checks a redis cache which checks the `web_hooks` table to track whether a web hook is disabled. It uses the `user_namespace_callouts` DB table to track if an alert has been dismissed by a user. We could do something similar for rate limited webhooks. - add a column `last_rate_limited` column to the web_hooks table which is updated with a timestamp every time a web hook is rate limited. - store a true/false value in redis for each group and project that indicates whether the group/project has any recently rate limited webhooks. Recent could mean within the last hour. - display an alert if there is a recent rate limit. This won't display information about _which_ webhook, just that a webhook on the group/project has been rate limited and a link to the [webhooks troubleshoting page](user/project/integrations/webhooks_troubleshooting.md) - update the webhook API response to include the `last_rate_limited` timestamp. The implementation would involve additions to the following files: - `app/assets/javascripts/persistent_user_callout.js` - `app/assets/javascripts/persistent_user_callouts.js` - `app/models/concerns/web_hooks/has_web_hooks.rb` - `app/models/concerns/web_hooks/hook.rb` - `app/helpers/web_hooks/web_hooks_helper.rb` - `ee/app/helpers/ee/web_hooks/web_hooks_helper.rb` - `app/helpers/users/callouts_helper.rb` - `app/services/web_hook_service.rb` - `app/services/web_hooks/log_execution_service.rb` - `app/views/layouts/project.html.haml` - `app/views/layouts/group.html.haml` - `app/views/shared/web_hooks/_web_hook_rate_limited_alert.html.haml` (a new file) - `ee/app/views/shared/web_hooks/_group_web_hook_rate_limited_alert.html.haml` (a new file) Plus a DB migration to add the `last_rate_limited` column to `web_hooks`. Plus updating the API response endpoints. - `ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json` - `lib/api/entities/hook.rb` It should be split into multiple MRs. We should be aware that at the time of creating this issue around 2.5K webhooks are rate limited each week on gitlab.com.
issue