Nhughes09 commited on
Commit
189b02a
Β·
1 Parent(s): f22fcf7

Smart tiered loop: RSS 5min, AI 30min - efficient, no rate limits

Browse files
Files changed (1) hide show
  1. app.py +77 -15
app.py CHANGED
@@ -596,31 +596,93 @@ def fetch_ai_update():
596
 
597
 
598
  def background_updater():
599
- """Hourly background updates."""
600
  logger.info("="*60)
601
- logger.info("πŸ”„ BACKGROUND UPDATER INITIALIZED")
602
- logger.info(" ⏰ Will run every 3600 seconds (1 hour)")
603
- logger.info(" πŸš€ Starting first update immediately...")
 
 
604
  logger.info("="*60)
605
 
 
 
 
 
 
 
 
 
 
 
606
  update_count = 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  while True:
 
 
608
  try:
609
- update_count += 1
610
- logger.info(f"\n{'#'*60}")
611
- logger.info(f"πŸ”„ SCHEDULED UPDATE #{update_count}")
612
- logger.info(f"{'#'*60}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
613
 
614
- data = fetch_ai_update()
615
- save_cached_data(data)
 
 
616
 
617
- logger.info(f"\n{'#'*60}")
618
- logger.info(f"βœ… UPDATE #{update_count} SAVED - Next update in 1 hour")
619
- logger.info(f"{'#'*60}\n")
620
  except Exception as e:
621
- logger.error(f"❌ Update #{update_count} failed: {e}")
622
 
623
- time.sleep(3600)
 
624
 
625
 
626
  # Start background thread
 
596
 
597
 
598
  def background_updater():
599
+ """Smart tiered background updates - efficient and avoids rate limits."""
600
  logger.info("="*60)
601
+ logger.info("πŸ”„ SMART BACKGROUND UPDATER INITIALIZED")
602
+ logger.info(" πŸ“° RSS Check: Every 5 minutes (FREE)")
603
+ logger.info(" πŸ€– AI Analysis: Every 30 minutes")
604
+ logger.info(" πŸ“Š Slow Data: Once per day")
605
+ logger.info(" πŸš€ Starting first full update immediately...")
606
  logger.info("="*60)
607
 
608
+ # Timing configuration
609
+ RSS_INTERVAL = 300 # 5 minutes (RSS is free)
610
+ AI_INTERVAL = 1800 # 30 minutes (AI calls)
611
+ SLOW_DATA_INTERVAL = 86400 # 24 hours (unemployment etc)
612
+
613
+ # Track last update times
614
+ last_rss = 0
615
+ last_ai = 0
616
+ last_slow = 0
617
+
618
  update_count = 0
619
+ rss_count = 0
620
+
621
+ # First run: do full AI update immediately
622
+ try:
623
+ update_count += 1
624
+ logger.info(f"\n{'#'*60}")
625
+ logger.info(f"πŸ€– INITIAL FULL AI UPDATE #{update_count}")
626
+ logger.info(f"{'#'*60}")
627
+
628
+ data = fetch_ai_update()
629
+ save_cached_data(data)
630
+ last_ai = time.time()
631
+ last_rss = time.time()
632
+
633
+ logger.info(f"βœ… Initial update complete - entering smart loop")
634
+ except Exception as e:
635
+ logger.error(f"❌ Initial update failed: {e}")
636
+
637
+ # Smart loop
638
  while True:
639
+ now = time.time()
640
+
641
  try:
642
+ # Check if RSS update needed (every 5 min)
643
+ if now - last_rss >= RSS_INTERVAL:
644
+ rss_count += 1
645
+ logger.info(f"\n{'='*40}")
646
+ logger.info(f"πŸ“° RSS CHECK #{rss_count} (every 5 min)")
647
+ logger.info(f"{'='*40}")
648
+
649
+ # Just fetch RSS, no AI call
650
+ news = fetch_all_news()
651
+ news_context = format_news_for_prompt(news)
652
+
653
+ # Check if there's interesting new content
654
+ if len(news_context) > 500:
655
+ logger.info(f"πŸ“° Fresh news available: {len(news_context)} chars")
656
+ else:
657
+ logger.info("πŸ“° No significant new content")
658
+
659
+ last_rss = now
660
+
661
+ # Check if AI analysis needed (every 30 min)
662
+ if now - last_ai >= AI_INTERVAL:
663
+ update_count += 1
664
+ logger.info(f"\n{'#'*60}")
665
+ logger.info(f"πŸ€– AI ANALYSIS #{update_count} (every 30 min)")
666
+ logger.info(f"{'#'*60}")
667
+
668
+ data = fetch_ai_update()
669
+ save_cached_data(data)
670
+ last_ai = now
671
+
672
+ # Calculate next update times
673
+ next_ai = AI_INTERVAL // 60
674
+ logger.info(f"βœ… AI update complete - next in {next_ai} min")
675
 
676
+ # Log status every loop
677
+ time_to_next_rss = max(0, RSS_INTERVAL - (now - last_rss))
678
+ time_to_next_ai = max(0, AI_INTERVAL - (now - last_ai))
679
+ logger.info(f"⏰ Next: RSS in {int(time_to_next_rss)}s, AI in {int(time_to_next_ai)}s")
680
 
 
 
 
681
  except Exception as e:
682
+ logger.error(f"❌ Loop error: {e}")
683
 
684
+ # Sleep for 60 seconds between checks (efficient)
685
+ time.sleep(60)
686
 
687
 
688
  # Start background thread