glanceapp/glance · error · errNoContent
%w: request failed: %w
Error message
%w: request failed: %w
What it means
The HTTP request to the extension URL failed at the transport level (DNS failure, connection refused, TLS error, timeout) and the error wraps errNoContent, so the widget renders an empty state. The URL and error are also logged via slog before returning.
Source
Thrown at internal/glance/widget-extension.go:132
default:
return template.HTML("<pre>" + html.EscapeString(string(content)) + "</pre>")
}
}
func fetchExtension(options extensionRequestOptions) (extension, error) {
request, _ := http.NewRequest("GET", options.URL, nil)
if len(options.Parameters) > 0 {
request.URL.RawQuery = options.Parameters.toQueryString()
}
for key, value := range options.Headers {
request.Header.Add(key, value)
}
response, err := http.DefaultClient.Do(request)
if err != nil {
slog.Error("Failed fetching extension", "url", options.URL, "error", err)
return extension{}, fmt.Errorf("%w: request failed: %w", errNoContent, err)
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
slog.Error("Failed reading response body of extension", "url", options.URL, "error", err)
return extension{}, fmt.Errorf("%w: could not read body: %w", errNoContent, err)
}
extension := extension{}
if response.Header.Get(extensionHeaderTitle) == "" {
extension.Title = "Extension"
} else {
extension.Title = response.Header.Get(extensionHeaderTitle)
}
View on GitHub (pinned to 91324e8de7)
Solutions
- curl the exact extension URL from the glance host to see the transport error
- Fix DNS/hosts entries or use an IP/FQDN that resolves from the glance container
- For self-signed certs, add the CA to the system trust store of the glance container
- If the server is slow, ensure it responds within the default client's timeout budget
Defensive patterns
Strategy: fallback
Try / catch
ext, err := fetchExtension(opts)
if err != nil {
if errors.Is(err, errNoContent) {
// render last cached HTML instead of an empty panel
return widget.lastGoodExtension, nil
}
return extension{}, err
} Prevention
- Host extensions close to glance (same network) to avoid DNS/TLS flakiness
- Trust internal CAs in the glance container when extensions use self-signed certs
- Keep extension endpoints health-checked so outages are visible before widgets break
When it happens
Trigger: http.DefaultClient.Do failing: unreachable host, DNS name not resolving, self-signed certificate rejected, server dropping the connection.
Common situations: Extension server down or moved; internal DNS not resolvable from where glance runs; self-signed TLS cert (Go rejects unless trusted); firewalled port; extension endpoint behind VPN that is off.
Related errors
- sending authentication request: %v
- %w: could not read body: %w
- URL is required
- could not solve reddit challenge
- failed to retrieve any content
AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15).
Data as JSON: /api/errors/6decccd038f16022.
Report an issue: GitHub.