Merge pull request #240 from cmeadowstech/alt-status-codes

Add alternative status code option to monitor widget
This commit is contained in:
Svilen Markov 2024-10-18 10:53:18 +01:00 committed by GitHub
commit 72f78f1c8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 8 deletions

View File

@ -853,7 +853,7 @@ Either a value from the table below or a URL to a custom search engine. Use `{QU
##### `new-tab` ##### `new-tab`
When set to `true`, swaps the shortcuts for showing results in the same or new tab, defaulting to showing results in a new tab. When set to `true`, swaps the shortcuts for showing results in the same or new tab, defaulting to showing results in a new tab.
##### `new-tab` ##### `autofocus`
When set to `true`, automatically focuses the search input on page load. When set to `true`, automatically focuses the search input on page load.
##### `bangs` ##### `bangs`
@ -1144,6 +1144,7 @@ Properties for each site:
| icon | string | no | | | icon | string | no | |
| 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 | |
`title` `title`
@ -1179,6 +1180,15 @@ Whether to ignore invalid/self-signed certificates.
Whether to open the link in the same or a new tab. Whether to open the link in the same or a new tab.
`alt-status-codes`
Status codes other than 200 that you want to return "OK".
```yaml
alt-status-codes:
- 403
```
### Releases ### Releases
Display a list of latest releases for specific repositories on Github, GitLab, Codeberg or Docker Hub. Display a list of latest releases for specific repositories on Github, GitLab, Codeberg or Docker Hub.

View File

@ -3,6 +3,7 @@ package widget
import ( import (
"context" "context"
"html/template" "html/template"
"slices"
"strconv" "strconv"
"time" "time"
@ -10,8 +11,8 @@ import (
"github.com/glanceapp/glance/internal/feed" "github.com/glanceapp/glance/internal/feed"
) )
func statusCodeToText(status int) string { func statusCodeToText(status int, altStatusCodes []int) string {
if status == 200 { if status == 200 || slices.Contains(altStatusCodes, status) {
return "OK" return "OK"
} }
if status == 404 { if status == 404 {
@ -33,8 +34,8 @@ func statusCodeToText(status int) string {
return strconv.Itoa(status) return strconv.Itoa(status)
} }
func statusCodeToStyle(status int) string { func statusCodeToStyle(status int, altStatusCodes []int) string {
if status == 200 { if status == 200 || slices.Contains(altStatusCodes, status) {
return "ok" return "ok"
} }
@ -52,6 +53,7 @@ type Monitor struct {
SameTab bool `yaml:"same-tab"` SameTab bool `yaml:"same-tab"`
StatusText string `yaml:"-"` StatusText string `yaml:"-"`
StatusStyle string `yaml:"-"` StatusStyle string `yaml:"-"`
AltStatusCodes []int `yaml:"alt-status-codes"`
} `yaml:"sites"` } `yaml:"sites"`
ShowFailingOnly bool `yaml:"show-failing-only"` ShowFailingOnly bool `yaml:"show-failing-only"`
HasFailing bool `yaml:"-"` HasFailing bool `yaml:"-"`
@ -87,13 +89,13 @@ func (widget *Monitor) Update(ctx context.Context) {
status := &statuses[i] status := &statuses[i]
site.Status = status site.Status = status
if status.Code >= 400 || status.TimedOut || status.Error != nil { if !slices.Contains(site.AltStatusCodes, status.Code) && (status.Code >= 400 || status.TimedOut || status.Error != nil) {
widget.HasFailing = true widget.HasFailing = true
} }
if !status.TimedOut { if !status.TimedOut {
site.StatusText = statusCodeToText(status.Code) site.StatusText = statusCodeToText(status.Code, site.AltStatusCodes)
site.StatusStyle = statusCodeToStyle(status.Code) site.StatusStyle = statusCodeToStyle(status.Code, site.AltStatusCodes)
} }
} }
} }