summaryrefslogtreecommitdiff
path: root/services/news-collector
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 15:46:18 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 15:46:18 +0900
commit776376dda8005635c4c3365905ca7df857789fec (patch)
tree09a8f134929007b58981e6c5e756c3f3b4d3cbda /services/news-collector
parent8da5fb843856bb6585c6753f44d422beaa4a8204 (diff)
refactor: specialize exception handling across all services
Diffstat (limited to 'services/news-collector')
-rw-r--r--services/news-collector/src/news_collector/main.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/services/news-collector/src/news_collector/main.py b/services/news-collector/src/news_collector/main.py
index 837a397..af0cd20 100644
--- a/services/news-collector/src/news_collector/main.py
+++ b/services/news-collector/src/news_collector/main.py
@@ -3,6 +3,8 @@
import asyncio
from datetime import datetime, timezone
+import aiohttp
+
from shared.broker import RedisBroker
from shared.db import Database
from shared.events import NewsEvent
@@ -54,9 +56,15 @@ async def run_collector_loop(collector, db: Database, broker: RedisBroker, log)
collector=collector.name,
count=count,
)
- except Exception as exc:
+ except (aiohttp.ClientError, ConnectionError, TimeoutError, asyncio.TimeoutError) as exc:
+ log.warning(
+ "collector_network_error",
+ collector=collector.name,
+ error=str(exc),
+ )
+ except (ValueError, KeyError, TypeError) as exc:
log.warning(
- "collector_error",
+ "collector_parse_error",
collector=collector.name,
error=str(exc),
)
@@ -83,8 +91,10 @@ async def run_fear_greed_loop(collector: FearGreedCollector, db: Database, log)
value=result.fear_greed,
label=result.fear_greed_label,
)
- except Exception as exc:
- log.warning("fear_greed_error", error=str(exc))
+ except (aiohttp.ClientError, ConnectionError, TimeoutError, asyncio.TimeoutError) as exc:
+ log.warning("fear_greed_network_error", error=str(exc))
+ except (ValueError, KeyError, TypeError) as exc:
+ log.warning("fear_greed_parse_error", error=str(exc))
await asyncio.sleep(collector.poll_interval)
@@ -100,8 +110,10 @@ async def run_aggregator_loop(db: Database, interval: int, log) -> None:
for score in scores.values():
await db.upsert_symbol_score(score)
log.info("aggregation_complete", symbols=len(scores))
- except Exception as exc:
- log.warning("aggregator_error", error=str(exc))
+ except (ConnectionError, TimeoutError, asyncio.TimeoutError) as exc:
+ log.warning("aggregator_network_error", error=str(exc))
+ except (ValueError, KeyError, TypeError) as exc:
+ log.warning("aggregator_parse_error", error=str(exc))
def _determine_regime(fear_greed: int, vix: float | None) -> str:
@@ -177,7 +189,7 @@ async def run() -> None:
)
await shutdown.wait()
except Exception as exc:
- log.error("fatal_error", error=str(exc))
+ log.error("fatal_error", error=str(exc), exc_info=True)
await notifier.send_error(str(exc), "news-collector")
raise
finally: