glanceapp/glance · error · errNoContent
%w: %v
Error message
%w: %v
What it means
The worker pool itself failed before/independent of per-symbol results while fetching Yahoo Finance chart data (query1.finance.yahoo.com/v8/finance/chart/...). Wrapped with errNoContent; individual symbol failures are counted separately, so this indicates a job-level failure (e.g. zero requests or pool error), not a market data problem.
Source
Thrown at internal/glance/widget-markets.go:136
} `json:"chart"`
}
// TODO: allow changing chart time frame
const marketChartDays = 21
func fetchMarketsDataFromYahoo(marketRequests []marketRequest) (marketList, error) {
requests := make([]*http.Request, 0, len(marketRequests))
for i := range marketRequests {
request, _ := http.NewRequest("GET", fmt.Sprintf("https://query1.finance.yahoo.com/v8/finance/chart/%s?range=1mo&interval=1d", marketRequests[i].Symbol), nil)
setBrowserUserAgentHeader(request)
requests = append(requests, request)
}
job := newJob(decodeJsonFromRequestTask[marketResponseJson](defaultHTTPClient), requests)
responses, errs, err := workerPoolDo(job)
if err != nil {
return nil, fmt.Errorf("%w: %v", errNoContent, err)
}
markets := make(marketList, 0, len(responses))
var failed int
for i := range responses {
if errs[i] != nil {
failed++
slog.Error("Failed to fetch market data", "symbol", marketRequests[i].Symbol, "error", errs[i])
continue
}
response := responses[i]
if len(response.Chart.Result) == 0 {
failed++
slog.Error("Market response contains no data", "symbol", marketRequests[i].Symbol)
continueView on GitHub (pinned to 91324e8de7)
Solutions
- Confirm the markets widget has at least one valid symbol configured
- Check glance logs for the '%v' detail to identify the pool-level cause
- Verify egress to query1.finance.yahoo.com for the sibling per-symbol errors
Example fix
# before
- type: markets
markets: []
# after
- type: markets
markets:
- symbol: SPY Defensive patterns
Strategy: validation
Validate before calling
if len(marketRequests) == 0 {
return nil, fmt.Errorf("no market symbols configured")
} Try / catch
markets, err := fetchMarketsDataFromYahoo(reqs)
if err != nil {
if errors.Is(err, errNoContent) {
return widget.lastGoodMarkets, nil // keep previous cycle on total failure
}
return nil, err
} Prevention
- Require at least one symbol in the markets widget config schema
- Verify egress to query1.finance.yahoo.com in deployment checks
When it happens
Trigger: workerPoolDo returning a job-level error — most realistically zero market requests (empty symbol list) or an internal pool failure; per-request network failures go to errs[i] instead.
Common situations: Misconfigured markets widget with an empty symbol list; transient worker-pool exhaustion under heavy widget load.
Related errors
- %w: could not fetch data for %d market(s)
- %s widget: %v
- recursion depth limit of %d reached
- no pages configured
- secret-key must be set when users are configured
AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15).
Data as JSON: /api/errors/e475299b596d0d54.
Report an issue: GitHub.