Skip to content

Commit 0a95836

Browse files
committed
Update dashboard script and workflow
1 parent de717b6 commit 0a95836

File tree

2 files changed

+119
-19
lines changed

2 files changed

+119
-19
lines changed

.github/workflows/dashboard.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,26 @@ jobs:
2929
FRED_API_KEY: ${{ secrets.FRED_API_KEY }}
3030
run: python content/dashboard/dashboard.py
3131

32+
- name: Debug generated files # NEW DEBUGGING STEP
33+
run: |
34+
echo "Current directory: $(pwd)"
35+
echo "Listing files in repository root:"
36+
ls -la
37+
echo "Listing files in content/dashboard:"
38+
ls -la content/dashboard/
39+
echo "Checking static/dashboard directory:"
40+
if [ -d "static/dashboard" ]; then
41+
echo "static/dashboard directory exists."
42+
echo "Listing files in static/dashboard:"
43+
ls -Rla static/dashboard/
44+
echo "MD5 checksums of generated files in static/dashboard:"
45+
find static/dashboard -type f -print0 | xargs -0 md5sum || echo "No files found to checksum in static/dashboard"
46+
echo "Displaying content of a sample CSV (if it exists):"
47+
cat static/dashboard/vacancy_rate.csv || echo "unemployment_rate.csv not found in static/dashboard"
48+
else
49+
echo "static/dashboard directory DOES NOT EXIST."
50+
fi
51+
3252
- name: Commit and push updated charts and data
3353
run: |
3454
git config user.name "github-actions"

content/dashboard/dashboard.py

Lines changed: 99 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# to run from the console:
2-
# python3 -m venv .venv
2+
# python3 -m venv .venv
33
# source .venv/bin/activate
44
# pip install -r requirements.txt
5-
# export FRED_API_KEY='YOUR_ACTUAL_API_KEY'
5+
# export FRED_API_KEY= 'key'
66
# python3 dashboard.py
77

88
import os
@@ -12,12 +12,28 @@
1212
from dotenv import load_dotenv
1313
import plotly.graph_objects as go
1414

15+
print("Script starting...") # New log
16+
1517
# Load FRED API key
1618
load_dotenv()
17-
fred = Fred(api_key=os.getenv("FRED_API_KEY"))
19+
# fred = Fred(api_key=os.getenv("FRED_API_KEY"))
20+
apikey = os.getenv("FRED_API_KEY")
21+
if apikey:
22+
print("FRED_API_KEY environment variable found.") # New log
23+
if len(apikey) > 4:
24+
print(f"FRED_API_KEY preview: ...{apikey[-4:]}") # New log (shows last 4 chars, be careful if sensitive)
25+
else:
26+
print("FRED_API_KEY seems very short.") # New log
27+
else:
28+
print("FRED_API_KEY environment variable NOT FOUND.") # New log
29+
fred = Fred(api_key=apikey)
1830

1931
# Ensure output directory exists
20-
os.makedirs("../../static/dashboard", exist_ok=True)
32+
# os.makedirs("../../static/dashboard", exist_ok=True)
33+
output_dir_relative = "../../static/dashboard"
34+
output_dir_absolute = os.path.abspath(output_dir_relative)
35+
print(f"Ensuring output directory exists: {output_dir_absolute}") # New log
36+
os.makedirs(output_dir_absolute, exist_ok=True)
2137

2238
# Create helper function to fetch recessions
2339
def get_recession_periods(rec_series):
@@ -114,8 +130,11 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
114130
showlegend=False
115131
)
116132

133+
# In your make_plot function, before fig.write_html:
134+
html_file_path = os.path.join(output_dir_absolute, f"{filename}.html")
135+
print(f"Attempting to write HTML to: {html_file_path}") # New log
117136
fig.write_html(
118-
f"../../static/dashboard/{filename}.html",
137+
html_file_path, # Use the absolute path
119138
include_plotlyjs='cdn',
120139
full_html=False,
121140
config={
@@ -135,11 +154,35 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
135154
}
136155
)
137156

157+
print(f"Successfully wrote HTML: {html_file_path}") # New log
158+
159+
138160

139161
# Fetch raw data from FRED
162+
print("Fetching UNEMPLOY data...")
140163
u = fred.get_series("UNEMPLOY")
164+
if u is not None and not u.empty:
165+
print(f"UNEMPLOY data fetched successfully. Shape: {u.shape}, Last date: {u.index.max()}")
166+
else:
167+
print("Failed to fetch UNEMPLOY data or data is empty.")
168+
169+
print("Fetching JTSJOL data...")
141170
v = fred.get_series("JTSJOL")
171+
if v is not None and not v.empty:
172+
print(f"JTSJOL data fetched successfully. Shape: {v.shape}, Last date: {v.index.max()}")
173+
else:
174+
print("Failed to fetch JTSJOL data or data is empty.")
175+
176+
print("Fetching CLF16OV data...")
142177
lf = fred.get_series("CLF16OV")
178+
if lf is not None and not lf.empty:
179+
print(f"CLF16OV data fetched successfully. Shape: {lf.shape}, Last date: {lf.index.max()}")
180+
else:
181+
print("Failed to fetch CLF16OV data or data is empty.")
182+
183+
# u = fred.get_series("UNEMPLOY")
184+
# v = fred.get_series("JTSJOL")
185+
# lf = fred.get_series("CLF16OV")
143186

