Add timeout property

This commit is contained in:
Svilen Markov 2025-04-29 09:04:31 +01:00
parent 7d08eb312f
commit 1661f14adb
2 changed files with 15 additions and 8 deletions

View File

@ -1613,7 +1613,6 @@ Example:
- title: Vaultwarden - title: Vaultwarden
url: https://vault.yourdomain.com url: https://vault.yourdomain.com
icon: /assets/vaultwarden-logo.png icon: /assets/vaultwarden-logo.png
``` ```
Preview: Preview:
@ -1651,6 +1650,7 @@ Properties for each site:
| check-url | string | no | | | check-url | string | no | |
| error-url | string | no | | | error-url | string | no | |
| icon | string | no | | | icon | string | no | |
| timeout | string | no | 3s |
| allow-insecure | boolean | no | false | | allow-insecure | boolean | no | false |
| same-tab | boolean | no | false | | same-tab | boolean | no | false |
| alt-status-codes | array | no | | | alt-status-codes | array | no | |
@ -1686,6 +1686,10 @@ icon: si:adguard
> >
> Simple Icons are loaded externally and are hosted on `cdn.jsdelivr.net`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally. > Simple Icons are loaded externally and are hosted on `cdn.jsdelivr.net`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally.
`timeout`
How long to wait for a response from the server before considering it unreachable. The value is a string and must be a number followed by one of s, m, h, d. Example: `5s` for 5 seconds, `1m` for 1 minute, etc.
`allow-insecure` `allow-insecure`
Whether to ignore invalid/self-signed certificates. Whether to ignore invalid/self-signed certificates.

View File

@ -118,6 +118,7 @@ type SiteStatusRequest struct {
DefaultURL string `yaml:"url"` DefaultURL string `yaml:"url"`
CheckURL string `yaml:"check-url"` CheckURL string `yaml:"check-url"`
AllowInsecure bool `yaml:"allow-insecure"` AllowInsecure bool `yaml:"allow-insecure"`
Timeout durationField `yaml:"timeout"`
BasicAuth struct { BasicAuth struct {
Username string `yaml:"username"` Username string `yaml:"username"`
Password string `yaml:"password"` Password string `yaml:"password"`
@ -138,7 +139,12 @@ func fetchSiteStatusTask(statusRequest *SiteStatusRequest) (siteStatus, error) {
} else { } else {
url = statusRequest.DefaultURL url = statusRequest.DefaultURL
} }
request, err := http.NewRequest(http.MethodGet, url, nil)
timeout := ternary(statusRequest.Timeout > 0, time.Duration(statusRequest.Timeout), 3*time.Second)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil { if err != nil {
return siteStatus{ return siteStatus{
Error: err, Error: err,
@ -149,9 +155,6 @@ func fetchSiteStatusTask(statusRequest *SiteStatusRequest) (siteStatus, error) {
request.SetBasicAuth(statusRequest.BasicAuth.Username, statusRequest.BasicAuth.Password) request.SetBasicAuth(statusRequest.BasicAuth.Username, statusRequest.BasicAuth.Password)
} }
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
defer cancel()
request = request.WithContext(ctx)
requestSentAt := time.Now() requestSentAt := time.Now()
var response *http.Response var response *http.Response