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)
			continue

View on GitHub (pinned to 91324e8de7)

Solutions

  1. Confirm the markets widget has at least one valid symbol configured
  2. Check glance logs for the '%v' detail to identify the pool-level cause
  3. 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

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


AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15). Data as JSON: /api/errors/e475299b596d0d54. Report an issue: GitHub.