Update monitor widget

This commit is contained in:
Svilen Markov 2025-01-17 19:09:49 +00:00
parent c8200f2972
commit ee1cde8a04
2 changed files with 13 additions and 10 deletions

View File

@ -25,11 +25,7 @@
<img class="monitor-site-icon{{ if .Icon.IsFlatIcon }} flat-icon{{ end }}" src="{{ .Icon.URL }}" alt="" loading="lazy"> <img class="monitor-site-icon{{ if .Icon.IsFlatIcon }} flat-icon{{ end }}" src="{{ .Icon.URL }}" alt="" loading="lazy">
{{ end }} {{ end }}
<div class="min-width-0"> <div class="min-width-0">
{{ if and .Status.Error ( ne "" .ErrorURL)}}
<a class="size-h3 color-highlight text-truncate block" href="{{ .ErrorURL | safeURL }}" {{ if not .SameTab }}target="_blank"{{ end }} rel="noreferrer">{{ .Title }}</a>
{{ else }}
<a class="size-h3 color-highlight text-truncate block" href="{{ .URL | safeURL }}" {{ if not .SameTab }}target="_blank"{{ end }} rel="noreferrer">{{ .Title }}</a> <a class="size-h3 color-highlight text-truncate block" href="{{ .URL | safeURL }}" {{ if not .SameTab }}target="_blank"{{ end }} rel="noreferrer">{{ .Title }}</a>
{{ end }}
<ul class="list-horizontal-text"> <ul class="list-horizontal-text">
{{ if not .Status.Error }} {{ if not .Status.Error }}
<li title="{{ .Status.Code }}">{{ .StatusText }}</li> <li title="{{ .Status.Code }}">{{ .StatusText }}</li>

View File

@ -20,6 +20,7 @@ type monitorWidget struct {
Sites []struct { Sites []struct {
*SiteStatusRequest `yaml:",inline"` *SiteStatusRequest `yaml:",inline"`
Status *siteStatus `yaml:"-"` Status *siteStatus `yaml:"-"`
URL string `yaml:"-"`
ErrorURL string `yaml:"error-url"` ErrorURL string `yaml:"error-url"`
Title string `yaml:"title"` Title string `yaml:"title"`
Icon customIconField `yaml:"icon"` Icon customIconField `yaml:"icon"`
@ -59,10 +60,16 @@ func (widget *monitorWidget) update(ctx context.Context) {
status := &statuses[i] status := &statuses[i]
site.Status = status site.Status = status
if !slices.Contains(site.AltStatusCodes, status.Code) && (status.Code >= 400 || status.TimedOut || status.Error != nil) { if !slices.Contains(site.AltStatusCodes, status.Code) && (status.Code >= 400 || status.Error != nil) {
widget.HasFailing = true widget.HasFailing = true
} }
if status.Error != nil && site.ErrorURL != "" {
site.URL = site.ErrorURL
} else {
site.URL = site.DefaultURL
}
site.StatusText = statusCodeToText(status.Code, site.AltStatusCodes) site.StatusText = statusCodeToText(status.Code, site.AltStatusCodes)
site.StatusStyle = statusCodeToStyle(status.Code, site.AltStatusCodes) site.StatusStyle = statusCodeToStyle(status.Code, site.AltStatusCodes)
} }
@ -89,12 +96,12 @@ func statusCodeToText(status int, altStatusCodes []int) string {
if status == 401 { if status == 401 {
return "Unauthorized" return "Unauthorized"
} }
if status >= 400 {
return "Client Error"
}
if status >= 500 { if status >= 500 {
return "Server Error" return "Server Error"
} }
if status >= 400 {
return "Client Error"
}
return strconv.Itoa(status) return strconv.Itoa(status)
} }
@ -108,7 +115,7 @@ func statusCodeToStyle(status int, altStatusCodes []int) string {
} }
type SiteStatusRequest struct { type SiteStatusRequest struct {
URL 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"`
} }
@ -125,7 +132,7 @@ func fetchSiteStatusTask(statusRequest *SiteStatusRequest) (siteStatus, error) {
if statusRequest.CheckURL != "" { if statusRequest.CheckURL != "" {
url = statusRequest.CheckURL url = statusRequest.CheckURL
} else { } else {
url = statusRequest.URL url = statusRequest.DefaultURL
} }
request, err := http.NewRequest(http.MethodGet, url, nil) request, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil { if err != nil {