apiLogger->send('fred', 'GET', self::URL, fn () => Http::timeout(10) ->get(self::URL, [ 'series_id' => 'DCOILBRENTEU', 'api_key' => config('services.fred.api_key'), 'sort_order' => 'desc', 'limit' => 30, 'file_type' => 'json', ])); if (! $response->successful()) { Log::error('FredBrentPriceSource: request failed', ['status' => $response->status()]); return null; } $rows = collect($response->json('observations') ?? []) ->filter(fn (array $obs) => $obs['value'] !== '.') ->map(fn (array $obs) => [ 'date' => $obs['date'], 'price_usd' => (float) $obs['value'], ]) ->all(); if ($rows === []) { Log::warning('FredBrentPriceSource: no valid observations returned'); return null; } return $rows; } catch (Throwable $e) { Log::error('FredBrentPriceSource: fetch failed', ['error' => $e->getMessage()]); return null; } } }