144187
# Ensure datetime index for all series
145188
u.index = pd.to_datetime(u.index)
@@ -215,11 +258,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
215258

216259
# Save data
217260

218-
csv_path = "../../static/dashboard/unemployment_rate.csv"
261+
csv_filename = "unemployment_rate.csv"
262+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
263+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
264+
# csv_path = "../../static/dashboard/unemployment_rate.csv"
219265
df_out = df.copy()
220266
df_out.columns = ["Unemployment rate (%)"]
221267
df_out.index.name = "Date"
222-
df_out.to_csv(csv_path)
268+
# df_out.to_csv(csv_path)
269+
df_out.to_csv(csv_path_absolute)
270+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
223271

224272
# Plot vacancy rate
225273

@@ -238,11 +286,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
238286

239287
# Save data
240288

241-
csv_path = "../../static/dashboard/vacancy_rate.csv"
289+
csv_filename = "vacancy_rate.csv"
290+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
291+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
292+
# csv_path = "../../static/dashboard/vacancy_rate.csv"
242293
df_out = df.copy()
243294
df_out.columns = ["Vacancy rate (%)"]
244295
df_out.index.name = "Date"
245-
df_out.to_csv(csv_path)
296+
# df_out.to_csv(csv_path)
297+
df_out.to_csv(csv_path_absolute)
298+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
246299

247300
# Plot labor market tightness
248301

@@ -261,11 +314,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
261314

262315
# Save data
263316

264-
csv_path = "../../static/dashboard/labor_market_tightness.csv"
317+
csv_filename = "labor_market_tightness.csv"
318+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
319+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
320+
# csv_path = "../../static/dashboard/labor_market_tightness.csv"
265321
df_out = df.copy()
266322
df_out.columns = ["Labor market tightness"]
267323
df_out.index.name = "Date"
268-
df_out.to_csv(csv_path)
324+
# df_out.to_csv(csv_path)
325+
df_out.to_csv(csv_path_absolute)
326+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
269327

270328
# Plot Beveridge curve
271329

@@ -392,11 +450,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
392450

393451
# Save data
394452

395-
csv_path = "../../static/dashboard/feru.csv"
453+
csv_filename = "feru.csv"
454+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
455+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
456+
# csv_path = "../../static/dashboard/feru.csv"
396457
df_out = df.copy()
397458
df_out.columns = ["FERU (%)"]
398459
df_out.index.name = "Date"
399-
df_out.to_csv(csv_path)
460+
# df_out.to_csv(csv_path)
461+
df_out.to_csv(csv_path_absolute)
462+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
400463

401464
# Plot unemployment gap
402465

@@ -415,11 +478,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
415478

416479
# Save data
417480

418-
csv_path = "../../static/dashboard/unemployment_gap.csv"
481+
csv_filename = "unemployment_gap.csv"
482+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
483+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
484+
# csv_path = "../../static/dashboard/unemployment_gap.csv"
419485
df_out = df.copy()
420486
df_out.columns = ["Unemployment gap (pp)"]
421487
df_out.index.name = "Date"
422-
df_out.to_csv(csv_path)
488+
# df_out.to_csv(csv_path)
489+
df_out.to_csv(csv_path_absolute)
490+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
423491

424492
# Plot recession indicator
425493

@@ -438,11 +506,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
438506

439507
# Save data
440508

441-
csv_path = "../../static/dashboard/recession_indicator.csv"
509+
csv_filename = "recession_indicator.csv"
510+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
511+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
512+
# csv_path = "../../static/dashboard/recession_indicator.csv"
442513
df_out = df.copy()
443514
df_out.columns = ["Recession indicator (pp)"]
444515
df_out.index.name = "Date"
445-
df_out.to_csv(csv_path)
516+
# df_out.to_csv(csv_path)
517+
df_out.to_csv(csv_path_absolute)
518+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
446519

447520
# Plot recession probability
448521

@@ -461,8 +534,15 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
461534

462535
# Save data
463536

464-
csv_path = "../../static/dashboard/recession_probability.csv"
537+
csv_filename = "recession_probability.csv"
538+
csv_path_absolute = os.path.join(output_dir_absolute, csv_filename) # Use absolute path
539+
print(f"Attempting to write CSV to: {csv_path_absolute}") # New log
540+
# csv_path = "../../static/dashboard/recession_probability.csv"
465541
df_out = df.copy()
466542
df_out.columns = ["Recession probability (%)"]
467543
df_out.index.name = "Date"
468-
df_out.to_csv(csv_path)
544+
# df_out.to_csv(csv_path)
545+
df_out.to_csv(csv_path_absolute)
546+
print(f"Successfully wrote CSV: {csv_path_absolute}") # New log
547+
548+
print("Script finished.") # New log

0 commit comments

Comments
 (0)