2026-07-30 12:54:44,382 INFO [apscheduler.scheduler] Adding job tentatively -- it will be properly scheduled when the scheduler starts 2026-07-30 12:54:44,383 INFO [apscheduler.scheduler] Added job "sync_job" to job store "default" 2026-07-30 12:54:44,383 INFO [apscheduler.scheduler] Scheduler started 2026-07-30 12:54:44,385 WARNING [fb-sync] data/ is NOT a persistent volume - history and logs will be lost on the next rebuild. Map /app/data as a Caprover persistent directory. 2026-07-30 12:54:44,385 INFO [fb-sync] Starting dashboard on port 80, sync every 1h UTC | log=/app/data/logs/fb-sync.log retention=30d persistent=False 2026-07-30 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 14:00:00 UTC)" (scheduled at 2026-07-30 13:00:00+00:00) 2026-07-30 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-30 13:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 13:00:01,400 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 13:00:01,401 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 13:00:01,406 INFO [fb-sync.worker] New articles: 2 | skips: {'duplicate_exact': 48} 2026-07-30 13:00:01,407 INFO [fb-sync.worker] Publishing [1/2] Mercedes-Benz sáhl po hliníku ze šrotu.... 2026-07-30 13:00:01,452 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1813 content_type=home.BlogPostPage path=/home/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:01,623 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1813 revision_id=3599 2026-07-30 13:00:01,727 INFO [home.signals] Starting auto-translation for blog post: Mercedes-Benz sáhl po hliníku ze šrotu. (ID: 1813) 2026-07-30 13:00:01,732 INFO [home.signals] Creating new en translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:07,081 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:08,086 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:08,213 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1814 content_type=home.BlogPostPage path=/home-1/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:08,224 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1814 revision_id=3600 2026-07-30 13:00:08,229 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1814 from=1813 2026-07-30 13:00:08,360 INFO [wagtail] Page edited: "Mercedes-Benz reached for aluminum from scrap." id=1814 revision_id=3601 2026-07-30 13:00:08,402 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes-Benz reached for aluminum from scrap.' id=1814 2026-07-30 13:00:08,734 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:08,806 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz reached for aluminum from scrap. (en) 2026-07-30 13:00:08,822 INFO [wagtail] Published: "Mercedes-Benz reached for aluminum from scrap." pk=1814 revision_id=3601 2026-07-30 13:00:08,832 INFO [home.signals] ✓ Successfully processed en: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:08,835 INFO [home.signals] Creating new de translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:13,275 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:14,301 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:14,442 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1815 content_type=home.BlogPostPage path=/startseite/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:14,465 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1815 revision_id=3602 2026-07-30 13:00:14,474 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1815 from=1813 2026-07-30 13:00:14,669 INFO [wagtail] Page edited: "Mercedes‑Benz griff nach Aluminium aus Schrott zurück." id=1815 revision_id=3603 2026-07-30 13:00:14,742 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes‑Benz griff nach Aluminium aus Schrott zurück.' id=1815 2026-07-30 13:00:14,814 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:14,986 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes‑Benz griff nach Aluminium aus Schrott zurück. (de) 2026-07-30 13:00:15,005 INFO [wagtail] Published: "Mercedes‑Benz griff nach Aluminium aus Schrott zurück." pk=1815 revision_id=3603 2026-07-30 13:00:15,021 INFO [home.signals] ✓ Successfully processed de: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:15,026 INFO [home.signals] Creating new sk translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:21,346 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:22,482 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:22,626 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1816 content_type=home.BlogPostPage path=/domov/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:22,642 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1816 revision_id=3604 2026-07-30 13:00:22,648 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1816 from=1813 2026-07-30 13:00:22,763 INFO [wagtail] Page edited: "Mercedes-Benz sáhol po hliník zo šrotu." id=1816 revision_id=3605 2026-07-30 13:00:22,814 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes-Benz sáhol po hliník zo šrotu.' id=1816 2026-07-30 13:00:22,871 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:23,001 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz sáhol po hliník zo šrotu. (sk) 2026-07-30 13:00:23,020 INFO [wagtail] Published: "Mercedes-Benz sáhol po hliník zo šrotu." pk=1816 revision_id=3605 2026-07-30 13:00:23,030 INFO [home.signals] ✓ Successfully processed sk: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:23,035 INFO [home.signals] Creating new zh-Hans translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:27,302 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:28,219 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:28,400 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1817 content_type=home.BlogPostPage path=/zh-hans/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:28,420 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1817 revision_id=3606 2026-07-30 13:00:28,427 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1817 from=1813 2026-07-30 13:00:28,614 INFO [wagtail] Page edited: "梅赛德斯-奔驰开始使用废旧铝材。" id=1817 revision_id=3607 2026-07-30 13:00:28,837 INFO [home.signals] Skipping auto-translation for non-Czech page: 梅赛德斯-奔驰开始使用废旧铝材。 (zh-Hans) 2026-07-30 13:00:28,860 INFO [wagtail] Published: "梅赛德斯-奔驰开始使用废旧铝材。" pk=1817 revision_id=3607 2026-07-30 13:00:28,874 INFO [home.signals] ✓ Successfully processed zh-Hans: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:28,881 INFO [home.signals] Creating new tr translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:33,739 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:35,114 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:35,281 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1818 content_type=home.BlogPostPage path=/anasayfa/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:35,298 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1818 revision_id=3608 2026-07-30 13:00:35,305 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1818 from=1813 2026-07-30 13:00:35,499 INFO [wagtail] Page edited: "Mercedes-Benz hurda alüminyumdan yararlandı." id=1818 revision_id=3609 2026-07-30 13:00:35,569 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes-Benz hurda alüminyumdan yararlandı.' id=1818 2026-07-30 13:00:35,666 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:35,864 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz hurda alüminyumdan yararlandı. (tr) 2026-07-30 13:00:35,896 INFO [wagtail] Published: "Mercedes-Benz hurda alüminyumdan yararlandı." pk=1818 revision_id=3609 2026-07-30 13:00:35,915 INFO [home.signals] ✓ Successfully processed tr: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:35,923 INFO [home.signals] Creating new vi translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:40,686 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:41,869 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:42,076 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1819 content_type=home.BlogPostPage path=/trang-chu/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:42,101 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1819 revision_id=3610 2026-07-30 13:00:42,110 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1819 from=1813 2026-07-30 13:00:42,261 INFO [wagtail] Page edited: "Mercedes-Benz đã lấy nhôm từ phế liệu." id=1819 revision_id=3611 2026-07-30 13:00:42,460 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz đã lấy nhôm từ phế liệu. (vi) 2026-07-30 13:00:42,489 INFO [wagtail] Published: "Mercedes-Benz đã lấy nhôm từ phế liệu." pk=1819 revision_id=3611 2026-07-30 13:00:42,507 INFO [home.signals] ✓ Successfully processed vi: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:42,513 INFO [home.signals] Creating new hi translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:47,690 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:48,939 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:49,142 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1820 content_type=home.BlogPostPage path=/hi/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:49,158 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1820 revision_id=3612 2026-07-30 13:00:49,166 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1820 from=1813 2026-07-30 13:00:49,355 INFO [wagtail] Page edited: "Mercedes-Benz ने स्क्रैप से एल्यूमीनियम का उपयोग किया।" id=1820 revision_id=3613 2026-07-30 13:00:49,415 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes-Benz ने स्क्रैप से एल्यूमीनियम का उपयोग किया।' id=1820 2026-07-30 13:00:49,458 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:49,613 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz ने स्क्रैप से एल्यूमीनियम का उपयोग किया। (hi) 2026-07-30 13:00:49,633 INFO [wagtail] Published: "Mercedes-Benz ने स्क्रैप से एल्यूमीनियम का उपयोग किया।" pk=1820 revision_id=3613 2026-07-30 13:00:49,645 INFO [home.signals] ✓ Successfully processed hi: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:49,650 INFO [home.signals] Creating new fr translation for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:54,405 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:55,393 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:00:55,575 INFO [wagtail] Page created: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1821 content_type=home.BlogPostPage path=/home-fr/blog/mercedes-benz-sahl-po-hliniku-ze-srotu/ 2026-07-30 13:00:55,588 INFO [wagtail] Page edited: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1821 revision_id=3614 2026-07-30 13:00:55,596 INFO [wagtail] Page copied: "Mercedes-Benz sáhl po hliníku ze šrotu." id=1821 from=1813 2026-07-30 13:00:55,783 INFO [wagtail] Page edited: "Mercedes-Benz a puisé dans l'aluminium provenant de ferraille." id=1821 revision_id=3615 2026-07-30 13:00:55,826 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Mercedes-Benz a puisé dans l'aluminium provenant de ferraille.' id=1821 2026-07-30 13:00:55,887 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-07-30 13:00:56,030 INFO [home.signals] Skipping auto-translation for non-Czech page: Mercedes-Benz a puisé dans l'aluminium provenant de ferraille. (fr) 2026-07-30 13:00:56,055 INFO [wagtail] Published: "Mercedes-Benz a puisé dans l'aluminium provenant de ferraille." pk=1821 revision_id=3615 2026-07-30 13:00:56,074 INFO [home.signals] ✓ Successfully processed fr: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:56,075 INFO [home.signals] Completed auto-translation workflow for: Mercedes-Benz sáhl po hliníku ze šrotu. 2026-07-30 13:00:56,095 INFO [wagtail] Published: "Mercedes-Benz sáhl po hliníku ze šrotu." pk=1813 revision_id=3599 2026-07-30 13:01:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 13:01:03,973 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:03,976 INFO [fb-sync.free_images] Photo queries: ['Mercedes electric car', 'recycled aluminum ingots', 'aluminum recycling plant', 'hydroelectric power plant'] 2026-07-30 13:01:10,874 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:17,938 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:21,755 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:30,009 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:32,321 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-07-30 13:01:32,325 INFO [fb-sync.free_images] Image chosen: pexels "A white Mercedes-Benz EQB-Class parked outdoors showcasing l" (Pexels Licence) 2026-07-30 13:01:33,229 INFO [fb-sync.worker] Image added ID=1813: stock:pexels (Pexels Licence) 2026-07-30 13:01:34,242 INFO [fb-sync] Sync done: 1 new posts in 94s (source=graph_api, scraped=50, skips={'duplicate_exact': 48, 'empty_body': 1}) 2026-07-30 13:01:34,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 14:00:00 UTC)" executed successfully 2026-07-30 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 15:00:00 UTC)" (scheduled at 2026-07-30 14:00:00+00:00) 2026-07-30 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-30 14:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 14:00:01,193 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 14:00:01,194 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 14:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 14:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 14:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 14:00:01,199 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 15:00:00 UTC)" executed successfully 2026-07-30 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 16:00:00 UTC)" (scheduled at 2026-07-30 15:00:00+00:00) 2026-07-30 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-07-30 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 15:00:01,477 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 15:00:01,478 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 15:00:01,482 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 15:00:01,482 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 15:00:01,485 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 15:00:01,486 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 16:00:00 UTC)" executed successfully 2026-07-30 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 17:00:00 UTC)" (scheduled at 2026-07-30 16:00:00+00:00) 2026-07-30 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-30 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 16:00:01,329 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 16:00:01,330 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 16:00:01,334 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 16:00:01,334 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 16:00:01,337 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 16:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 17:00:00 UTC)" executed successfully 2026-07-30 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 18:00:00 UTC)" (scheduled at 2026-07-30 17:00:00+00:00) 2026-07-30 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-30 17:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 17:00:01,807 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 17:00:01,808 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 17:00:01,811 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 17:00:01,812 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 17:00:01,814 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 17:00:01,816 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 18:00:00 UTC)" executed successfully 2026-07-30 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 19:00:00 UTC)" (scheduled at 2026-07-30 18:00:00+00:00) 2026-07-30 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-30 18:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 18:00:01,042 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 18:00:01,043 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 18:00:01,045 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 18:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 18:00:01,047 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 18:00:01,048 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 19:00:00 UTC)" executed successfully 2026-07-30 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 20:00:00 UTC)" (scheduled at 2026-07-30 19:00:00+00:00) 2026-07-30 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-30 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 19:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 19:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 19:00:01,119 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 19:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 19:00:01,121 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 19:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 20:00:00 UTC)" executed successfully 2026-07-30 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 21:00:00 UTC)" (scheduled at 2026-07-30 20:00:00+00:00) 2026-07-30 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-30 20:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 20:00:01,506 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 20:00:01,509 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 20:00:01,513 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 20:00:01,513 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 20:00:01,517 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 20:00:01,518 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 21:00:00 UTC)" executed successfully 2026-07-30 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 22:00:00 UTC)" (scheduled at 2026-07-30 21:00:00+00:00) 2026-07-30 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-07-30 21:00:00,106 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 21:00:01,021 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 21:00:01,023 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 21:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 21:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 21:00:01,030 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 21:00:01,030 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 22:00:00 UTC)" executed successfully 2026-07-30 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 23:00:00 UTC)" (scheduled at 2026-07-30 22:00:00+00:00) 2026-07-30 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-07-30 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 22:00:03,338 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 22:00:03,340 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 22:00:03,343 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 22:00:03,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 22:00:03,346 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 22:00:03,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-30 23:00:00 UTC)" executed successfully 2026-07-30 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 00:00:00 UTC)" (scheduled at 2026-07-30 23:00:00+00:00) 2026-07-30 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-07-30 23:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-30 23:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-30 23:00:01,132 INFO [fb-sync.worker] Scraped 50 posts 2026-07-30 23:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-30 23:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-30 23:00:01,136 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-30 23:00:01,137 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 00:00:00 UTC)" executed successfully 2026-07-31 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 01:00:00 UTC)" (scheduled at 2026-07-31 00:00:00+00:00) 2026-07-31 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 00:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 00:00:01,033 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 00:00:01,035 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 00:00:01,038 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 00:00:01,038 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 00:00:01,040 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 00:00:01,042 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 01:00:00 UTC)" executed successfully 2026-07-31 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 02:00:00 UTC)" (scheduled at 2026-07-31 01:00:00+00:00) 2026-07-31 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-31 01:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 01:00:01,383 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 01:00:01,384 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 01:00:01,386 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 01:00:01,386 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 01:00:01,390 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 01:00:01,392 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 02:00:00 UTC)" executed successfully 2026-07-31 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 03:00:00 UTC)" (scheduled at 2026-07-31 02:00:00+00:00) 2026-07-31 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-07-31 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 02:00:01,437 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 02:00:01,439 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 02:00:01,443 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 02:00:01,443 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 02:00:01,446 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 02:00:01,447 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 03:00:00 UTC)" executed successfully 2026-07-31 03:00:00,028 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 04:00:00 UTC)" (scheduled at 2026-07-31 03:00:00+00:00) 2026-07-31 03:00:00,034 INFO [fb-sync] Starting FB sync... 2026-07-31 03:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 03:00:01,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 03:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 03:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 03:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 03:00:01,276 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 03:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 04:00:00 UTC)" executed successfully 2026-07-31 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 05:00:00 UTC)" (scheduled at 2026-07-31 04:00:00+00:00) 2026-07-31 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-07-31 04:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 04:00:01,328 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 04:00:01,330 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 04:00:01,333 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 04:00:01,333 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 04:00:01,336 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 04:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 05:00:00 UTC)" executed successfully 2026-07-31 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 06:00:00 UTC)" (scheduled at 2026-07-31 05:00:00+00:00) 2026-07-31 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 05:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 05:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 05:00:01,104 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 05:00:01,108 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 05:00:01,108 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 05:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 05:00:01,113 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 06:00:00 UTC)" executed successfully 2026-07-31 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 07:00:00 UTC)" (scheduled at 2026-07-31 06:00:00+00:00) 2026-07-31 06:00:00,006 INFO [fb-sync] Starting FB sync... 2026-07-31 06:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 06:00:01,726 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 06:00:01,728 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 06:00:01,732 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 06:00:01,732 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 06:00:01,737 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 06:00:01,739 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 07:00:00 UTC)" executed successfully 2026-07-31 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 08:00:00 UTC)" (scheduled at 2026-07-31 07:00:00+00:00) 2026-07-31 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-31 07:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 07:00:02,353 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 07:00:02,355 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 07:00:02,357 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 07:00:02,357 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 07:00:02,360 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 07:00:02,361 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 08:00:00 UTC)" executed successfully 2026-07-31 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 09:00:00 UTC)" (scheduled at 2026-07-31 08:00:00+00:00) 2026-07-31 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-31 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 08:00:01,924 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 08:00:01,926 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 08:00:01,929 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 08:00:01,929 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 08:00:01,932 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 08:00:01,933 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 09:00:00 UTC)" executed successfully 2026-07-31 09:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 10:00:00 UTC)" (scheduled at 2026-07-31 09:00:00+00:00) 2026-07-31 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-07-31 09:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 09:00:02,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 09:00:02,065 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 09:00:02,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 09:00:02,067 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 09:00:02,070 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 09:00:02,071 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 10:00:00 UTC)" executed successfully 2026-07-31 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 11:00:00 UTC)" (scheduled at 2026-07-31 10:00:00+00:00) 2026-07-31 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 10:00:03,514 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 10:00:03,515 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 10:00:03,517 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 10:00:03,518 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 10:00:03,520 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 10:00:03,521 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 11:00:00 UTC)" executed successfully 2026-07-31 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 12:00:00 UTC)" (scheduled at 2026-07-31 11:00:00+00:00) 2026-07-31 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-31 11:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 11:00:01,283 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 11:00:01,284 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 11:00:01,287 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 11:00:01,287 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 11:00:01,293 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 11:00:01,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 12:00:00 UTC)" executed successfully 2026-07-31 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 13:00:00 UTC)" (scheduled at 2026-07-31 12:00:00+00:00) 2026-07-31 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 12:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 12:00:01,604 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 12:00:01,604 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 12:00:01,607 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 12:00:01,607 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 12:00:01,612 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 12:00:01,613 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 13:00:00 UTC)" executed successfully 2026-07-31 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 14:00:00 UTC)" (scheduled at 2026-07-31 13:00:00+00:00) 2026-07-31 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-31 13:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 13:00:01,966 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 13:00:01,968 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 13:00:01,972 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 13:00:01,972 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 13:00:01,978 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 13:00:01,981 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 14:00:00 UTC)" executed successfully 2026-07-31 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 15:00:00 UTC)" (scheduled at 2026-07-31 14:00:00+00:00) 2026-07-31 14:00:00,014 INFO [fb-sync] Starting FB sync... 2026-07-31 14:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 14:00:01,671 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 14:00:01,672 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 14:00:01,676 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 14:00:01,676 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 14:00:01,684 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 14:00:01,687 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 15:00:00 UTC)" executed successfully 2026-07-31 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 16:00:00 UTC)" (scheduled at 2026-07-31 15:00:00+00:00) 2026-07-31 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 15:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 15:00:01,252 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 15:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 15:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 15:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 15:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 15:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 16:00:00 UTC)" executed successfully 2026-07-31 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 17:00:00 UTC)" (scheduled at 2026-07-31 16:00:00+00:00) 2026-07-31 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-31 16:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 16:00:02,839 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 16:00:02,840 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 16:00:02,843 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 16:00:02,843 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 16:00:02,848 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 16:00:02,849 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 17:00:00 UTC)" executed successfully 2026-07-31 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 18:00:00 UTC)" (scheduled at 2026-07-31 17:00:00+00:00) 2026-07-31 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-07-31 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 17:00:01,674 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 17:00:01,675 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 17:00:01,678 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 17:00:01,679 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 17:00:01,684 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 17:00:01,686 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 18:00:00 UTC)" executed successfully 2026-07-31 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 19:00:00 UTC)" (scheduled at 2026-07-31 18:00:00+00:00) 2026-07-31 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 18:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 18:00:03,956 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 18:00:03,957 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 18:00:03,959 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 18:00:03,960 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 18:00:03,963 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 18:00:03,964 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 19:00:00 UTC)" executed successfully 2026-07-31 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 20:00:00 UTC)" (scheduled at 2026-07-31 19:00:00+00:00) 2026-07-31 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-07-31 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 19:00:01,386 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 19:00:01,388 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 19:00:01,390 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 19:00:01,391 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 19:00:01,396 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 19:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 20:00:00 UTC)" executed successfully 2026-07-31 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 21:00:00 UTC)" (scheduled at 2026-07-31 20:00:00+00:00) 2026-07-31 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-07-31 20:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 20:00:01,849 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 20:00:01,850 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 20:00:01,853 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 20:00:01,853 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 20:00:01,861 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 20:00:01,864 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 21:00:00 UTC)" executed successfully 2026-07-31 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 22:00:00 UTC)" (scheduled at 2026-07-31 21:00:00+00:00) 2026-07-31 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-07-31 21:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 21:00:01,901 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 21:00:01,901 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 21:00:01,905 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 21:00:01,905 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 21:00:01,911 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 21:00:01,914 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 22:00:00 UTC)" executed successfully 2026-07-31 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 23:00:00 UTC)" (scheduled at 2026-07-31 22:00:00+00:00) 2026-07-31 22:00:00,012 INFO [fb-sync] Starting FB sync... 2026-07-31 22:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 22:00:01,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 22:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 22:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 22:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 22:00:01,214 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 22:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-07-31 23:00:00 UTC)" executed successfully 2026-07-31 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 00:00:00 UTC)" (scheduled at 2026-07-31 23:00:00+00:00) 2026-07-31 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-07-31 23:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-07-31 23:00:03,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-07-31 23:00:03,375 INFO [fb-sync.worker] Scraped 50 posts 2026-07-31 23:00:03,378 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-07-31 23:00:03,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-07-31 23:00:03,383 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-07-31 23:00:03,386 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 00:00:00 UTC)" executed successfully 2026-08-01 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 01:00:00 UTC)" (scheduled at 2026-08-01 00:00:00+00:00) 2026-08-01 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-01 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 00:00:01,034 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 00:00:01,036 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 00:00:01,039 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 00:00:01,040 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 00:00:01,045 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 00:00:01,047 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 01:00:00 UTC)" executed successfully 2026-08-01 01:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 02:00:00 UTC)" (scheduled at 2026-08-01 01:00:00+00:00) 2026-08-01 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-01 01:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 01:00:01,186 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 01:00:01,187 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 01:00:01,189 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 01:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 01:00:01,193 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 01:00:01,195 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 02:00:00 UTC)" executed successfully 2026-08-01 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 03:00:00 UTC)" (scheduled at 2026-08-01 02:00:00+00:00) 2026-08-01 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-01 02:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 02:00:01,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 02:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 02:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 02:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 02:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 02:00:01,163 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 03:00:00 UTC)" executed successfully 2026-08-01 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 04:00:00 UTC)" (scheduled at 2026-08-01 03:00:00+00:00) 2026-08-01 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-01 03:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 03:00:05,707 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 03:00:05,708 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 03:00:05,712 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 03:00:05,712 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 03:00:05,717 INFO [fb-sync] Sync done: 0 new posts in 6s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 03:00:05,719 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 04:00:00 UTC)" executed successfully 2026-08-01 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 05:00:00 UTC)" (scheduled at 2026-08-01 04:00:00+00:00) 2026-08-01 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-01 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 04:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 04:00:01,171 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 04:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 04:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 04:00:01,177 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 04:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 05:00:00 UTC)" executed successfully 2026-08-01 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 06:00:00 UTC)" (scheduled at 2026-08-01 05:00:00+00:00) 2026-08-01 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 05:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 05:00:02,034 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 05:00:02,035 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 05:00:02,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 05:00:02,038 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 05:00:02,041 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 05:00:02,043 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 06:00:00 UTC)" executed successfully 2026-08-01 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 07:00:00 UTC)" (scheduled at 2026-08-01 06:00:00+00:00) 2026-08-01 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 06:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 06:00:01,175 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 06:00:01,176 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 06:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 06:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 06:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 06:00:01,186 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 07:00:00 UTC)" executed successfully 2026-08-01 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 08:00:00 UTC)" (scheduled at 2026-08-01 07:00:00+00:00) 2026-08-01 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-01 07:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 07:00:01,210 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 07:00:01,212 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 07:00:01,220 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 07:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 07:00:01,230 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 07:00:01,234 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 08:00:00 UTC)" executed successfully 2026-08-01 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 09:00:00 UTC)" (scheduled at 2026-08-01 08:00:00+00:00) 2026-08-01 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 08:00:01,116 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 08:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 08:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 08:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 08:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 08:00:01,128 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 09:00:00 UTC)" executed successfully 2026-08-01 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 10:00:00 UTC)" (scheduled at 2026-08-01 09:00:00+00:00) 2026-08-01 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-01 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 09:00:01,380 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 09:00:01,382 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 09:00:01,385 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 09:00:01,386 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 09:00:01,396 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 09:00:01,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 10:00:00 UTC)" executed successfully 2026-08-01 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 11:00:00 UTC)" (scheduled at 2026-08-01 10:00:00+00:00) 2026-08-01 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-01 10:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 10:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 10:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 10:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 10:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 10:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 10:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 11:00:00 UTC)" executed successfully 2026-08-01 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 12:00:00 UTC)" (scheduled at 2026-08-01 11:00:00+00:00) 2026-08-01 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 11:00:01,555 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 11:00:01,557 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 11:00:01,561 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 11:00:01,561 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 11:00:01,568 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 11:00:01,571 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 12:00:00 UTC)" executed successfully 2026-08-01 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 13:00:00 UTC)" (scheduled at 2026-08-01 12:00:00+00:00) 2026-08-01 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-01 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 12:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 12:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 12:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 12:00:01,114 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 12:00:01,120 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 12:00:01,122 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 13:00:00 UTC)" executed successfully 2026-08-01 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 14:00:00 UTC)" (scheduled at 2026-08-01 13:00:00+00:00) 2026-08-01 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-01 13:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 13:00:01,778 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 13:00:01,780 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 13:00:01,784 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 13:00:01,784 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 13:00:01,791 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 13:00:01,794 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 14:00:00 UTC)" executed successfully 2026-08-01 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 15:00:00 UTC)" (scheduled at 2026-08-01 14:00:00+00:00) 2026-08-01 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-01 14:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 14:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 14:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 14:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 14:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 14:00:01,249 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 14:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 15:00:00 UTC)" executed successfully 2026-08-01 15:00:00,023 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 16:00:00 UTC)" (scheduled at 2026-08-01 15:00:00+00:00) 2026-08-01 15:00:00,025 INFO [fb-sync] Starting FB sync... 2026-08-01 15:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 15:00:01,720 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 15:00:01,722 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 15:00:01,726 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 15:00:01,726 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 15:00:01,733 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 15:00:01,737 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 16:00:00 UTC)" executed successfully 2026-08-01 16:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 17:00:00 UTC)" (scheduled at 2026-08-01 16:00:00+00:00) 2026-08-01 16:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-01 16:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 16:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 16:00:01,192 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 16:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 16:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 16:00:01,203 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 16:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 17:00:00 UTC)" executed successfully 2026-08-01 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 18:00:00 UTC)" (scheduled at 2026-08-01 17:00:00+00:00) 2026-08-01 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-01 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 17:00:01,327 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 17:00:01,329 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 17:00:01,334 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 17:00:01,334 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 17:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 17:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 18:00:00 UTC)" executed successfully 2026-08-01 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 19:00:00 UTC)" (scheduled at 2026-08-01 18:00:00+00:00) 2026-08-01 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 18:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 18:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 18:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 18:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 18:00:01,218 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 18:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 19:00:00 UTC)" executed successfully 2026-08-01 19:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 20:00:00 UTC)" (scheduled at 2026-08-01 19:00:00+00:00) 2026-08-01 19:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-01 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 19:00:01,129 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 19:00:01,130 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 19:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 19:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 19:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 19:00:01,146 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 20:00:00 UTC)" executed successfully 2026-08-01 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 20:00:00 UTC)" (scheduled at 2026-08-01 20:00:00+00:00) 2026-08-01 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-01 20:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 20:00:02,041 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 20:00:02,043 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 20:00:02,046 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 20:00:02,046 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 20:00:02,054 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 20:00:02,056 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 21:00:00 UTC)" executed successfully 2026-08-01 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 22:00:00 UTC)" (scheduled at 2026-08-01 21:00:00+00:00) 2026-08-01 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-01 21:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 21:00:01,032 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 21:00:01,034 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 21:00:01,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 21:00:01,037 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 21:00:01,044 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 21:00:01,047 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 22:00:00 UTC)" executed successfully 2026-08-01 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 23:00:00 UTC)" (scheduled at 2026-08-01 22:00:00+00:00) 2026-08-01 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-01 22:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 22:00:01,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 22:00:01,444 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 22:00:01,448 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 22:00:01,448 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 22:00:01,457 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 22:00:01,461 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-01 23:00:00 UTC)" executed successfully 2026-08-01 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 00:00:00 UTC)" (scheduled at 2026-08-01 23:00:00+00:00) 2026-08-01 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-01 23:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-01 23:00:01,695 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-01 23:00:01,697 INFO [fb-sync.worker] Scraped 50 posts 2026-08-01 23:00:01,700 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-01 23:00:01,700 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-01 23:00:01,708 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-01 23:00:01,711 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 00:00:00 UTC)" executed successfully 2026-08-02 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 01:00:00 UTC)" (scheduled at 2026-08-02 00:00:00+00:00) 2026-08-02 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 00:00:00,996 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 00:00:00,997 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 00:00:01,000 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 00:00:01,000 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 00:00:01,007 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 00:00:01,009 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 01:00:00 UTC)" executed successfully 2026-08-02 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 02:00:00 UTC)" (scheduled at 2026-08-02 01:00:00+00:00) 2026-08-02 01:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-02 01:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 01:00:01,062 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 01:00:01,064 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 01:00:01,068 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 01:00:01,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 01:00:01,075 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 01:00:01,079 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 02:00:00 UTC)" executed successfully 2026-08-02 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 03:00:00 UTC)" (scheduled at 2026-08-02 02:00:00+00:00) 2026-08-02 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 02:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 02:00:01,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 02:00:01,101 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 02:00:01,104 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 02:00:01,104 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 02:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 02:00:01,116 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 03:00:00 UTC)" executed successfully 2026-08-02 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 04:00:00 UTC)" (scheduled at 2026-08-02 03:00:00+00:00) 2026-08-02 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 03:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 03:00:01,296 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 03:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 03:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 03:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 03:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 04:00:00 UTC)" executed successfully 2026-08-02 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 05:00:00 UTC)" (scheduled at 2026-08-02 04:00:00+00:00) 2026-08-02 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 04:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 04:00:01,135 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 04:00:01,136 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 04:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 04:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 04:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 04:00:01,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 05:00:00 UTC)" executed successfully 2026-08-02 05:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 06:00:00 UTC)" (scheduled at 2026-08-02 05:00:00+00:00) 2026-08-02 05:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-02 05:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 05:00:01,569 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 05:00:01,571 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 05:00:01,575 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 05:00:01,575 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 05:00:01,583 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 05:00:01,587 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 06:00:00 UTC)" executed successfully 2026-08-02 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 07:00:00 UTC)" (scheduled at 2026-08-02 06:00:00+00:00) 2026-08-02 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-02 06:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 06:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 06:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 06:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 06:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 06:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 06:00:01,118 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 07:00:00 UTC)" executed successfully 2026-08-02 07:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 08:00:00 UTC)" (scheduled at 2026-08-02 07:00:00+00:00) 2026-08-02 07:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-02 07:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 07:00:01,451 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 07:00:01,453 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 07:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 07:00:01,458 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 07:00:01,468 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 07:00:01,473 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 08:00:00 UTC)" executed successfully 2026-08-02 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 09:00:00 UTC)" (scheduled at 2026-08-02 08:00:00+00:00) 2026-08-02 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 08:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 08:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 08:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 08:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 08:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 08:00:01,217 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 08:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 09:00:00 UTC)" executed successfully 2026-08-02 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 10:00:00 UTC)" (scheduled at 2026-08-02 09:00:00+00:00) 2026-08-02 09:00:00,016 INFO [fb-sync] Starting FB sync... 2026-08-02 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 09:00:02,185 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 09:00:02,187 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 09:00:02,191 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 09:00:02,191 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 09:00:02,202 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 09:00:02,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 10:00:00 UTC)" executed successfully 2026-08-02 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 11:00:00 UTC)" (scheduled at 2026-08-02 10:00:00+00:00) 2026-08-02 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-02 10:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 10:00:01,668 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 10:00:01,670 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 10:00:01,675 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 10:00:01,675 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 10:00:01,685 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 10:00:01,690 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 11:00:00 UTC)" executed successfully 2026-08-02 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 12:00:00 UTC)" (scheduled at 2026-08-02 11:00:00+00:00) 2026-08-02 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 11:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 11:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 11:00:01,185 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 11:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 11:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 11:00:01,200 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 12:00:00 UTC)" executed successfully 2026-08-02 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 13:00:00 UTC)" (scheduled at 2026-08-02 12:00:00+00:00) 2026-08-02 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-02 12:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 12:00:01,467 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 12:00:01,468 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 12:00:01,471 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 12:00:01,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 12:00:01,478 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 12:00:01,482 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 13:00:00 UTC)" executed successfully 2026-08-02 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 14:00:00 UTC)" (scheduled at 2026-08-02 13:00:00+00:00) 2026-08-02 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-02 13:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 13:00:01,387 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 13:00:01,389 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 13:00:01,393 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 13:00:01,393 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 13:00:01,403 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 13:00:01,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 14:00:00 UTC)" executed successfully 2026-08-02 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 15:00:00 UTC)" (scheduled at 2026-08-02 14:00:00+00:00) 2026-08-02 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 14:00:01,654 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 14:00:01,656 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 14:00:01,659 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 14:00:01,660 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 14:00:01,670 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 14:00:01,674 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 15:00:00 UTC)" executed successfully 2026-08-02 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 16:00:00 UTC)" (scheduled at 2026-08-02 15:00:00+00:00) 2026-08-02 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-02 15:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 15:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 15:00:01,217 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 15:00:01,221 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 15:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 15:00:01,231 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 15:00:01,236 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 16:00:00 UTC)" executed successfully 2026-08-02 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 17:00:00 UTC)" (scheduled at 2026-08-02 16:00:00+00:00) 2026-08-02 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 16:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 16:00:01,586 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 16:00:01,588 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 16:00:01,591 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 16:00:01,591 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 16:00:01,600 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 16:00:01,604 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 17:00:00 UTC)" executed successfully 2026-08-02 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 18:00:00 UTC)" (scheduled at 2026-08-02 17:00:00+00:00) 2026-08-02 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 17:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 17:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 17:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 17:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 17:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 17:00:01,182 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 17:00:01,186 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 18:00:00 UTC)" executed successfully 2026-08-02 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 19:00:00 UTC)" (scheduled at 2026-08-02 18:00:00+00:00) 2026-08-02 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 18:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 18:00:02,035 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 18:00:02,038 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 18:00:02,041 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 18:00:02,041 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 18:00:02,050 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 18:00:02,054 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 19:00:00 UTC)" executed successfully 2026-08-02 19:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 20:00:00 UTC)" (scheduled at 2026-08-02 19:00:00+00:00) 2026-08-02 19:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-02 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 19:00:01,606 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 19:00:01,607 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 19:00:01,610 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 19:00:01,610 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 19:00:01,617 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 19:00:01,619 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 20:00:00 UTC)" executed successfully 2026-08-02 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 21:00:00 UTC)" (scheduled at 2026-08-02 20:00:00+00:00) 2026-08-02 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-02 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 20:00:01,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 20:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 20:00:01,205 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 20:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 20:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 20:00:01,217 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 21:00:00 UTC)" executed successfully 2026-08-02 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 22:00:00 UTC)" (scheduled at 2026-08-02 21:00:00+00:00) 2026-08-02 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 21:00:02,050 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 21:00:02,052 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 21:00:02,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 21:00:02,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 21:00:02,065 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 21:00:02,075 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 22:00:00 UTC)" executed successfully 2026-08-02 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 23:00:00 UTC)" (scheduled at 2026-08-02 22:00:00+00:00) 2026-08-02 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-02 22:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 22:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 22:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 22:00:01,298 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 22:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 22:00:01,313 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 22:00:01,315 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-02 23:00:00 UTC)" executed successfully 2026-08-02 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 00:00:00 UTC)" (scheduled at 2026-08-02 23:00:00+00:00) 2026-08-02 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-02 23:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-02 23:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-02 23:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-08-02 23:00:01,034 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-02 23:00:01,034 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-02 23:00:01,041 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-02 23:00:01,044 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 00:00:00 UTC)" executed successfully 2026-08-03 00:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 01:00:00 UTC)" (scheduled at 2026-08-03 00:00:00+00:00) 2026-08-03 00:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-03 00:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 00:00:01,000 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 00:00:01,001 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 00:00:01,004 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 00:00:01,004 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 00:00:01,013 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 00:00:01,015 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 01:00:00 UTC)" executed successfully 2026-08-03 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 02:00:00 UTC)" (scheduled at 2026-08-03 01:00:00+00:00) 2026-08-03 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 01:00:01,086 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 01:00:01,087 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 01:00:01,093 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 01:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 01:00:01,105 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 01:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 02:00:00 UTC)" executed successfully 2026-08-03 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 03:00:00 UTC)" (scheduled at 2026-08-03 02:00:00+00:00) 2026-08-03 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-03 02:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 02:00:01,555 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 02:00:01,557 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 02:00:01,560 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 02:00:01,561 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 02:00:01,572 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 02:00:01,578 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 03:00:00 UTC)" executed successfully 2026-08-03 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 04:00:00 UTC)" (scheduled at 2026-08-03 03:00:00+00:00) 2026-08-03 03:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-03 03:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 03:00:01,188 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 03:00:01,190 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 03:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 03:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 03:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 03:00:01,208 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 04:00:00 UTC)" executed successfully 2026-08-03 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 05:00:00 UTC)" (scheduled at 2026-08-03 04:00:00+00:00) 2026-08-03 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-03 04:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 04:00:01,510 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 04:00:01,512 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 04:00:01,514 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 04:00:01,514 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 04:00:01,525 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 04:00:01,532 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 05:00:00 UTC)" executed successfully 2026-08-03 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 06:00:00 UTC)" (scheduled at 2026-08-03 05:00:00+00:00) 2026-08-03 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 05:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 05:00:01,185 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 05:00:01,187 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 05:00:01,191 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 05:00:01,192 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 05:00:01,206 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 05:00:01,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 06:00:00 UTC)" executed successfully 2026-08-03 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 07:00:00 UTC)" (scheduled at 2026-08-03 06:00:00+00:00) 2026-08-03 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-03 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 06:00:01,044 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 06:00:01,045 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 06:00:01,049 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 06:00:01,049 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 06:00:01,056 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 06:00:01,060 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 07:00:00 UTC)" executed successfully 2026-08-03 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 08:00:00 UTC)" (scheduled at 2026-08-03 07:00:00+00:00) 2026-08-03 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-03 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 07:00:01,454 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 07:00:01,456 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 07:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 07:00:01,458 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 07:00:01,467 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 07:00:01,470 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 08:00:00 UTC)" executed successfully 2026-08-03 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 09:00:00 UTC)" (scheduled at 2026-08-03 08:00:00+00:00) 2026-08-03 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-03 08:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 08:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 08:00:01,113 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 08:00:01,115 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 08:00:01,116 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 08:00:01,125 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 08:00:01,129 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 09:00:00 UTC)" executed successfully 2026-08-03 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 10:00:00 UTC)" (scheduled at 2026-08-03 09:00:00+00:00) 2026-08-03 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-03 09:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 09:00:01,734 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 09:00:01,736 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 09:00:01,740 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 09:00:01,740 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 09:00:01,751 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 09:00:01,756 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 10:00:00 UTC)" executed successfully 2026-08-03 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 11:00:00 UTC)" (scheduled at 2026-08-03 10:00:00+00:00) 2026-08-03 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-03 10:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 10:00:01,841 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 10:00:01,842 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 10:00:01,846 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 10:00:01,846 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 10:00:01,855 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 10:00:01,861 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 11:00:00 UTC)" executed successfully 2026-08-03 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 12:00:00 UTC)" (scheduled at 2026-08-03 11:00:00+00:00) 2026-08-03 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-03 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 11:00:02,754 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 11:00:02,755 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 11:00:02,759 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 11:00:02,759 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 11:00:02,770 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 11:00:02,776 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 12:00:00 UTC)" executed successfully 2026-08-03 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 13:00:00 UTC)" (scheduled at 2026-08-03 12:00:00+00:00) 2026-08-03 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 12:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 12:00:01,198 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 12:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 12:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 12:00:01,204 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 12:00:01,213 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 12:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 13:00:00 UTC)" executed successfully 2026-08-03 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 14:00:00 UTC)" (scheduled at 2026-08-03 13:00:00+00:00) 2026-08-03 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 13:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 13:00:01,618 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 13:00:01,620 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 13:00:01,623 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 13:00:01,624 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 13:00:01,635 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 13:00:01,640 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 14:00:00 UTC)" executed successfully 2026-08-03 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 15:00:00 UTC)" (scheduled at 2026-08-03 14:00:00+00:00) 2026-08-03 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-03 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 14:00:01,287 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 14:00:01,289 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 14:00:01,293 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 14:00:01,294 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 14:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 14:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 15:00:00 UTC)" executed successfully 2026-08-03 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 16:00:00 UTC)" (scheduled at 2026-08-03 15:00:00+00:00) 2026-08-03 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-03 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 15:00:02,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 15:00:02,099 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 15:00:02,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 15:00:02,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 15:00:02,115 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 15:00:02,120 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 16:00:00 UTC)" executed successfully 2026-08-03 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 17:00:00 UTC)" (scheduled at 2026-08-03 16:00:00+00:00) 2026-08-03 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-03 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 16:00:01,840 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 16:00:01,842 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 16:00:01,846 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 16:00:01,846 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 16:00:01,855 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 16:00:01,861 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 17:00:00 UTC)" executed successfully 2026-08-03 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 18:00:00 UTC)" (scheduled at 2026-08-03 17:00:00+00:00) 2026-08-03 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-03 17:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 17:00:01,743 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 17:00:01,744 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 17:00:01,748 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 17:00:01,748 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 17:00:01,758 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 17:00:01,763 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 18:00:00 UTC)" executed successfully 2026-08-03 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 19:00:00 UTC)" (scheduled at 2026-08-03 18:00:00+00:00) 2026-08-03 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-03 18:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 18:00:01,882 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 18:00:01,884 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 18:00:01,888 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 18:00:01,888 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 18:00:01,903 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 18:00:01,909 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 19:00:00 UTC)" executed successfully 2026-08-03 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 20:00:00 UTC)" (scheduled at 2026-08-03 19:00:00+00:00) 2026-08-03 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-03 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 19:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 19:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 19:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 19:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 19:00:01,165 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 19:00:01,170 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 20:00:00 UTC)" executed successfully 2026-08-03 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 21:00:00 UTC)" (scheduled at 2026-08-03 20:00:00+00:00) 2026-08-03 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-03 20:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 20:00:01,794 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 20:00:01,796 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 20:00:01,799 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 20:00:01,799 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 20:00:01,811 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 20:00:01,817 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 21:00:00 UTC)" executed successfully 2026-08-03 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 22:00:00 UTC)" (scheduled at 2026-08-03 21:00:00+00:00) 2026-08-03 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 21:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 21:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 21:00:01,199 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 21:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 21:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 21:00:01,215 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 21:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 22:00:00 UTC)" executed successfully 2026-08-03 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 23:00:00 UTC)" (scheduled at 2026-08-03 22:00:00+00:00) 2026-08-03 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-03 22:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 22:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 22:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 22:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 22:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 22:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 22:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-03 23:00:00 UTC)" executed successfully 2026-08-03 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 00:00:00 UTC)" (scheduled at 2026-08-03 23:00:00+00:00) 2026-08-03 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-03 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-03 23:00:01,297 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-03 23:00:01,299 INFO [fb-sync.worker] Scraped 50 posts 2026-08-03 23:00:01,302 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-03 23:00:01,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-03 23:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-03 23:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 00:00:00 UTC)" executed successfully 2026-08-04 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 01:00:00 UTC)" (scheduled at 2026-08-04 00:00:00+00:00) 2026-08-04 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-04 00:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 00:00:01,500 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 00:00:01,502 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 00:00:01,503 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 00:00:01,503 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 00:00:01,516 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 00:00:01,521 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 01:00:00 UTC)" executed successfully 2026-08-04 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 02:00:00 UTC)" (scheduled at 2026-08-04 01:00:00+00:00) 2026-08-04 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-04 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 01:00:01,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 01:00:01,174 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 01:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 01:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 01:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 01:00:01,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 02:00:00 UTC)" executed successfully 2026-08-04 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 03:00:00 UTC)" (scheduled at 2026-08-04 02:00:00+00:00) 2026-08-04 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-04 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 02:00:01,233 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 02:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 02:00:01,237 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 02:00:01,237 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 02:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 02:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 03:00:00 UTC)" executed successfully 2026-08-04 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 04:00:00 UTC)" (scheduled at 2026-08-04 03:00:00+00:00) 2026-08-04 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-04 03:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 03:00:01,180 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 03:00:01,182 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 03:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 03:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 03:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 03:00:01,199 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 04:00:00 UTC)" executed successfully 2026-08-04 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 05:00:00 UTC)" (scheduled at 2026-08-04 04:00:00+00:00) 2026-08-04 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-04 04:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 04:00:01,393 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 04:00:01,394 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 04:00:01,398 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 04:00:01,399 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 04:00:01,413 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 04:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 05:00:00 UTC)" executed successfully 2026-08-04 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 06:00:00 UTC)" (scheduled at 2026-08-04 05:00:00+00:00) 2026-08-04 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-04 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 05:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 05:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 05:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 05:00:01,171 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 05:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 05:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 06:00:00 UTC)" executed successfully 2026-08-04 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 07:00:00 UTC)" (scheduled at 2026-08-04 06:00:00+00:00) 2026-08-04 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-04 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 06:00:01,465 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 06:00:01,467 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 06:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 06:00:01,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 06:00:01,486 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 06:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 07:00:00 UTC)" executed successfully 2026-08-04 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 08:00:00 UTC)" (scheduled at 2026-08-04 07:00:00+00:00) 2026-08-04 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-04 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 07:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 07:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 07:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 07:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 07:00:01,135 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 07:00:01,142 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 08:00:00 UTC)" executed successfully 2026-08-04 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 09:00:00 UTC)" (scheduled at 2026-08-04 08:00:00+00:00) 2026-08-04 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-04 08:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 08:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 08:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 08:00:01,105 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 08:00:01,105 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 08:00:01,116 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 08:00:01,119 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 09:00:00 UTC)" executed successfully 2026-08-04 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 10:00:00 UTC)" (scheduled at 2026-08-04 09:00:00+00:00) 2026-08-04 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-04 09:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 09:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 09:00:01,257 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 09:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 09:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 09:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 09:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 10:00:00 UTC)" executed successfully 2026-08-04 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 11:00:00 UTC)" (scheduled at 2026-08-04 10:00:00+00:00) 2026-08-04 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-04 10:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 10:00:01,702 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 10:00:01,703 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 10:00:01,705 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 10:00:01,705 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 10:00:01,714 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 10:00:01,719 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 11:00:00 UTC)" executed successfully 2026-08-04 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 12:00:00 UTC)" (scheduled at 2026-08-04 11:00:00+00:00) 2026-08-04 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-04 11:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 11:00:01,727 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 11:00:01,729 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 11:00:01,731 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 11:00:01,731 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 11:00:01,745 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 11:00:01,751 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 12:00:00 UTC)" executed successfully 2026-08-04 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 13:00:00 UTC)" (scheduled at 2026-08-04 12:00:00+00:00) 2026-08-04 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-04 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 12:00:01,258 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 12:00:01,259 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 12:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 12:00:01,263 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 12:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 12:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 13:00:00 UTC)" executed successfully 2026-08-04 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 14:00:00 UTC)" (scheduled at 2026-08-04 13:00:00+00:00) 2026-08-04 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-04 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 13:00:02,348 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 13:00:02,350 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 13:00:02,353 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 13:00:02,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 13:00:02,367 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 13:00:02,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 14:00:00 UTC)" executed successfully 2026-08-04 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 15:00:00 UTC)" (scheduled at 2026-08-04 14:00:00+00:00) 2026-08-04 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-04 14:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 14:00:01,284 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 14:00:01,287 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 14:00:01,290 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 14:00:01,290 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 14:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 14:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 15:00:00 UTC)" executed successfully 2026-08-04 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 16:00:00 UTC)" (scheduled at 2026-08-04 15:00:00+00:00) 2026-08-04 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-04 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 15:00:01,753 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 15:00:01,755 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 15:00:01,759 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 15:00:01,759 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 15:00:01,777 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 15:00:01,783 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 16:00:00 UTC)" executed successfully 2026-08-04 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 17:00:00 UTC)" (scheduled at 2026-08-04 16:00:00+00:00) 2026-08-04 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-04 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 16:00:01,366 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 16:00:01,367 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 16:00:01,369 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 16:00:01,369 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 16:00:01,378 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 16:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 17:00:00 UTC)" executed successfully 2026-08-04 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 18:00:00 UTC)" (scheduled at 2026-08-04 17:00:00+00:00) 2026-08-04 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-04 17:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 17:00:02,573 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 17:00:02,574 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 17:00:02,577 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 17:00:02,578 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 17:00:02,592 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 17:00:02,599 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 18:00:00 UTC)" executed successfully 2026-08-04 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 19:00:00 UTC)" (scheduled at 2026-08-04 18:00:00+00:00) 2026-08-04 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-04 18:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 18:00:01,268 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 18:00:01,270 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 18:00:01,272 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 18:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 18:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 18:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 19:00:00 UTC)" executed successfully 2026-08-04 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 20:00:00 UTC)" (scheduled at 2026-08-04 19:00:00+00:00) 2026-08-04 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-04 19:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 19:00:01,800 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 19:00:01,802 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 19:00:01,805 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 19:00:01,806 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 19:00:01,828 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 19:00:01,832 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 20:00:00 UTC)" executed successfully 2026-08-04 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 21:00:00 UTC)" (scheduled at 2026-08-04 20:00:00+00:00) 2026-08-04 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-04 20:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 20:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 20:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 20:00:01,229 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 20:00:01,229 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 20:00:01,244 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 20:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 21:00:00 UTC)" executed successfully 2026-08-04 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 22:00:00 UTC)" (scheduled at 2026-08-04 21:00:00+00:00) 2026-08-04 21:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-04 21:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 21:00:01,233 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 21:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 21:00:01,236 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 21:00:01,236 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 21:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 21:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 22:00:00 UTC)" executed successfully 2026-08-04 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 23:00:00 UTC)" (scheduled at 2026-08-04 22:00:00+00:00) 2026-08-04 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-04 22:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 22:00:01,586 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 22:00:01,588 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 22:00:01,591 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 22:00:01,591 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 22:00:01,606 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 22:00:01,613 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-04 23:00:00 UTC)" executed successfully 2026-08-04 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 00:00:00 UTC)" (scheduled at 2026-08-04 23:00:00+00:00) 2026-08-04 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-04 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-04 23:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-04 23:00:01,130 INFO [fb-sync.worker] Scraped 50 posts 2026-08-04 23:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-04 23:00:01,133 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-04 23:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-04 23:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 00:00:00 UTC)" executed successfully 2026-08-05 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 01:00:00 UTC)" (scheduled at 2026-08-05 00:00:00+00:00) 2026-08-05 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-05 00:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 00:00:01,536 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 00:00:01,539 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 00:00:01,543 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 00:00:01,544 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 00:00:01,565 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 00:00:01,572 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 01:00:00 UTC)" executed successfully 2026-08-05 01:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 02:00:00 UTC)" (scheduled at 2026-08-05 01:00:00+00:00) 2026-08-05 01:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-05 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 01:00:01,416 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 01:00:01,418 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 01:00:01,422 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 01:00:01,422 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 01:00:01,436 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 01:00:01,442 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 02:00:00 UTC)" executed successfully 2026-08-05 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 03:00:00 UTC)" (scheduled at 2026-08-05 02:00:00+00:00) 2026-08-05 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-05 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 02:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 02:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 02:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 02:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 02:00:01,322 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 02:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 03:00:00 UTC)" executed successfully 2026-08-05 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 04:00:00 UTC)" (scheduled at 2026-08-05 03:00:00+00:00) 2026-08-05 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-05 03:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 03:00:01,742 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 03:00:01,744 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 03:00:01,746 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 03:00:01,746 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 03:00:01,759 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 03:00:01,765 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 04:00:00 UTC)" executed successfully 2026-08-05 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 05:00:00 UTC)" (scheduled at 2026-08-05 04:00:00+00:00) 2026-08-05 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 04:00:01,717 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 04:00:01,719 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 04:00:01,723 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 04:00:01,723 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 04:00:01,740 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 04:00:01,748 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 05:00:00 UTC)" executed successfully 2026-08-05 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 06:00:00 UTC)" (scheduled at 2026-08-05 05:00:00+00:00) 2026-08-05 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-05 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 05:00:01,451 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 05:00:01,453 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 05:00:01,456 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 05:00:01,457 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 05:00:01,472 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 05:00:01,478 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 06:00:00 UTC)" executed successfully 2026-08-05 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 07:00:00 UTC)" (scheduled at 2026-08-05 06:00:00+00:00) 2026-08-05 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 06:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 06:00:01,303 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 06:00:01,305 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 06:00:01,309 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 06:00:01,309 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 06:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 06:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 07:00:00 UTC)" executed successfully 2026-08-05 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 08:00:00 UTC)" (scheduled at 2026-08-05 07:00:00+00:00) 2026-08-05 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 07:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 07:00:01,175 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 07:00:01,177 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 07:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 07:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 07:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 07:00:01,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 08:00:00 UTC)" executed successfully 2026-08-05 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 09:00:00 UTC)" (scheduled at 2026-08-05 08:00:00+00:00) 2026-08-05 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-05 08:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 08:00:02,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 08:00:02,203 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 08:00:02,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 08:00:02,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 08:00:02,221 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 08:00:02,228 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 09:00:00 UTC)" executed successfully 2026-08-05 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 10:00:00 UTC)" (scheduled at 2026-08-05 09:00:00+00:00) 2026-08-05 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-05 09:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 09:00:01,627 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 09:00:01,629 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 09:00:01,632 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 09:00:01,632 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 09:00:01,650 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 09:00:01,657 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 10:00:00 UTC)" executed successfully 2026-08-05 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 11:00:00 UTC)" (scheduled at 2026-08-05 10:00:00+00:00) 2026-08-05 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-05 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 10:00:01,589 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 10:00:01,591 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 10:00:01,594 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 10:00:01,594 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 10:00:01,613 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 10:00:01,622 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 11:00:00 UTC)" executed successfully 2026-08-05 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 12:00:00 UTC)" (scheduled at 2026-08-05 11:00:00+00:00) 2026-08-05 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-05 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 11:00:01,433 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 11:00:01,435 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 11:00:01,441 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 11:00:01,442 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 11:00:01,466 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 11:00:01,480 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 12:00:00 UTC)" executed successfully 2026-08-05 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 13:00:00 UTC)" (scheduled at 2026-08-05 12:00:00+00:00) 2026-08-05 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-05 12:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 12:00:01,368 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 12:00:01,369 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 12:00:01,372 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 12:00:01,372 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 12:00:01,389 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 12:00:01,397 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 13:00:00 UTC)" executed successfully 2026-08-05 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 14:00:00 UTC)" (scheduled at 2026-08-05 13:00:00+00:00) 2026-08-05 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-05 13:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 13:00:01,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 13:00:01,348 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 13:00:01,352 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 13:00:01,353 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 13:00:01,373 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 13:00:01,381 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 14:00:00 UTC)" executed successfully 2026-08-05 14:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 15:00:00 UTC)" (scheduled at 2026-08-05 14:00:00+00:00) 2026-08-05 14:00:00,018 INFO [fb-sync] Starting FB sync... 2026-08-05 14:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 14:00:01,785 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 14:00:01,787 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 14:00:01,790 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 14:00:01,791 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 14:00:01,801 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 14:00:01,807 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 15:00:00 UTC)" executed successfully 2026-08-05 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 16:00:00 UTC)" (scheduled at 2026-08-05 15:00:00+00:00) 2026-08-05 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 15:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 15:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 15:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 15:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 15:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 15:00:01,328 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 16:00:00 UTC)" executed successfully 2026-08-05 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 17:00:00 UTC)" (scheduled at 2026-08-05 16:00:00+00:00) 2026-08-05 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 16:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 16:00:01,616 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 16:00:01,618 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 16:00:01,621 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 16:00:01,622 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 16:00:01,642 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 16:00:01,651 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 17:00:00 UTC)" executed successfully 2026-08-05 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 18:00:00 UTC)" (scheduled at 2026-08-05 17:00:00+00:00) 2026-08-05 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 17:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 17:00:01,415 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 17:00:01,417 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 17:00:01,420 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 17:00:01,420 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 17:00:01,432 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 17:00:01,437 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 18:00:00 UTC)" executed successfully 2026-08-05 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 19:00:00 UTC)" (scheduled at 2026-08-05 18:00:00+00:00) 2026-08-05 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-05 18:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 18:00:01,221 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 18:00:01,222 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 18:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 18:00:01,228 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 18:00:01,243 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 18:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 19:00:00 UTC)" executed successfully 2026-08-05 19:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 20:00:00 UTC)" (scheduled at 2026-08-05 19:00:00+00:00) 2026-08-05 19:00:00,019 INFO [fb-sync] Starting FB sync... 2026-08-05 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 19:00:01,288 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 19:00:01,289 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 19:00:01,291 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 19:00:01,291 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 19:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 19:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 20:00:00 UTC)" executed successfully 2026-08-05 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 21:00:00 UTC)" (scheduled at 2026-08-05 20:00:00+00:00) 2026-08-05 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-05 20:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 20:00:01,304 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 20:00:01,307 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 20:00:01,311 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 20:00:01,312 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 20:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 20:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 21:00:00 UTC)" executed successfully 2026-08-05 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 22:00:00 UTC)" (scheduled at 2026-08-05 21:00:00+00:00) 2026-08-05 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-05 21:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 21:00:01,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 21:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 21:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 21:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 21:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 21:00:01,232 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 22:00:00 UTC)" executed successfully 2026-08-05 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 23:00:00 UTC)" (scheduled at 2026-08-05 22:00:00+00:00) 2026-08-05 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-05 22:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 22:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 22:00:01,201 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 22:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 22:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 22:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 22:00:01,228 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-05 23:00:00 UTC)" executed successfully 2026-08-05 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 00:00:00 UTC)" (scheduled at 2026-08-05 23:00:00+00:00) 2026-08-05 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-05 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-05 23:00:01,836 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-05 23:00:01,838 INFO [fb-sync.worker] Scraped 50 posts 2026-08-05 23:00:01,841 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-05 23:00:01,841 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-05 23:00:01,856 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-05 23:00:01,862 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 00:00:00 UTC)" executed successfully 2026-08-06 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 01:00:00 UTC)" (scheduled at 2026-08-06 00:00:00+00:00) 2026-08-06 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-06 00:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 00:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 00:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 00:00:01,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 00:00:01,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 00:00:01,177 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 00:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 01:00:00 UTC)" executed successfully 2026-08-06 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 02:00:00 UTC)" (scheduled at 2026-08-06 01:00:00+00:00) 2026-08-06 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-06 01:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 01:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 01:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 01:00:01,224 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 01:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 01:00:01,238 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 01:00:01,243 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 02:00:00 UTC)" executed successfully 2026-08-06 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 03:00:00 UTC)" (scheduled at 2026-08-06 02:00:00+00:00) 2026-08-06 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-06 02:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 02:00:01,521 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 02:00:01,523 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 02:00:01,526 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 02:00:01,526 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 02:00:01,544 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 02:00:01,554 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 03:00:00 UTC)" executed successfully 2026-08-06 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 04:00:00 UTC)" (scheduled at 2026-08-06 03:00:00+00:00) 2026-08-06 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 03:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 03:00:01,329 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 03:00:01,330 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 03:00:01,332 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 03:00:01,332 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 03:00:01,344 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 03:00:01,348 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 04:00:00 UTC)" executed successfully 2026-08-06 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 05:00:00 UTC)" (scheduled at 2026-08-06 04:00:00+00:00) 2026-08-06 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-06 04:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 04:00:01,507 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 04:00:01,509 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 04:00:01,513 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 04:00:01,513 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 04:00:01,531 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 04:00:01,538 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 05:00:00 UTC)" executed successfully 2026-08-06 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 06:00:00 UTC)" (scheduled at 2026-08-06 05:00:00+00:00) 2026-08-06 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-06 05:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 05:00:01,786 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 05:00:01,788 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 05:00:01,790 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 05:00:01,790 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 05:00:01,812 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 05:00:01,818 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 06:00:00 UTC)" executed successfully 2026-08-06 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 07:00:00 UTC)" (scheduled at 2026-08-06 06:00:00+00:00) 2026-08-06 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-06 06:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 06:00:01,597 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 06:00:01,600 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 06:00:01,605 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 06:00:01,606 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 06:00:01,628 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 06:00:01,639 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 07:00:00 UTC)" executed successfully 2026-08-06 07:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 08:00:00 UTC)" (scheduled at 2026-08-06 07:00:00+00:00) 2026-08-06 07:00:00,018 INFO [fb-sync] Starting FB sync... 2026-08-06 07:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 07:00:01,414 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 07:00:01,416 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 07:00:01,419 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 07:00:01,419 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 07:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 07:00:01,445 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 08:00:00 UTC)" executed successfully 2026-08-06 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 09:00:00 UTC)" (scheduled at 2026-08-06 08:00:00+00:00) 2026-08-06 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 08:00:01,302 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 08:00:01,303 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 08:00:01,310 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 08:00:01,311 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 08:00:01,322 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 08:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 09:00:00 UTC)" executed successfully 2026-08-06 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 10:00:00 UTC)" (scheduled at 2026-08-06 09:00:00+00:00) 2026-08-06 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 09:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 09:00:01,316 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 09:00:01,318 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 09:00:01,321 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 09:00:01,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 09:00:01,336 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 09:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 10:00:00 UTC)" executed successfully 2026-08-06 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 11:00:00 UTC)" (scheduled at 2026-08-06 10:00:00+00:00) 2026-08-06 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 10:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 10:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 10:00:01,310 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 10:00:01,313 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 10:00:01,313 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 10:00:01,331 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 10:00:01,339 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 11:00:00 UTC)" executed successfully 2026-08-06 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 12:00:00 UTC)" (scheduled at 2026-08-06 11:00:00+00:00) 2026-08-06 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-06 11:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 11:00:01,361 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 11:00:01,363 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 11:00:01,368 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 11:00:01,368 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 11:00:01,391 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 11:00:01,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 12:00:00 UTC)" executed successfully 2026-08-06 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 13:00:00 UTC)" (scheduled at 2026-08-06 12:00:00+00:00) 2026-08-06 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 12:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 12:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 12:00:01,352 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 12:00:01,355 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 12:00:01,355 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 12:00:01,370 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 12:00:01,376 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 13:00:00 UTC)" executed successfully 2026-08-06 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 14:00:00 UTC)" (scheduled at 2026-08-06 13:00:00+00:00) 2026-08-06 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 13:00:01,411 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 13:00:01,414 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 13:00:01,418 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 13:00:01,418 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 13:00:01,437 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 13:00:01,447 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 14:00:00 UTC)" executed successfully 2026-08-06 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 15:00:00 UTC)" (scheduled at 2026-08-06 14:00:00+00:00) 2026-08-06 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-06 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 14:00:01,907 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 14:00:01,909 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 14:00:01,913 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 14:00:01,913 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 14:00:01,942 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 14:00:01,950 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 15:00:00 UTC)" executed successfully 2026-08-06 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 16:00:00 UTC)" (scheduled at 2026-08-06 15:00:00+00:00) 2026-08-06 15:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-06 15:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 15:00:02,636 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 15:00:02,638 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 15:00:02,641 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 15:00:02,641 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 15:00:02,662 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 15:00:02,668 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 16:00:00 UTC)" executed successfully 2026-08-06 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 17:00:00 UTC)" (scheduled at 2026-08-06 16:00:00+00:00) 2026-08-06 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 16:00:01,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 16:00:01,357 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 16:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 16:00:01,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 16:00:01,384 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 16:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 17:00:00 UTC)" executed successfully 2026-08-06 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 18:00:00 UTC)" (scheduled at 2026-08-06 17:00:00+00:00) 2026-08-06 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 17:00:00,113 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 17:00:01,635 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 17:00:01,637 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 17:00:01,641 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 17:00:01,642 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 17:00:01,673 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 17:00:01,683 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 18:00:00 UTC)" executed successfully 2026-08-06 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 19:00:00 UTC)" (scheduled at 2026-08-06 18:00:00+00:00) 2026-08-06 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 18:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 18:00:01,341 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 18:00:01,342 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 18:00:01,345 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 18:00:01,346 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 18:00:01,363 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 18:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 19:00:00 UTC)" executed successfully 2026-08-06 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 20:00:00 UTC)" (scheduled at 2026-08-06 19:00:00+00:00) 2026-08-06 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-06 19:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 19:00:01,243 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 19:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 19:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 19:00:01,249 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 19:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 19:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 20:00:00 UTC)" executed successfully 2026-08-06 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 21:00:00 UTC)" (scheduled at 2026-08-06 20:00:00+00:00) 2026-08-06 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 20:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 20:00:01,210 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 20:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 20:00:01,215 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 20:00:01,215 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 20:00:01,231 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 20:00:01,236 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 21:00:00 UTC)" executed successfully 2026-08-06 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 22:00:00 UTC)" (scheduled at 2026-08-06 21:00:00+00:00) 2026-08-06 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-06 21:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 21:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 21:00:01,119 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 21:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 21:00:01,123 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 21:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 21:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 22:00:00 UTC)" executed successfully 2026-08-06 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 23:00:00 UTC)" (scheduled at 2026-08-06 22:00:00+00:00) 2026-08-06 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-06 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 22:00:01,241 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 22:00:01,242 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 22:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 22:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 22:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 22:00:01,272 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-06 23:00:00 UTC)" executed successfully 2026-08-06 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 00:00:00 UTC)" (scheduled at 2026-08-06 23:00:00+00:00) 2026-08-06 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-06 23:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-06 23:00:01,243 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-06 23:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-06 23:00:01,247 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-06 23:00:01,247 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-06 23:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-06 23:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 00:00:00 UTC)" executed successfully 2026-08-07 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 01:00:00 UTC)" (scheduled at 2026-08-07 00:00:00+00:00) 2026-08-07 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-07 00:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 00:00:01,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 00:00:01,277 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 00:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 00:00:01,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 00:00:01,296 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 00:00:01,304 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 01:00:00 UTC)" executed successfully 2026-08-07 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 02:00:00 UTC)" (scheduled at 2026-08-07 01:00:00+00:00) 2026-08-07 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-07 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 01:00:01,487 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 01:00:01,489 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 01:00:01,492 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 01:00:01,492 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 01:00:01,515 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 01:00:01,527 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 02:00:00 UTC)" executed successfully 2026-08-07 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 03:00:00 UTC)" (scheduled at 2026-08-07 02:00:00+00:00) 2026-08-07 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-07 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 02:00:01,332 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 02:00:01,333 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 02:00:01,335 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 02:00:01,335 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 02:00:01,355 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 02:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 03:00:00 UTC)" executed successfully 2026-08-07 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 04:00:00 UTC)" (scheduled at 2026-08-07 03:00:00+00:00) 2026-08-07 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-07 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 03:00:02,022 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 03:00:02,023 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 03:00:02,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 03:00:02,027 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 03:00:02,044 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 03:00:02,053 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 04:00:00 UTC)" executed successfully 2026-08-07 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 05:00:00 UTC)" (scheduled at 2026-08-07 04:00:00+00:00) 2026-08-07 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-07 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 04:00:01,287 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 04:00:01,288 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 04:00:01,290 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 04:00:01,290 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 04:00:01,309 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 04:00:01,315 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 05:00:00 UTC)" executed successfully 2026-08-07 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 06:00:00 UTC)" (scheduled at 2026-08-07 05:00:00+00:00) 2026-08-07 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-07 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 05:00:01,495 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 05:00:01,497 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 05:00:01,501 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 05:00:01,501 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 05:00:01,524 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 05:00:01,533 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 06:00:00 UTC)" executed successfully 2026-08-07 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 07:00:00 UTC)" (scheduled at 2026-08-07 06:00:00+00:00) 2026-08-07 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-07 06:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 06:00:02,837 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 06:00:02,839 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 06:00:02,842 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 06:00:02,843 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 06:00:02,862 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 06:00:02,872 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 07:00:00 UTC)" executed successfully 2026-08-07 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 08:00:00 UTC)" (scheduled at 2026-08-07 07:00:00+00:00) 2026-08-07 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-07 07:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 07:00:01,290 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 07:00:01,291 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 07:00:01,294 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 07:00:01,294 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 07:00:01,321 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 07:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 08:00:00 UTC)" executed successfully 2026-08-07 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 09:00:00 UTC)" (scheduled at 2026-08-07 08:00:00+00:00) 2026-08-07 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-07 08:00:00,105 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 08:00:01,726 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 08:00:01,728 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 08:00:01,731 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 08:00:01,732 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 08:00:01,754 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 08:00:01,764 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 09:00:00 UTC)" executed successfully 2026-08-07 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 10:00:00 UTC)" (scheduled at 2026-08-07 09:00:00+00:00) 2026-08-07 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-07 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 09:00:02,770 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 09:00:02,773 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 09:00:02,777 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 09:00:02,777 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 09:00:02,805 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 09:00:02,817 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 10:00:00 UTC)" executed successfully 2026-08-07 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 11:00:00 UTC)" (scheduled at 2026-08-07 10:00:00+00:00) 2026-08-07 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-07 10:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 10:00:03,429 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 10:00:03,431 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 10:00:03,435 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 10:00:03,436 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 10:00:03,452 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 10:00:03,459 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 11:00:00 UTC)" executed successfully 2026-08-07 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 12:00:00 UTC)" (scheduled at 2026-08-07 11:00:00+00:00) 2026-08-07 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-07 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 11:00:02,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 11:00:02,129 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 11:00:02,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 11:00:02,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 11:00:02,156 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 11:00:02,164 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 12:00:00 UTC)" executed successfully 2026-08-07 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 13:00:00 UTC)" (scheduled at 2026-08-07 12:00:00+00:00) 2026-08-07 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-07 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 12:00:02,601 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 12:00:02,602 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 12:00:02,605 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 12:00:02,605 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 12:00:02,628 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 12:00:02,636 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 13:00:00 UTC)" executed successfully 2026-08-07 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 14:00:00 UTC)" (scheduled at 2026-08-07 13:00:00+00:00) 2026-08-07 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-07 13:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 13:00:01,607 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 13:00:01,609 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 13:00:01,613 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 13:00:01,613 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 13:00:01,636 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 13:00:01,645 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 14:00:00 UTC)" executed successfully 2026-08-07 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 15:00:00 UTC)" (scheduled at 2026-08-07 14:00:00+00:00) 2026-08-07 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-07 14:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 14:00:02,028 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 14:00:02,028 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 14:00:02,033 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 14:00:02,033 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 14:00:02,055 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 14:00:02,067 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 15:00:00 UTC)" executed successfully 2026-08-07 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 16:00:00 UTC)" (scheduled at 2026-08-07 15:00:00+00:00) 2026-08-07 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-07 15:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 15:00:02,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 15:00:02,119 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 15:00:02,123 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 15:00:02,124 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 15:00:02,147 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 15:00:02,158 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 16:00:00 UTC)" executed successfully 2026-08-07 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 17:00:00 UTC)" (scheduled at 2026-08-07 16:00:00+00:00) 2026-08-07 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-07 16:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 16:00:01,845 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 16:00:01,847 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 16:00:01,851 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 16:00:01,852 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 16:00:01,879 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 16:00:01,889 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 17:00:00 UTC)" executed successfully 2026-08-07 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 18:00:00 UTC)" (scheduled at 2026-08-07 17:00:00+00:00) 2026-08-07 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-07 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 17:00:02,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 17:00:02,356 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 17:00:02,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 17:00:02,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 17:00:02,384 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 17:00:02,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 18:00:00 UTC)" executed successfully 2026-08-07 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 19:00:00 UTC)" (scheduled at 2026-08-07 18:00:00+00:00) 2026-08-07 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-07 18:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 18:00:01,723 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 18:00:01,724 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 18:00:01,726 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 18:00:01,727 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 18:00:01,751 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 18:00:01,762 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 19:00:00 UTC)" executed successfully 2026-08-07 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 20:00:00 UTC)" (scheduled at 2026-08-07 19:00:00+00:00) 2026-08-07 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-07 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 19:00:01,425 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 19:00:01,427 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 19:00:01,430 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 19:00:01,430 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 19:00:01,454 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 19:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 20:00:00 UTC)" executed successfully 2026-08-07 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 21:00:00 UTC)" (scheduled at 2026-08-07 20:00:00+00:00) 2026-08-07 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-07 20:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 20:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 20:00:01,210 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 20:00:01,214 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 20:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 20:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 20:00:01,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 21:00:00 UTC)" executed successfully 2026-08-07 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 22:00:00 UTC)" (scheduled at 2026-08-07 21:00:00+00:00) 2026-08-07 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-07 21:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 21:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 21:00:01,258 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 21:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 21:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 21:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 21:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 22:00:00 UTC)" executed successfully 2026-08-07 22:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 23:00:00 UTC)" (scheduled at 2026-08-07 22:00:00+00:00) 2026-08-07 22:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-07 22:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 22:00:01,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 22:00:01,236 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 22:00:01,239 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 22:00:01,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 22:00:01,254 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 22:00:01,260 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-07 23:00:00 UTC)" executed successfully 2026-08-07 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 00:00:00 UTC)" (scheduled at 2026-08-07 23:00:00+00:00) 2026-08-07 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-07 23:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-07 23:00:01,468 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-07 23:00:01,470 INFO [fb-sync.worker] Scraped 50 posts 2026-08-07 23:00:01,473 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-07 23:00:01,473 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-07 23:00:01,496 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-07 23:00:01,505 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 00:00:00 UTC)" executed successfully 2026-08-08 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 01:00:00 UTC)" (scheduled at 2026-08-08 00:00:00+00:00) 2026-08-08 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-08 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 00:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 00:00:01,229 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 00:00:01,232 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 00:00:01,232 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 00:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 00:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 01:00:00 UTC)" executed successfully 2026-08-08 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 02:00:00 UTC)" (scheduled at 2026-08-08 01:00:00+00:00) 2026-08-08 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-08 01:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 01:00:01,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 01:00:01,443 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 01:00:01,446 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 01:00:01,447 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 01:00:01,469 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 01:00:01,478 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 02:00:00 UTC)" executed successfully 2026-08-08 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 03:00:00 UTC)" (scheduled at 2026-08-08 02:00:00+00:00) 2026-08-08 02:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-08 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 02:00:01,334 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 02:00:01,336 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 02:00:01,339 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 02:00:01,339 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 02:00:01,355 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 02:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 03:00:00 UTC)" executed successfully 2026-08-08 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 04:00:00 UTC)" (scheduled at 2026-08-08 03:00:00+00:00) 2026-08-08 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-08 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 03:00:02,019 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 03:00:02,020 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 03:00:02,023 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 03:00:02,023 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 03:00:02,050 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 03:00:02,058 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 04:00:00 UTC)" executed successfully 2026-08-08 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 05:00:00 UTC)" (scheduled at 2026-08-08 04:00:00+00:00) 2026-08-08 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-08 04:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 04:00:01,220 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 04:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 04:00:01,225 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 04:00:01,225 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 04:00:01,246 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 04:00:01,254 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 05:00:00 UTC)" executed successfully 2026-08-08 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 06:00:00 UTC)" (scheduled at 2026-08-08 05:00:00+00:00) 2026-08-08 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-08 05:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 05:00:01,656 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 05:00:01,657 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 05:00:01,661 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 05:00:01,661 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 05:00:01,680 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 05:00:01,690 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 06:00:00 UTC)" executed successfully 2026-08-08 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 07:00:00 UTC)" (scheduled at 2026-08-08 06:00:00+00:00) 2026-08-08 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-08 06:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 06:00:01,776 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 06:00:01,777 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 06:00:01,780 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 06:00:01,781 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 06:00:01,804 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 06:00:01,811 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 07:00:00 UTC)" executed successfully 2026-08-08 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 08:00:00 UTC)" (scheduled at 2026-08-08 07:00:00+00:00) 2026-08-08 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-08 07:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 07:00:01,967 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 07:00:01,969 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 07:00:01,971 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 07:00:01,972 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 07:00:01,996 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 07:00:02,004 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 08:00:00 UTC)" executed successfully 2026-08-08 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 09:00:00 UTC)" (scheduled at 2026-08-08 08:00:00+00:00) 2026-08-08 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-08 08:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 08:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 08:00:01,244 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 08:00:01,247 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 08:00:01,247 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 08:00:01,267 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 08:00:01,275 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 09:00:00 UTC)" executed successfully 2026-08-08 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 10:00:00 UTC)" (scheduled at 2026-08-08 09:00:00+00:00) 2026-08-08 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-08 09:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 09:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 09:00:01,310 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 09:00:01,312 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 09:00:01,312 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 09:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 09:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 10:00:00 UTC)" executed successfully 2026-08-08 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 11:00:00 UTC)" (scheduled at 2026-08-08 10:00:00+00:00) 2026-08-08 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-08 10:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 10:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 10:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 10:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 10:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 10:00:01,254 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 10:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 11:00:00 UTC)" executed successfully 2026-08-08 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 12:00:00 UTC)" (scheduled at 2026-08-08 11:00:00+00:00) 2026-08-08 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-08 11:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 11:00:01,494 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 11:00:01,496 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 11:00:01,499 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 11:00:01,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 11:00:01,520 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 11:00:01,531 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 12:00:00 UTC)" executed successfully 2026-08-08 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 13:00:00 UTC)" (scheduled at 2026-08-08 12:00:00+00:00) 2026-08-08 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-08 12:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 12:00:01,807 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 12:00:01,809 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 12:00:01,812 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 12:00:01,812 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 12:00:01,834 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 12:00:01,847 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 13:00:00 UTC)" executed successfully 2026-08-08 13:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 14:00:00 UTC)" (scheduled at 2026-08-08 13:00:00+00:00) 2026-08-08 13:00:00,016 INFO [fb-sync] Starting FB sync... 2026-08-08 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 13:00:01,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 13:00:01,277 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 13:00:01,281 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 13:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 13:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 13:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 14:00:00 UTC)" executed successfully 2026-08-08 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 15:00:00 UTC)" (scheduled at 2026-08-08 14:00:00+00:00) 2026-08-08 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-08 14:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 14:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 14:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 14:00:01,186 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 14:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 14:00:01,210 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 14:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 15:00:00 UTC)" executed successfully 2026-08-08 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 16:00:00 UTC)" (scheduled at 2026-08-08 15:00:00+00:00) 2026-08-08 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-08 15:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 15:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 15:00:01,256 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 15:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 15:00:01,261 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 15:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 15:00:01,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 16:00:00 UTC)" executed successfully 2026-08-08 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 17:00:00 UTC)" (scheduled at 2026-08-08 16:00:00+00:00) 2026-08-08 16:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-08 16:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 16:00:01,244 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 16:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 16:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 16:00:01,249 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 16:00:01,270 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 16:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 17:00:00 UTC)" executed successfully 2026-08-08 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 18:00:00 UTC)" (scheduled at 2026-08-08 17:00:00+00:00) 2026-08-08 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-08 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 17:00:02,463 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 17:00:02,464 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 17:00:02,467 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 17:00:02,467 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 17:00:02,485 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 17:00:02,491 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 18:00:00 UTC)" executed successfully 2026-08-08 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 19:00:00 UTC)" (scheduled at 2026-08-08 18:00:00+00:00) 2026-08-08 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-08 18:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 18:00:01,402 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 18:00:01,404 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 18:00:01,408 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 18:00:01,408 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 18:00:01,428 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 18:00:01,438 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 19:00:00 UTC)" executed successfully 2026-08-08 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 20:00:00 UTC)" (scheduled at 2026-08-08 19:00:00+00:00) 2026-08-08 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-08 19:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 19:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 19:00:01,311 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 19:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 19:00:01,314 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 19:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 19:00:01,345 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 20:00:00 UTC)" executed successfully 2026-08-08 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 21:00:00 UTC)" (scheduled at 2026-08-08 20:00:00+00:00) 2026-08-08 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-08 20:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 20:00:01,571 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 20:00:01,574 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 20:00:01,577 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 20:00:01,578 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 20:00:01,603 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 20:00:01,614 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 21:00:00 UTC)" executed successfully 2026-08-08 21:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 22:00:00 UTC)" (scheduled at 2026-08-08 21:00:00+00:00) 2026-08-08 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-08 21:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 21:00:01,279 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 21:00:01,281 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 21:00:01,283 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 21:00:01,283 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 21:00:01,299 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 21:00:01,306 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 22:00:00 UTC)" executed successfully 2026-08-08 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 23:00:00 UTC)" (scheduled at 2026-08-08 22:00:00+00:00) 2026-08-08 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-08 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 22:00:01,501 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 22:00:01,505 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 22:00:01,508 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 22:00:01,509 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 22:00:01,539 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 22:00:01,551 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-08 23:00:00 UTC)" executed successfully 2026-08-08 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 00:00:00 UTC)" (scheduled at 2026-08-08 23:00:00+00:00) 2026-08-08 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-08 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-08 23:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-08 23:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-08-08 23:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-08 23:00:01,177 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-08 23:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-08 23:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 00:00:00 UTC)" executed successfully 2026-08-09 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 01:00:00 UTC)" (scheduled at 2026-08-09 00:00:00+00:00) 2026-08-09 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-09 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 00:00:01,339 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 00:00:01,342 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 00:00:01,345 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 00:00:01,345 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 00:00:01,369 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 00:00:01,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 01:00:00 UTC)" executed successfully 2026-08-09 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 02:00:00 UTC)" (scheduled at 2026-08-09 01:00:00+00:00) 2026-08-09 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-09 01:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 01:00:01,777 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 01:00:01,779 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 01:00:01,782 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 01:00:01,782 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 01:00:01,803 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 01:00:01,813 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 02:00:00 UTC)" executed successfully 2026-08-09 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 03:00:00 UTC)" (scheduled at 2026-08-09 02:00:00+00:00) 2026-08-09 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-09 02:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 02:00:01,575 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 02:00:01,578 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 02:00:01,581 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 02:00:01,582 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 02:00:01,615 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 02:00:01,629 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 03:00:00 UTC)" executed successfully 2026-08-09 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 04:00:00 UTC)" (scheduled at 2026-08-09 03:00:00+00:00) 2026-08-09 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-09 03:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 03:00:01,096 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 03:00:01,098 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 03:00:01,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 03:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 03:00:01,124 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 03:00:01,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 04:00:00 UTC)" executed successfully 2026-08-09 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 05:00:00 UTC)" (scheduled at 2026-08-09 04:00:00+00:00) 2026-08-09 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-09 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 04:00:02,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 04:00:02,267 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 04:00:02,270 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 04:00:02,270 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 04:00:02,292 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 04:00:02,301 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 05:00:00 UTC)" executed successfully 2026-08-09 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 06:00:00 UTC)" (scheduled at 2026-08-09 05:00:00+00:00) 2026-08-09 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-09 05:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 05:00:01,262 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 05:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 05:00:01,267 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 05:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 05:00:01,298 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 05:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 06:00:00 UTC)" executed successfully 2026-08-09 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 07:00:00 UTC)" (scheduled at 2026-08-09 06:00:00+00:00) 2026-08-09 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 06:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 06:00:02,280 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 06:00:02,282 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 06:00:02,286 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 06:00:02,286 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 06:00:02,311 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 06:00:02,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 07:00:00 UTC)" executed successfully 2026-08-09 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 08:00:00 UTC)" (scheduled at 2026-08-09 07:00:00+00:00) 2026-08-09 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-09 07:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 07:00:00,968 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 07:00:00,970 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 07:00:00,973 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 07:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 07:00:00,995 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 07:00:01,005 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 08:00:00 UTC)" executed successfully 2026-08-09 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 09:00:00 UTC)" (scheduled at 2026-08-09 08:00:00+00:00) 2026-08-09 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-09 08:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 08:00:01,973 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 08:00:01,976 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 08:00:01,979 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 08:00:01,979 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 08:00:02,005 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 08:00:02,015 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 09:00:00 UTC)" executed successfully 2026-08-09 09:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 10:00:00 UTC)" (scheduled at 2026-08-09 09:00:00+00:00) 2026-08-09 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-09 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 09:00:01,057 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 09:00:01,058 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 09:00:01,060 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 09:00:01,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 09:00:01,078 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 09:00:01,086 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 10:00:00 UTC)" executed successfully 2026-08-09 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 11:00:00 UTC)" (scheduled at 2026-08-09 10:00:00+00:00) 2026-08-09 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-09 10:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 10:00:01,346 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 10:00:01,348 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 10:00:01,351 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 10:00:01,352 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 10:00:01,377 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 10:00:01,389 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 11:00:00 UTC)" executed successfully 2026-08-09 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 12:00:00 UTC)" (scheduled at 2026-08-09 11:00:00+00:00) 2026-08-09 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 11:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 11:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 11:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 11:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 11:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 11:00:01,134 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 11:00:01,142 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 12:00:00 UTC)" executed successfully 2026-08-09 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 13:00:00 UTC)" (scheduled at 2026-08-09 12:00:00+00:00) 2026-08-09 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-09 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 12:00:01,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 12:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 12:00:01,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 12:00:01,142 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 12:00:01,167 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 12:00:01,180 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 13:00:00 UTC)" executed successfully 2026-08-09 13:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 14:00:00 UTC)" (scheduled at 2026-08-09 13:00:00+00:00) 2026-08-09 13:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-09 13:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 13:00:01,585 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 13:00:01,586 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 13:00:01,590 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 13:00:01,591 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 13:00:01,624 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 13:00:01,637 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 14:00:00 UTC)" executed successfully 2026-08-09 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 15:00:00 UTC)" (scheduled at 2026-08-09 14:00:00+00:00) 2026-08-09 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 14:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 14:00:01,190 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 14:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 14:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 14:00:01,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 14:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 14:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 15:00:00 UTC)" executed successfully 2026-08-09 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 16:00:00 UTC)" (scheduled at 2026-08-09 15:00:00+00:00) 2026-08-09 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 15:00:01,146 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 15:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 15:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 15:00:01,150 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 15:00:01,166 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 15:00:01,174 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 16:00:00 UTC)" executed successfully 2026-08-09 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 17:00:00 UTC)" (scheduled at 2026-08-09 16:00:00+00:00) 2026-08-09 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-09 16:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 16:00:01,060 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 16:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 16:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 16:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 16:00:01,086 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 16:00:01,097 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 17:00:00 UTC)" executed successfully 2026-08-09 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 18:00:00 UTC)" (scheduled at 2026-08-09 17:00:00+00:00) 2026-08-09 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 17:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 17:00:01,420 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 17:00:01,423 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 17:00:01,427 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 17:00:01,428 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 17:00:01,453 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 17:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 18:00:00 UTC)" executed successfully 2026-08-09 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 19:00:00 UTC)" (scheduled at 2026-08-09 18:00:00+00:00) 2026-08-09 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-09 18:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 18:00:03,525 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 18:00:03,527 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 18:00:03,529 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 18:00:03,530 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 18:00:03,555 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 18:00:03,568 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 19:00:00 UTC)" executed successfully 2026-08-09 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 20:00:00 UTC)" (scheduled at 2026-08-09 19:00:00+00:00) 2026-08-09 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-09 19:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 19:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 19:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 19:00:01,186 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 19:00:01,186 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 19:00:01,213 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 19:00:01,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 20:00:00 UTC)" executed successfully 2026-08-09 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 21:00:00 UTC)" (scheduled at 2026-08-09 20:00:00+00:00) 2026-08-09 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-09 20:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 20:00:00,985 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 20:00:00,986 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 20:00:00,989 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 20:00:00,989 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 20:00:01,013 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 20:00:01,026 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 21:00:00 UTC)" executed successfully 2026-08-09 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 22:00:00 UTC)" (scheduled at 2026-08-09 21:00:00+00:00) 2026-08-09 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-09 21:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 21:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 21:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 21:00:01,174 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 21:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 21:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 21:00:01,208 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 22:00:00 UTC)" executed successfully 2026-08-09 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 23:00:00 UTC)" (scheduled at 2026-08-09 22:00:00+00:00) 2026-08-09 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-09 22:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 22:00:02,334 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 22:00:02,337 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 22:00:02,340 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 22:00:02,341 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 22:00:02,368 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 22:00:02,381 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-09 23:00:00 UTC)" executed successfully 2026-08-09 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 00:00:00 UTC)" (scheduled at 2026-08-09 23:00:00+00:00) 2026-08-09 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-09 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-09 23:00:02,187 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-09 23:00:02,188 INFO [fb-sync.worker] Scraped 50 posts 2026-08-09 23:00:02,192 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-09 23:00:02,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-09 23:00:02,219 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-09 23:00:02,228 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 00:00:00 UTC)" executed successfully 2026-08-10 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 01:00:00 UTC)" (scheduled at 2026-08-10 00:00:00+00:00) 2026-08-10 00:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-10 00:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 00:00:01,501 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 00:00:01,503 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 00:00:01,507 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 00:00:01,507 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 00:00:01,537 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 00:00:01,550 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 01:00:00 UTC)" executed successfully 2026-08-10 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 02:00:00 UTC)" (scheduled at 2026-08-10 01:00:00+00:00) 2026-08-10 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-10 01:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 01:00:01,748 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 01:00:01,750 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 01:00:01,755 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 01:00:01,756 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 01:00:01,782 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 01:00:01,797 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 02:00:00 UTC)" executed successfully 2026-08-10 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 03:00:00 UTC)" (scheduled at 2026-08-10 02:00:00+00:00) 2026-08-10 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-10 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 02:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 02:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 02:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 02:00:01,177 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 02:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 02:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 03:00:00 UTC)" executed successfully 2026-08-10 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 04:00:00 UTC)" (scheduled at 2026-08-10 03:00:00+00:00) 2026-08-10 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-10 03:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 03:00:01,187 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 03:00:01,189 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 03:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 03:00:01,194 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 03:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 03:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 04:00:00 UTC)" executed successfully 2026-08-10 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 05:00:00 UTC)" (scheduled at 2026-08-10 04:00:00+00:00) 2026-08-10 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-10 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 04:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 04:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 04:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 04:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 04:00:01,214 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 04:00:01,224 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 05:00:00 UTC)" executed successfully 2026-08-10 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 06:00:00 UTC)" (scheduled at 2026-08-10 05:00:00+00:00) 2026-08-10 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 05:00:01,887 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 05:00:01,889 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 05:00:01,892 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 05:00:01,892 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 05:00:01,918 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 05:00:01,931 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 06:00:00 UTC)" executed successfully 2026-08-10 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 07:00:00 UTC)" (scheduled at 2026-08-10 06:00:00+00:00) 2026-08-10 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-10 06:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 06:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 06:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 06:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 06:00:01,132 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 06:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 06:00:01,158 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 07:00:00 UTC)" executed successfully 2026-08-10 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 08:00:00 UTC)" (scheduled at 2026-08-10 07:00:00+00:00) 2026-08-10 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-10 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 07:00:01,857 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 07:00:01,859 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 07:00:01,861 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 07:00:01,862 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 07:00:01,885 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 07:00:01,895 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 08:00:00 UTC)" executed successfully 2026-08-10 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 09:00:00 UTC)" (scheduled at 2026-08-10 08:00:00+00:00) 2026-08-10 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-10 08:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 08:00:01,630 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 08:00:01,633 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 08:00:01,637 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 08:00:01,638 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 08:00:01,667 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 08:00:01,681 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 09:00:00 UTC)" executed successfully 2026-08-10 09:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 10:00:00 UTC)" (scheduled at 2026-08-10 09:00:00+00:00) 2026-08-10 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-10 09:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 09:00:02,575 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 09:00:02,577 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 09:00:02,579 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 09:00:02,579 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 09:00:02,600 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 09:00:02,607 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 10:00:00 UTC)" executed successfully 2026-08-10 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 11:00:00 UTC)" (scheduled at 2026-08-10 10:00:00+00:00) 2026-08-10 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-10 10:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 10:00:01,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 10:00:01,053 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 10:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 10:00:01,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 10:00:01,076 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 10:00:01,083 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 11:00:00 UTC)" executed successfully 2026-08-10 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 12:00:00 UTC)" (scheduled at 2026-08-10 11:00:00+00:00) 2026-08-10 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 11:00:01,307 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 11:00:01,308 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 11:00:01,311 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 11:00:01,311 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 11:00:01,331 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 11:00:01,339 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 12:00:00 UTC)" executed successfully 2026-08-10 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 13:00:00 UTC)" (scheduled at 2026-08-10 12:00:00+00:00) 2026-08-10 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-10 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 12:00:01,085 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 12:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 12:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 12:00:01,088 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 12:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 12:00:01,124 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 13:00:00 UTC)" executed successfully 2026-08-10 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 14:00:00 UTC)" (scheduled at 2026-08-10 13:00:00+00:00) 2026-08-10 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-10 13:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 13:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 13:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 13:00:01,231 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 13:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 13:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 13:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 14:00:00 UTC)" executed successfully 2026-08-10 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 15:00:00 UTC)" (scheduled at 2026-08-10 14:00:00+00:00) 2026-08-10 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 14:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 14:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 14:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 14:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 14:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 14:00:01,237 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 14:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 15:00:00 UTC)" executed successfully 2026-08-10 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 16:00:00 UTC)" (scheduled at 2026-08-10 15:00:00+00:00) 2026-08-10 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 15:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 15:00:01,516 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 15:00:01,519 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 15:00:01,522 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 15:00:01,522 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 15:00:01,548 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 15:00:01,558 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 16:00:00 UTC)" executed successfully 2026-08-10 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 17:00:00 UTC)" (scheduled at 2026-08-10 16:00:00+00:00) 2026-08-10 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-10 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 16:00:01,164 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 16:00:01,166 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 16:00:01,169 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 16:00:01,169 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 16:00:01,193 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 16:00:01,205 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 17:00:00 UTC)" executed successfully 2026-08-10 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 18:00:00 UTC)" (scheduled at 2026-08-10 17:00:00+00:00) 2026-08-10 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 17:00:01,681 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 17:00:01,683 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 17:00:01,685 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 17:00:01,685 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 17:00:01,704 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 17:00:01,713 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 18:00:00 UTC)" executed successfully 2026-08-10 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 19:00:00 UTC)" (scheduled at 2026-08-10 18:00:00+00:00) 2026-08-10 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-10 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 18:00:01,241 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 18:00:01,243 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 18:00:01,246 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 18:00:01,247 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 18:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 18:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 19:00:00 UTC)" executed successfully 2026-08-10 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 20:00:00 UTC)" (scheduled at 2026-08-10 19:00:00+00:00) 2026-08-10 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 19:00:01,227 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 19:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 19:00:01,231 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 19:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 19:00:01,255 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 19:00:01,267 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 20:00:00 UTC)" executed successfully 2026-08-10 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 21:00:00 UTC)" (scheduled at 2026-08-10 20:00:00+00:00) 2026-08-10 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-10 20:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 20:00:01,110 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 20:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 20:00:01,116 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 20:00:01,116 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 20:00:01,143 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 20:00:01,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 21:00:00 UTC)" executed successfully 2026-08-10 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 22:00:00 UTC)" (scheduled at 2026-08-10 21:00:00+00:00) 2026-08-10 21:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-10 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 21:00:01,585 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 21:00:01,587 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 21:00:01,591 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 21:00:01,592 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 21:00:01,618 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 21:00:01,629 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 22:00:00 UTC)" executed successfully 2026-08-10 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 23:00:00 UTC)" (scheduled at 2026-08-10 22:00:00+00:00) 2026-08-10 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-10 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 22:00:02,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 22:00:02,040 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 22:00:02,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 22:00:02,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 22:00:02,079 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 22:00:02,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-10 23:00:00 UTC)" executed successfully 2026-08-10 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 00:00:00 UTC)" (scheduled at 2026-08-10 23:00:00+00:00) 2026-08-10 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-10 23:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-10 23:00:02,135 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-10 23:00:02,137 INFO [fb-sync.worker] Scraped 50 posts 2026-08-10 23:00:02,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-10 23:00:02,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-10 23:00:02,164 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-10 23:00:02,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 00:00:00 UTC)" executed successfully 2026-08-11 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 01:00:00 UTC)" (scheduled at 2026-08-11 00:00:00+00:00) 2026-08-11 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-11 00:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 00:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 00:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 00:00:01,224 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 00:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 00:00:01,250 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 00:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 01:00:00 UTC)" executed successfully 2026-08-11 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 02:00:00 UTC)" (scheduled at 2026-08-11 01:00:00+00:00) 2026-08-11 01:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-11 01:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 01:00:01,293 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 01:00:01,295 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 01:00:01,298 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 01:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 01:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 01:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 02:00:00 UTC)" executed successfully 2026-08-11 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 03:00:00 UTC)" (scheduled at 2026-08-11 02:00:00+00:00) 2026-08-11 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-11 02:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 02:00:01,080 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 02:00:01,082 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 02:00:01,085 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 02:00:01,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 02:00:01,105 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 02:00:01,117 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 03:00:00 UTC)" executed successfully 2026-08-11 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 04:00:00 UTC)" (scheduled at 2026-08-11 03:00:00+00:00) 2026-08-11 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-11 03:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 03:00:01,598 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 03:00:01,600 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 03:00:01,605 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 03:00:01,605 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 03:00:01,643 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 03:00:01,657 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 04:00:00 UTC)" executed successfully 2026-08-11 04:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 05:00:00 UTC)" (scheduled at 2026-08-11 04:00:00+00:00) 2026-08-11 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-11 04:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 04:00:01,683 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 04:00:01,684 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 04:00:01,688 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 04:00:01,688 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 04:00:01,716 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 04:00:01,729 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 05:00:00 UTC)" executed successfully 2026-08-11 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 06:00:00 UTC)" (scheduled at 2026-08-11 05:00:00+00:00) 2026-08-11 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-11 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 05:00:01,926 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 05:00:01,928 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 05:00:01,931 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 05:00:01,931 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 05:00:01,960 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 05:00:01,971 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 06:00:00 UTC)" executed successfully 2026-08-11 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 07:00:00 UTC)" (scheduled at 2026-08-11 06:00:00+00:00) 2026-08-11 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 06:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 06:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 06:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 06:00:01,159 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 06:00:01,159 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 06:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 06:00:01,187 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 07:00:00 UTC)" executed successfully 2026-08-11 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 08:00:00 UTC)" (scheduled at 2026-08-11 07:00:00+00:00) 2026-08-11 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-11 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 07:00:01,060 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 07:00:01,062 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 07:00:01,065 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 07:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 07:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 07:00:01,109 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 08:00:00 UTC)" executed successfully 2026-08-11 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 09:00:00 UTC)" (scheduled at 2026-08-11 08:00:00+00:00) 2026-08-11 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-11 08:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 08:00:02,535 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 08:00:02,536 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 08:00:02,539 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 08:00:02,539 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 08:00:02,563 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 08:00:02,577 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 09:00:00 UTC)" executed successfully 2026-08-11 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 10:00:00 UTC)" (scheduled at 2026-08-11 09:00:00+00:00) 2026-08-11 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 09:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 09:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 09:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 09:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 09:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 09:00:01,232 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 09:00:01,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 10:00:00 UTC)" executed successfully 2026-08-11 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 11:00:00 UTC)" (scheduled at 2026-08-11 10:00:00+00:00) 2026-08-11 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-11 10:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 10:00:01,055 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 10:00:01,057 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 10:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 10:00:01,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 10:00:01,080 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 10:00:01,087 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 11:00:00 UTC)" executed successfully 2026-08-11 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 12:00:00 UTC)" (scheduled at 2026-08-11 11:00:00+00:00) 2026-08-11 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 11:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 11:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 11:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 11:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 11:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 11:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 11:00:01,435 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 12:00:00 UTC)" executed successfully 2026-08-11 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 13:00:00 UTC)" (scheduled at 2026-08-11 12:00:00+00:00) 2026-08-11 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 12:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 12:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 12:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 12:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 12:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 12:00:01,149 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 12:00:01,163 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 13:00:00 UTC)" executed successfully 2026-08-11 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 14:00:00 UTC)" (scheduled at 2026-08-11 13:00:00+00:00) 2026-08-11 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-11 13:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 13:00:01,236 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 13:00:01,237 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 13:00:01,239 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 13:00:01,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 13:00:01,262 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 13:00:01,274 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 14:00:00 UTC)" executed successfully 2026-08-11 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 15:00:00 UTC)" (scheduled at 2026-08-11 14:00:00+00:00) 2026-08-11 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-11 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 14:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 14:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 14:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 14:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 14:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 14:00:01,159 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 15:00:00 UTC)" executed successfully 2026-08-11 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 16:00:00 UTC)" (scheduled at 2026-08-11 15:00:00+00:00) 2026-08-11 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-11 15:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 15:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 15:00:01,207 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 15:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 15:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 15:00:01,232 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 15:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 16:00:00 UTC)" executed successfully 2026-08-11 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 17:00:00 UTC)" (scheduled at 2026-08-11 16:00:00+00:00) 2026-08-11 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-11 16:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 16:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 16:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 16:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 16:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 16:00:01,223 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 16:00:01,230 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 17:00:00 UTC)" executed successfully 2026-08-11 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 18:00:00 UTC)" (scheduled at 2026-08-11 17:00:00+00:00) 2026-08-11 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-11 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 17:00:01,401 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 17:00:01,402 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 17:00:01,404 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 17:00:01,404 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 17:00:01,426 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 17:00:01,434 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 18:00:00 UTC)" executed successfully 2026-08-11 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 19:00:00 UTC)" (scheduled at 2026-08-11 18:00:00+00:00) 2026-08-11 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-11 18:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 18:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 18:00:01,176 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 18:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 18:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 18:00:01,220 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 18:00:01,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 19:00:00 UTC)" executed successfully 2026-08-11 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 20:00:00 UTC)" (scheduled at 2026-08-11 19:00:00+00:00) 2026-08-11 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-11 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 19:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 19:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 19:00:01,100 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 19:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 19:00:01,124 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 19:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 20:00:00 UTC)" executed successfully 2026-08-11 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 21:00:00 UTC)" (scheduled at 2026-08-11 20:00:00+00:00) 2026-08-11 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 20:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 20:00:01,026 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 20:00:01,028 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 20:00:01,031 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 20:00:01,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 20:00:01,066 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 20:00:01,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 21:00:00 UTC)" executed successfully 2026-08-11 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 22:00:00 UTC)" (scheduled at 2026-08-11 21:00:00+00:00) 2026-08-11 21:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-11 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 21:00:01,316 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 21:00:01,318 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 21:00:01,321 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 21:00:01,322 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 21:00:01,356 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 21:00:01,370 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 22:00:00 UTC)" executed successfully 2026-08-11 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 23:00:00 UTC)" (scheduled at 2026-08-11 22:00:00+00:00) 2026-08-11 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-11 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 22:00:02,603 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 22:00:02,605 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 22:00:02,608 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 22:00:02,609 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 22:00:02,636 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 22:00:02,655 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-11 23:00:00 UTC)" executed successfully 2026-08-11 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 00:00:00 UTC)" (scheduled at 2026-08-11 23:00:00+00:00) 2026-08-11 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-11 23:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-11 23:00:01,282 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-11 23:00:01,283 INFO [fb-sync.worker] Scraped 50 posts 2026-08-11 23:00:01,286 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-11 23:00:01,286 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-11 23:00:01,318 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-11 23:00:01,332 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 00:00:00 UTC)" executed successfully 2026-08-12 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 01:00:00 UTC)" (scheduled at 2026-08-12 00:00:00+00:00) 2026-08-12 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-12 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 00:00:01,108 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 00:00:01,110 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 00:00:01,112 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 00:00:01,112 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 00:00:01,133 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 00:00:01,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 01:00:00 UTC)" executed successfully 2026-08-12 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 02:00:00 UTC)" (scheduled at 2026-08-12 01:00:00+00:00) 2026-08-12 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-12 01:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 01:00:01,238 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 01:00:01,240 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 01:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 01:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 01:00:01,271 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 01:00:01,286 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 02:00:00 UTC)" executed successfully 2026-08-12 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 03:00:00 UTC)" (scheduled at 2026-08-12 02:00:00+00:00) 2026-08-12 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-12 02:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 02:00:01,366 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 02:00:01,368 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 02:00:01,372 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 02:00:01,372 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 02:00:01,403 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 02:00:01,417 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 03:00:00 UTC)" executed successfully 2026-08-12 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 04:00:00 UTC)" (scheduled at 2026-08-12 03:00:00+00:00) 2026-08-12 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-12 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 03:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 03:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 03:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 03:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 03:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 03:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 04:00:00 UTC)" executed successfully 2026-08-12 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 05:00:00 UTC)" (scheduled at 2026-08-12 04:00:00+00:00) 2026-08-12 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-12 04:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 04:00:02,338 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 04:00:02,340 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 04:00:02,343 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 04:00:02,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 04:00:02,377 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 04:00:02,393 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 05:00:00 UTC)" executed successfully 2026-08-12 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 06:00:00 UTC)" (scheduled at 2026-08-12 05:00:00+00:00) 2026-08-12 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-12 05:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 05:00:01,688 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 05:00:01,690 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 05:00:01,692 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 05:00:01,692 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 05:00:01,715 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 05:00:01,726 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 06:00:00 UTC)" executed successfully 2026-08-12 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 07:00:00 UTC)" (scheduled at 2026-08-12 06:00:00+00:00) 2026-08-12 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-12 06:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 06:00:01,108 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 06:00:01,109 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 06:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 06:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 06:00:01,141 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 06:00:01,152 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 07:00:00 UTC)" executed successfully 2026-08-12 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 08:00:00 UTC)" (scheduled at 2026-08-12 07:00:00+00:00) 2026-08-12 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-12 07:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 07:00:01,673 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 07:00:01,676 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 07:00:01,678 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 07:00:01,678 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 07:00:01,709 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 07:00:01,725 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 08:00:00 UTC)" executed successfully 2026-08-12 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 09:00:00 UTC)" (scheduled at 2026-08-12 08:00:00+00:00) 2026-08-12 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-12 08:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 08:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 08:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 08:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 08:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 08:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 08:00:01,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 09:00:00 UTC)" executed successfully 2026-08-12 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 10:00:00 UTC)" (scheduled at 2026-08-12 09:00:00+00:00) 2026-08-12 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-12 09:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 09:00:01,772 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 09:00:01,774 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 09:00:01,777 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 09:00:01,778 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 09:00:01,805 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 09:00:01,815 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 10:00:00 UTC)" executed successfully 2026-08-12 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 11:00:00 UTC)" (scheduled at 2026-08-12 10:00:00+00:00) 2026-08-12 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-12 10:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 10:00:01,762 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 10:00:01,764 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 10:00:01,768 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 10:00:01,768 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 10:00:01,805 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 10:00:01,818 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 11:00:00 UTC)" executed successfully 2026-08-12 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 12:00:00 UTC)" (scheduled at 2026-08-12 11:00:00+00:00) 2026-08-12 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-12 11:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 11:00:01,882 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 11:00:01,884 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 11:00:01,886 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 11:00:01,886 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 11:00:01,913 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 11:00:01,922 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 12:00:00 UTC)" executed successfully 2026-08-12 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 13:00:00 UTC)" (scheduled at 2026-08-12 12:00:00+00:00) 2026-08-12 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-12 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 12:00:01,683 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 12:00:01,686 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 12:00:01,690 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 12:00:01,691 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 12:00:01,730 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 12:00:01,746 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 13:00:00 UTC)" executed successfully 2026-08-12 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 14:00:00 UTC)" (scheduled at 2026-08-12 13:00:00+00:00) 2026-08-12 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-12 13:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 13:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 13:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 13:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 13:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 13:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 13:00:01,324 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 14:00:00 UTC)" executed successfully 2026-08-12 14:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 15:00:00 UTC)" (scheduled at 2026-08-12 14:00:00+00:00) 2026-08-12 14:00:00,004 INFO [fb-sync] Starting FB sync... 2026-08-12 14:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 14:00:02,324 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 14:00:02,326 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 14:00:02,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 14:00:02,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 14:00:02,366 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 14:00:02,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 15:00:00 UTC)" executed successfully 2026-08-12 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 16:00:00 UTC)" (scheduled at 2026-08-12 15:00:00+00:00) 2026-08-12 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-12 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 15:00:01,553 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 15:00:01,555 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 15:00:01,559 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 15:00:01,559 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 15:00:01,588 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 15:00:01,598 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 16:00:00 UTC)" executed successfully 2026-08-12 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 17:00:00 UTC)" (scheduled at 2026-08-12 16:00:00+00:00) 2026-08-12 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-12 16:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 16:00:02,058 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 16:00:02,060 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 16:00:02,064 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 16:00:02,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 16:00:02,099 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 16:00:02,116 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 17:00:00 UTC)" executed successfully 2026-08-12 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 18:00:00 UTC)" (scheduled at 2026-08-12 17:00:00+00:00) 2026-08-12 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-12 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 17:00:01,554 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 17:00:01,556 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 17:00:01,560 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 17:00:01,561 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 17:00:01,592 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 17:00:01,609 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 18:00:00 UTC)" executed successfully 2026-08-12 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 19:00:00 UTC)" (scheduled at 2026-08-12 18:00:00+00:00) 2026-08-12 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-12 18:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 18:00:01,289 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 18:00:01,290 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 18:00:01,294 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 18:00:01,294 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 18:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 18:00:01,351 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 19:00:00 UTC)" executed successfully 2026-08-12 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 20:00:00 UTC)" (scheduled at 2026-08-12 19:00:00+00:00) 2026-08-12 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-12 19:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 19:00:03,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 19:00:03,130 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 19:00:03,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 19:00:03,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 19:00:03,165 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 19:00:03,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 20:00:00 UTC)" executed successfully 2026-08-12 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 21:00:00 UTC)" (scheduled at 2026-08-12 20:00:00+00:00) 2026-08-12 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-12 20:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 20:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 20:00:01,244 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 20:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 20:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 20:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 20:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 21:00:00 UTC)" executed successfully 2026-08-12 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 22:00:00 UTC)" (scheduled at 2026-08-12 21:00:00+00:00) 2026-08-12 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-12 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 21:00:01,161 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 21:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 21:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 21:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 21:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 21:00:01,200 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 22:00:00 UTC)" executed successfully 2026-08-12 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 23:00:00 UTC)" (scheduled at 2026-08-12 22:00:00+00:00) 2026-08-12 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-12 22:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 22:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 22:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 22:00:01,172 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 22:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 22:00:01,207 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 22:00:01,222 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-12 23:00:00 UTC)" executed successfully 2026-08-12 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 00:00:00 UTC)" (scheduled at 2026-08-12 23:00:00+00:00) 2026-08-12 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-12 23:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-12 23:00:01,199 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-12 23:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-08-12 23:00:01,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-12 23:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-12 23:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-12 23:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 00:00:00 UTC)" executed successfully 2026-08-13 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 01:00:00 UTC)" (scheduled at 2026-08-13 00:00:00+00:00) 2026-08-13 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-13 00:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 00:00:01,545 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 00:00:01,547 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 00:00:01,550 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 00:00:01,550 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 00:00:01,580 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 00:00:01,594 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 01:00:00 UTC)" executed successfully 2026-08-13 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 02:00:00 UTC)" (scheduled at 2026-08-13 01:00:00+00:00) 2026-08-13 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 01:00:01,212 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 01:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 01:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 01:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 01:00:01,240 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 01:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 02:00:00 UTC)" executed successfully 2026-08-13 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 03:00:00 UTC)" (scheduled at 2026-08-13 02:00:00+00:00) 2026-08-13 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 02:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 02:00:01,025 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 02:00:01,027 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 02:00:01,030 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 02:00:01,031 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 02:00:01,066 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 02:00:01,082 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 03:00:00 UTC)" executed successfully 2026-08-13 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 04:00:00 UTC)" (scheduled at 2026-08-13 03:00:00+00:00) 2026-08-13 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 03:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 03:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 03:00:01,135 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 03:00:01,135 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 03:00:01,167 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 03:00:01,182 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 04:00:00 UTC)" executed successfully 2026-08-13 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 05:00:00 UTC)" (scheduled at 2026-08-13 04:00:00+00:00) 2026-08-13 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-13 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 04:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 04:00:01,177 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 04:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 04:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 04:00:01,237 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 04:00:01,254 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 05:00:00 UTC)" executed successfully 2026-08-13 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 06:00:00 UTC)" (scheduled at 2026-08-13 05:00:00+00:00) 2026-08-13 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-13 05:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 05:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 05:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 05:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 05:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 05:00:01,139 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 05:00:01,149 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 06:00:00 UTC)" executed successfully 2026-08-13 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 07:00:00 UTC)" (scheduled at 2026-08-13 06:00:00+00:00) 2026-08-13 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-13 06:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 06:00:01,117 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 06:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 06:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 06:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 06:00:01,144 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 06:00:01,160 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 07:00:00 UTC)" executed successfully 2026-08-13 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 08:00:00 UTC)" (scheduled at 2026-08-13 07:00:00+00:00) 2026-08-13 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-13 07:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 07:00:00,996 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 07:00:00,998 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 07:00:01,002 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 07:00:01,002 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 07:00:01,042 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 07:00:01,054 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 08:00:00 UTC)" executed successfully 2026-08-13 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 09:00:00 UTC)" (scheduled at 2026-08-13 08:00:00+00:00) 2026-08-13 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-13 08:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 08:00:01,245 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 08:00:01,246 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 08:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 08:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 08:00:01,270 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 08:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 09:00:00 UTC)" executed successfully 2026-08-13 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 10:00:00 UTC)" (scheduled at 2026-08-13 09:00:00+00:00) 2026-08-13 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-13 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 09:00:02,611 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 09:00:02,613 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 09:00:02,617 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 09:00:02,618 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 09:00:02,656 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 09:00:02,672 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 10:00:00 UTC)" executed successfully 2026-08-13 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 11:00:00 UTC)" (scheduled at 2026-08-13 10:00:00+00:00) 2026-08-13 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-13 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 10:00:01,633 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 10:00:01,634 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 10:00:01,639 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 10:00:01,639 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 10:00:01,678 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 10:00:01,698 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 11:00:00 UTC)" executed successfully 2026-08-13 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 12:00:00 UTC)" (scheduled at 2026-08-13 11:00:00+00:00) 2026-08-13 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-13 11:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 11:00:01,806 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 11:00:01,808 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 11:00:01,811 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 11:00:01,811 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 11:00:01,836 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 11:00:01,849 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 12:00:00 UTC)" executed successfully 2026-08-13 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 13:00:00 UTC)" (scheduled at 2026-08-13 12:00:00+00:00) 2026-08-13 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 12:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 12:00:01,545 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 12:00:01,547 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 12:00:01,549 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 12:00:01,549 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 12:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 12:00:01,586 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 13:00:00 UTC)" executed successfully 2026-08-13 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 14:00:00 UTC)" (scheduled at 2026-08-13 13:00:00+00:00) 2026-08-13 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 13:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 13:00:01,405 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 13:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 13:00:01,412 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 13:00:01,413 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 13:00:01,441 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 13:00:01,453 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 14:00:00 UTC)" executed successfully 2026-08-13 14:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 15:00:00 UTC)" (scheduled at 2026-08-13 14:00:00+00:00) 2026-08-13 14:00:00,019 INFO [fb-sync] Starting FB sync... 2026-08-13 14:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 14:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 14:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 14:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 14:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 14:00:01,270 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 14:00:01,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 15:00:00 UTC)" executed successfully 2026-08-13 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 16:00:00 UTC)" (scheduled at 2026-08-13 15:00:00+00:00) 2026-08-13 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 15:00:01,306 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 15:00:01,307 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 15:00:01,309 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 15:00:01,310 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 15:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 15:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 16:00:00 UTC)" executed successfully 2026-08-13 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 17:00:00 UTC)" (scheduled at 2026-08-13 16:00:00+00:00) 2026-08-13 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-13 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 16:00:01,632 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 16:00:01,634 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 16:00:01,637 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 16:00:01,637 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 16:00:01,660 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 16:00:01,669 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 17:00:00 UTC)" executed successfully 2026-08-13 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 18:00:00 UTC)" (scheduled at 2026-08-13 17:00:00+00:00) 2026-08-13 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-13 17:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 17:00:01,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 17:00:01,359 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 17:00:01,363 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 17:00:01,363 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 17:00:01,412 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 17:00:01,426 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 18:00:00 UTC)" executed successfully 2026-08-13 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 19:00:00 UTC)" (scheduled at 2026-08-13 18:00:00+00:00) 2026-08-13 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-13 18:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 18:00:02,175 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 18:00:02,177 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 18:00:02,181 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 18:00:02,181 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 18:00:02,223 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 18:00:02,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 19:00:00 UTC)" executed successfully 2026-08-13 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 20:00:00 UTC)" (scheduled at 2026-08-13 19:00:00+00:00) 2026-08-13 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-13 19:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 19:00:01,243 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 19:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 19:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 19:00:01,249 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 19:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 19:00:01,296 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 20:00:00 UTC)" executed successfully 2026-08-13 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 21:00:00 UTC)" (scheduled at 2026-08-13 20:00:00+00:00) 2026-08-13 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-13 20:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 20:00:01,138 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 20:00:01,140 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 20:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 20:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 20:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 20:00:01,190 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 21:00:00 UTC)" executed successfully 2026-08-13 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 22:00:00 UTC)" (scheduled at 2026-08-13 21:00:00+00:00) 2026-08-13 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-13 21:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 21:00:01,043 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 21:00:01,044 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 21:00:01,047 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 21:00:01,047 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 21:00:01,083 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 21:00:01,095 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 22:00:00 UTC)" executed successfully 2026-08-13 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 23:00:00 UTC)" (scheduled at 2026-08-13 22:00:00+00:00) 2026-08-13 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-13 22:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 22:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 22:00:01,225 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 22:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 22:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 22:00:01,269 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 22:00:01,290 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-13 23:00:00 UTC)" executed successfully 2026-08-13 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 00:00:00 UTC)" (scheduled at 2026-08-13 23:00:00+00:00) 2026-08-13 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-13 23:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-13 23:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-13 23:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-08-13 23:00:01,232 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-13 23:00:01,232 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-13 23:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-13 23:00:01,272 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 00:00:00 UTC)" executed successfully 2026-08-14 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 01:00:00 UTC)" (scheduled at 2026-08-14 00:00:00+00:00) 2026-08-14 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-14 00:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 00:00:01,623 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 00:00:01,625 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 00:00:01,629 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 00:00:01,629 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 00:00:01,656 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 00:00:01,677 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 01:00:00 UTC)" executed successfully 2026-08-14 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 02:00:00 UTC)" (scheduled at 2026-08-14 01:00:00+00:00) 2026-08-14 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-14 01:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 01:00:01,972 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 01:00:01,973 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 01:00:01,977 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 01:00:01,977 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 01:00:02,015 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 01:00:02,031 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 02:00:00 UTC)" executed successfully 2026-08-14 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 03:00:00 UTC)" (scheduled at 2026-08-14 02:00:00+00:00) 2026-08-14 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 02:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 02:00:01,279 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 02:00:01,281 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 02:00:01,284 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 02:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 02:00:01,318 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 02:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 03:00:00 UTC)" executed successfully 2026-08-14 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 04:00:00 UTC)" (scheduled at 2026-08-14 03:00:00+00:00) 2026-08-14 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 03:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 03:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 03:00:01,240 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 03:00:01,243 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 03:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 03:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 03:00:01,293 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 04:00:00 UTC)" executed successfully 2026-08-14 04:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 05:00:00 UTC)" (scheduled at 2026-08-14 04:00:00+00:00) 2026-08-14 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-14 04:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 04:00:01,111 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 04:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 04:00:01,116 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 04:00:01,116 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 04:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 04:00:01,151 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 05:00:00 UTC)" executed successfully 2026-08-14 05:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 06:00:00 UTC)" (scheduled at 2026-08-14 05:00:00+00:00) 2026-08-14 05:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-14 05:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 05:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 05:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 05:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 05:00:01,067 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 05:00:01,102 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 05:00:01,120 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 06:00:00 UTC)" executed successfully 2026-08-14 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 07:00:00 UTC)" (scheduled at 2026-08-14 06:00:00+00:00) 2026-08-14 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-14 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 06:00:01,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 06:00:01,033 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 06:00:01,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 06:00:01,037 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 06:00:01,075 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 06:00:01,088 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 07:00:00 UTC)" executed successfully 2026-08-14 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 08:00:00 UTC)" (scheduled at 2026-08-14 07:00:00+00:00) 2026-08-14 07:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-14 07:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 07:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 07:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 07:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 07:00:01,304 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 07:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 07:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 08:00:00 UTC)" executed successfully 2026-08-14 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 09:00:00 UTC)" (scheduled at 2026-08-14 08:00:00+00:00) 2026-08-14 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 08:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 08:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 08:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 08:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 08:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 08:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 08:00:01,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 09:00:00 UTC)" executed successfully 2026-08-14 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 10:00:00 UTC)" (scheduled at 2026-08-14 09:00:00+00:00) 2026-08-14 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 09:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 09:00:01,278 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 09:00:01,279 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 09:00:01,283 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 09:00:01,283 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 09:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 09:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 10:00:00 UTC)" executed successfully 2026-08-14 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 11:00:00 UTC)" (scheduled at 2026-08-14 10:00:00+00:00) 2026-08-14 10:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-14 10:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 10:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 10:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 10:00:01,214 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 10:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 10:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 10:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 11:00:00 UTC)" executed successfully 2026-08-14 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 12:00:00 UTC)" (scheduled at 2026-08-14 11:00:00+00:00) 2026-08-14 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-14 11:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 11:00:01,807 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 11:00:01,808 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 11:00:01,811 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 11:00:01,814 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 11:00:01,851 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 11:00:01,868 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 12:00:00 UTC)" executed successfully 2026-08-14 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 13:00:00 UTC)" (scheduled at 2026-08-14 12:00:00+00:00) 2026-08-14 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 12:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 12:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 12:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 12:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 12:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 12:00:01,242 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 12:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 13:00:00 UTC)" executed successfully 2026-08-14 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 14:00:00 UTC)" (scheduled at 2026-08-14 13:00:00+00:00) 2026-08-14 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-14 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 13:00:01,314 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 13:00:01,315 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 13:00:01,319 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 13:00:01,319 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 13:00:01,347 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 13:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 14:00:00 UTC)" executed successfully 2026-08-14 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 15:00:00 UTC)" (scheduled at 2026-08-14 14:00:00+00:00) 2026-08-14 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-14 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 14:00:01,272 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 14:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 14:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 14:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 14:00:01,310 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 14:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 15:00:00 UTC)" executed successfully 2026-08-14 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 16:00:00 UTC)" (scheduled at 2026-08-14 15:00:00+00:00) 2026-08-14 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-14 15:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 15:00:01,348 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 15:00:01,350 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 15:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 15:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 15:00:01,395 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 15:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 16:00:00 UTC)" executed successfully 2026-08-14 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 17:00:00 UTC)" (scheduled at 2026-08-14 16:00:00+00:00) 2026-08-14 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 16:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 16:00:01,378 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 16:00:01,380 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 16:00:01,384 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 16:00:01,384 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 16:00:01,422 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 16:00:01,438 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 17:00:00 UTC)" executed successfully 2026-08-14 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 18:00:00 UTC)" (scheduled at 2026-08-14 17:00:00+00:00) 2026-08-14 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-14 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 17:00:01,320 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 17:00:01,322 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 17:00:01,325 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 17:00:01,326 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 17:00:01,366 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 17:00:01,388 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 18:00:00 UTC)" executed successfully 2026-08-14 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 19:00:00 UTC)" (scheduled at 2026-08-14 18:00:00+00:00) 2026-08-14 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 18:00:02,458 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 18:00:02,460 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 18:00:02,463 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 18:00:02,464 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 18:00:02,506 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 18:00:02,524 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 19:00:00 UTC)" executed successfully 2026-08-14 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 20:00:00 UTC)" (scheduled at 2026-08-14 19:00:00+00:00) 2026-08-14 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-14 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 19:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 19:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 19:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 19:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 19:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 19:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 20:00:00 UTC)" executed successfully 2026-08-14 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 21:00:00 UTC)" (scheduled at 2026-08-14 20:00:00+00:00) 2026-08-14 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-14 20:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 20:00:01,627 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 20:00:01,629 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 20:00:01,633 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 20:00:01,633 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 20:00:01,678 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 20:00:01,701 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 21:00:00 UTC)" executed successfully 2026-08-14 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 22:00:00 UTC)" (scheduled at 2026-08-14 21:00:00+00:00) 2026-08-14 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-14 21:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 21:00:01,039 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 21:00:01,041 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 21:00:01,045 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 21:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 21:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 21:00:01,102 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 22:00:00 UTC)" executed successfully 2026-08-14 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 23:00:00 UTC)" (scheduled at 2026-08-14 22:00:00+00:00) 2026-08-14 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-14 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 22:00:01,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 22:00:01,065 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 22:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 22:00:01,067 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 22:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 22:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-14 23:00:00 UTC)" executed successfully 2026-08-14 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 00:00:00 UTC)" (scheduled at 2026-08-14 23:00:00+00:00) 2026-08-14 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-14 23:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-14 23:00:01,095 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-14 23:00:01,097 INFO [fb-sync.worker] Scraped 50 posts 2026-08-14 23:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-14 23:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-14 23:00:01,131 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-14 23:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 00:00:00 UTC)" executed successfully 2026-08-15 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 01:00:00 UTC)" (scheduled at 2026-08-15 00:00:00+00:00) 2026-08-15 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-15 00:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 00:00:01,130 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 00:00:01,132 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 00:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 00:00:01,137 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 00:00:01,169 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 00:00:01,182 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 01:00:00 UTC)" executed successfully 2026-08-15 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 02:00:00 UTC)" (scheduled at 2026-08-15 01:00:00+00:00) 2026-08-15 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-15 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 01:00:00,976 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 01:00:00,977 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 01:00:00,980 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 01:00:00,980 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 01:00:01,006 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 01:00:01,023 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 02:00:00 UTC)" executed successfully 2026-08-15 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 03:00:00 UTC)" (scheduled at 2026-08-15 02:00:00+00:00) 2026-08-15 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-15 02:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 02:00:01,384 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 02:00:01,386 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 02:00:01,389 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 02:00:01,389 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 02:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 02:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 03:00:00 UTC)" executed successfully 2026-08-15 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 04:00:00 UTC)" (scheduled at 2026-08-15 03:00:00+00:00) 2026-08-15 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-15 03:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 03:00:01,318 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 03:00:01,320 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 03:00:01,324 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 03:00:01,324 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 03:00:01,368 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 03:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 04:00:00 UTC)" executed successfully 2026-08-15 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 05:00:00 UTC)" (scheduled at 2026-08-15 04:00:00+00:00) 2026-08-15 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-15 04:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 04:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 04:00:01,243 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 04:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 04:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 04:00:01,289 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 04:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 05:00:00 UTC)" executed successfully 2026-08-15 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 06:00:00 UTC)" (scheduled at 2026-08-15 05:00:00+00:00) 2026-08-15 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-15 05:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 05:00:01,252 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 05:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 05:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 05:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 05:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 05:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 06:00:00 UTC)" executed successfully 2026-08-15 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 07:00:00 UTC)" (scheduled at 2026-08-15 06:00:00+00:00) 2026-08-15 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-15 06:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 06:00:01,141 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 06:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 06:00:01,145 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 06:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 06:00:01,185 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 06:00:01,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 07:00:00 UTC)" executed successfully 2026-08-15 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 08:00:00 UTC)" (scheduled at 2026-08-15 07:00:00+00:00) 2026-08-15 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-15 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 07:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 07:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 07:00:01,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 07:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 07:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 07:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 08:00:00 UTC)" executed successfully 2026-08-15 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 09:00:00 UTC)" (scheduled at 2026-08-15 08:00:00+00:00) 2026-08-15 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-15 08:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 08:00:01,773 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 08:00:01,775 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 08:00:01,779 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 08:00:01,780 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 08:00:01,827 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 08:00:01,854 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 09:00:00 UTC)" executed successfully 2026-08-15 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 10:00:00 UTC)" (scheduled at 2026-08-15 09:00:00+00:00) 2026-08-15 09:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-15 09:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 09:00:01,296 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 09:00:01,298 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 09:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 09:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 09:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 09:00:01,357 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 10:00:00 UTC)" executed successfully 2026-08-15 10:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 11:00:00 UTC)" (scheduled at 2026-08-15 10:00:00+00:00) 2026-08-15 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-15 10:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 10:00:01,283 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 10:00:01,285 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 10:00:01,289 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 10:00:01,290 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 10:00:01,331 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 10:00:01,349 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 11:00:00 UTC)" executed successfully 2026-08-15 11:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 12:00:00 UTC)" (scheduled at 2026-08-15 11:00:00+00:00) 2026-08-15 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-15 11:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 11:00:01,476 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 11:00:01,480 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 11:00:01,483 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 11:00:01,484 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 11:00:01,527 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 11:00:01,545 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 12:00:00 UTC)" executed successfully 2026-08-15 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 13:00:00 UTC)" (scheduled at 2026-08-15 12:00:00+00:00) 2026-08-15 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-15 12:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 12:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 12:00:01,144 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 12:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 12:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 12:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 12:00:01,185 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 13:00:00 UTC)" executed successfully 2026-08-15 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 14:00:00 UTC)" (scheduled at 2026-08-15 13:00:00+00:00) 2026-08-15 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-15 13:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 13:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 13:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 13:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 13:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 13:00:01,243 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 13:00:01,260 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 14:00:00 UTC)" executed successfully 2026-08-15 14:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 15:00:00 UTC)" (scheduled at 2026-08-15 14:00:00+00:00) 2026-08-15 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-15 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 14:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 14:00:01,258 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 14:00:01,261 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 14:00:01,261 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 14:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 14:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 15:00:00 UTC)" executed successfully 2026-08-15 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 16:00:00 UTC)" (scheduled at 2026-08-15 15:00:00+00:00) 2026-08-15 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-15 15:00:00,101 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 15:00:02,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 15:00:02,272 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 15:00:02,274 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 15:00:02,274 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 15:00:02,311 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 15:00:02,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 16:00:00 UTC)" executed successfully 2026-08-15 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 17:00:00 UTC)" (scheduled at 2026-08-15 16:00:00+00:00) 2026-08-15 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-15 16:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 16:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 16:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 16:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 16:00:01,296 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 16:00:01,318 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 16:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 17:00:00 UTC)" executed successfully 2026-08-15 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 18:00:00 UTC)" (scheduled at 2026-08-15 17:00:00+00:00) 2026-08-15 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-15 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 17:00:01,315 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 17:00:01,316 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 17:00:01,319 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 17:00:01,320 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 17:00:01,356 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 17:00:01,378 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 18:00:00 UTC)" executed successfully 2026-08-15 18:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 19:00:00 UTC)" (scheduled at 2026-08-15 18:00:00+00:00) 2026-08-15 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-15 18:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 18:00:01,405 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 18:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 18:00:01,410 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 18:00:01,410 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 18:00:01,446 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 18:00:01,462 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 19:00:00 UTC)" executed successfully 2026-08-15 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 20:00:00 UTC)" (scheduled at 2026-08-15 19:00:00+00:00) 2026-08-15 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-15 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 19:00:01,398 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 19:00:01,400 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 19:00:01,403 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 19:00:01,403 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 19:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 19:00:01,443 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 20:00:00 UTC)" executed successfully 2026-08-15 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 21:00:00 UTC)" (scheduled at 2026-08-15 20:00:00+00:00) 2026-08-15 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-15 20:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 20:00:01,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 20:00:01,163 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 20:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 20:00:01,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 20:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 20:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 21:00:00 UTC)" executed successfully 2026-08-15 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 22:00:00 UTC)" (scheduled at 2026-08-15 21:00:00+00:00) 2026-08-15 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-15 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 21:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 21:00:01,182 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 21:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 21:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 21:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 21:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 22:00:00 UTC)" executed successfully 2026-08-15 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 23:00:00 UTC)" (scheduled at 2026-08-15 22:00:00+00:00) 2026-08-15 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-15 22:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 22:00:02,443 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 22:00:02,445 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 22:00:02,449 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 22:00:02,449 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 22:00:02,494 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 22:00:02,516 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-15 23:00:00 UTC)" executed successfully 2026-08-15 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 00:00:00 UTC)" (scheduled at 2026-08-15 23:00:00+00:00) 2026-08-15 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-15 23:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-15 23:00:02,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-15 23:00:02,164 INFO [fb-sync.worker] Scraped 50 posts 2026-08-15 23:00:02,166 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-15 23:00:02,166 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-15 23:00:02,199 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-15 23:00:02,215 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 00:00:00 UTC)" executed successfully 2026-08-16 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 01:00:00 UTC)" (scheduled at 2026-08-16 00:00:00+00:00) 2026-08-16 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 00:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 00:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 00:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 00:00:01,188 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 00:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 00:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 00:00:01,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 01:00:00 UTC)" executed successfully 2026-08-16 01:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 02:00:00 UTC)" (scheduled at 2026-08-16 01:00:00+00:00) 2026-08-16 01:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-16 01:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 01:00:01,058 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 01:00:01,060 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 01:00:01,062 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 01:00:01,063 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 01:00:01,099 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 01:00:01,112 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 02:00:00 UTC)" executed successfully 2026-08-16 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 03:00:00 UTC)" (scheduled at 2026-08-16 02:00:00+00:00) 2026-08-16 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-16 02:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 02:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 02:00:01,256 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 02:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 02:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 02:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 02:00:01,299 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 03:00:00 UTC)" executed successfully 2026-08-16 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 04:00:00 UTC)" (scheduled at 2026-08-16 03:00:00+00:00) 2026-08-16 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 03:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 03:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 03:00:01,087 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 03:00:01,087 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 03:00:01,132 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 03:00:01,153 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 04:00:00 UTC)" executed successfully 2026-08-16 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 05:00:00 UTC)" (scheduled at 2026-08-16 04:00:00+00:00) 2026-08-16 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-16 04:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 04:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 04:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 04:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 04:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 04:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 04:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 05:00:00 UTC)" executed successfully 2026-08-16 05:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 06:00:00 UTC)" (scheduled at 2026-08-16 05:00:00+00:00) 2026-08-16 05:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-16 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 05:00:01,921 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 05:00:01,923 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 05:00:01,927 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 05:00:01,927 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 05:00:01,967 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 05:00:01,985 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 06:00:00 UTC)" executed successfully 2026-08-16 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 07:00:00 UTC)" (scheduled at 2026-08-16 06:00:00+00:00) 2026-08-16 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-16 06:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 06:00:01,421 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 06:00:01,423 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 06:00:01,426 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 06:00:01,426 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 06:00:01,463 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 06:00:01,480 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 07:00:00 UTC)" executed successfully 2026-08-16 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 08:00:00 UTC)" (scheduled at 2026-08-16 07:00:00+00:00) 2026-08-16 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-16 07:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 07:00:01,660 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 07:00:01,662 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 07:00:01,664 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 07:00:01,664 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 07:00:01,702 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 07:00:01,719 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 08:00:00 UTC)" executed successfully 2026-08-16 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 09:00:00 UTC)" (scheduled at 2026-08-16 08:00:00+00:00) 2026-08-16 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 08:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 08:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 08:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 08:00:01,114 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 08:00:01,156 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 08:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 09:00:00 UTC)" executed successfully 2026-08-16 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 10:00:00 UTC)" (scheduled at 2026-08-16 09:00:00+00:00) 2026-08-16 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-16 09:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 09:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 09:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 09:00:01,243 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 09:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 09:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 09:00:01,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 10:00:00 UTC)" executed successfully 2026-08-16 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 11:00:00 UTC)" (scheduled at 2026-08-16 10:00:00+00:00) 2026-08-16 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 10:00:02,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 10:00:02,185 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 10:00:02,189 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 10:00:02,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 10:00:02,234 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 10:00:02,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 11:00:00 UTC)" executed successfully 2026-08-16 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 12:00:00 UTC)" (scheduled at 2026-08-16 11:00:00+00:00) 2026-08-16 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-16 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 11:00:01,371 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 11:00:01,372 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 11:00:01,374 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 11:00:01,374 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 11:00:01,399 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 11:00:01,408 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 12:00:00 UTC)" executed successfully 2026-08-16 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 13:00:00 UTC)" (scheduled at 2026-08-16 12:00:00+00:00) 2026-08-16 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-16 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 12:00:01,297 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 12:00:01,298 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 12:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 12:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 12:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 12:00:01,349 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 13:00:00 UTC)" executed successfully 2026-08-16 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 14:00:00 UTC)" (scheduled at 2026-08-16 13:00:00+00:00) 2026-08-16 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-16 13:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 13:00:01,155 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 13:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 13:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 13:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 13:00:01,191 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 13:00:01,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 14:00:00 UTC)" executed successfully 2026-08-16 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 15:00:00 UTC)" (scheduled at 2026-08-16 14:00:00+00:00) 2026-08-16 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-16 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 14:00:01,297 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 14:00:01,299 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 14:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 14:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 14:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 14:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 15:00:00 UTC)" executed successfully 2026-08-16 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 16:00:00 UTC)" (scheduled at 2026-08-16 15:00:00+00:00) 2026-08-16 15:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-16 15:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 15:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 15:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 15:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 15:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 15:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 15:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 16:00:00 UTC)" executed successfully 2026-08-16 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 17:00:00 UTC)" (scheduled at 2026-08-16 16:00:00+00:00) 2026-08-16 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-16 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 16:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 16:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 16:00:01,267 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 16:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 16:00:01,307 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 16:00:01,326 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 17:00:00 UTC)" executed successfully 2026-08-16 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 18:00:00 UTC)" (scheduled at 2026-08-16 17:00:00+00:00) 2026-08-16 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 17:00:01,406 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 17:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 17:00:01,410 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 17:00:01,410 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 17:00:01,446 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 17:00:01,467 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 18:00:00 UTC)" executed successfully 2026-08-16 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 19:00:00 UTC)" (scheduled at 2026-08-16 18:00:00+00:00) 2026-08-16 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-16 18:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 18:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 18:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 18:00:01,220 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 18:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 18:00:01,255 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 18:00:01,270 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 19:00:00 UTC)" executed successfully 2026-08-16 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 20:00:00 UTC)" (scheduled at 2026-08-16 19:00:00+00:00) 2026-08-16 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-16 19:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 19:00:01,437 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 19:00:01,439 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 19:00:01,441 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 19:00:01,441 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 19:00:01,474 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 19:00:01,490 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 20:00:00 UTC)" executed successfully 2026-08-16 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 21:00:00 UTC)" (scheduled at 2026-08-16 20:00:00+00:00) 2026-08-16 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-16 20:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 20:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 20:00:01,267 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 20:00:01,269 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 20:00:01,270 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 20:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 20:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 21:00:00 UTC)" executed successfully 2026-08-16 21:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 22:00:00 UTC)" (scheduled at 2026-08-16 21:00:00+00:00) 2026-08-16 21:00:00,004 INFO [fb-sync] Starting FB sync... 2026-08-16 21:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 21:00:01,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 21:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 21:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 21:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 21:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 21:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 22:00:00 UTC)" executed successfully 2026-08-16 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 23:00:00 UTC)" (scheduled at 2026-08-16 22:00:00+00:00) 2026-08-16 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-16 22:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 22:00:01,133 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 22:00:01,135 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 22:00:01,138 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 22:00:01,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 22:00:01,176 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 22:00:01,195 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-16 23:00:00 UTC)" executed successfully 2026-08-16 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 00:00:00 UTC)" (scheduled at 2026-08-16 23:00:00+00:00) 2026-08-16 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-16 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-16 23:00:01,001 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-16 23:00:01,002 INFO [fb-sync.worker] Scraped 50 posts 2026-08-16 23:00:01,006 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-16 23:00:01,006 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-16 23:00:01,029 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-16 23:00:01,045 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 00:00:00 UTC)" executed successfully 2026-08-17 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 01:00:00 UTC)" (scheduled at 2026-08-17 00:00:00+00:00) 2026-08-17 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-17 00:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 00:00:01,163 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 00:00:01,164 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 00:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 00:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 00:00:01,192 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 00:00:01,203 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 01:00:00 UTC)" executed successfully 2026-08-17 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 02:00:00 UTC)" (scheduled at 2026-08-17 01:00:00+00:00) 2026-08-17 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-17 01:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 01:00:01,042 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 01:00:01,044 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 01:00:01,048 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 01:00:01,048 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 01:00:01,088 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 01:00:01,104 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 02:00:00 UTC)" executed successfully 2026-08-17 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 03:00:00 UTC)" (scheduled at 2026-08-17 02:00:00+00:00) 2026-08-17 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-17 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 02:00:01,367 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 02:00:01,369 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 02:00:01,370 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 02:00:01,370 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 02:00:01,396 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 02:00:01,411 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 03:00:00 UTC)" executed successfully 2026-08-17 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 04:00:00 UTC)" (scheduled at 2026-08-17 03:00:00+00:00) 2026-08-17 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-17 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 03:00:01,032 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 03:00:01,034 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 03:00:01,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 03:00:01,037 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 03:00:01,074 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 03:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 04:00:00 UTC)" executed successfully 2026-08-17 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 05:00:00 UTC)" (scheduled at 2026-08-17 04:00:00+00:00) 2026-08-17 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-17 04:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 04:00:02,574 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 04:00:02,576 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 04:00:02,580 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 04:00:02,580 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 04:00:02,622 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 04:00:02,642 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 05:00:00 UTC)" executed successfully 2026-08-17 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 06:00:00 UTC)" (scheduled at 2026-08-17 05:00:00+00:00) 2026-08-17 05:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-17 05:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 05:00:01,009 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 05:00:01,010 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 05:00:01,014 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 05:00:01,014 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 05:00:01,050 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 05:00:01,060 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 06:00:00 UTC)" executed successfully 2026-08-17 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 07:00:00 UTC)" (scheduled at 2026-08-17 06:00:00+00:00) 2026-08-17 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-17 06:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 06:00:02,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 06:00:02,275 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 06:00:02,278 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 06:00:02,278 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 06:00:02,308 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 06:00:02,318 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 07:00:00 UTC)" executed successfully 2026-08-17 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 08:00:00 UTC)" (scheduled at 2026-08-17 07:00:00+00:00) 2026-08-17 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-17 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 07:00:01,676 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 07:00:01,678 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 07:00:01,682 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 07:00:01,682 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 07:00:01,740 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 07:00:01,763 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 08:00:00 UTC)" executed successfully 2026-08-17 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 09:00:00 UTC)" (scheduled at 2026-08-17 08:00:00+00:00) 2026-08-17 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-17 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 08:00:01,325 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 08:00:01,326 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 08:00:01,328 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 08:00:01,328 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 08:00:01,358 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 08:00:01,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 09:00:00 UTC)" executed successfully 2026-08-17 09:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 10:00:00 UTC)" (scheduled at 2026-08-17 09:00:00+00:00) 2026-08-17 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-17 09:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 09:00:00,940 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 09:00:00,943 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 09:00:00,946 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 09:00:00,947 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 09:00:00,982 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 09:00:00,999 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 10:00:00 UTC)" executed successfully 2026-08-17 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 11:00:00 UTC)" (scheduled at 2026-08-17 10:00:00+00:00) 2026-08-17 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 10:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 10:00:01,563 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 10:00:01,564 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 10:00:01,568 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 10:00:01,568 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 10:00:01,607 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 10:00:01,628 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 11:00:00 UTC)" executed successfully 2026-08-17 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 12:00:00 UTC)" (scheduled at 2026-08-17 11:00:00+00:00) 2026-08-17 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 11:00:01,288 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 11:00:01,290 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 11:00:01,293 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 11:00:01,294 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 11:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 11:00:01,356 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 12:00:00 UTC)" executed successfully 2026-08-17 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 13:00:00 UTC)" (scheduled at 2026-08-17 12:00:00+00:00) 2026-08-17 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-17 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 12:00:01,828 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 12:00:01,830 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 12:00:01,832 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 12:00:01,832 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 12:00:01,867 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 12:00:01,887 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 13:00:00 UTC)" executed successfully 2026-08-17 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 14:00:00 UTC)" (scheduled at 2026-08-17 13:00:00+00:00) 2026-08-17 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 13:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 13:00:01,196 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 13:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 13:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 13:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 13:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 13:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 14:00:00 UTC)" executed successfully 2026-08-17 14:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 15:00:00 UTC)" (scheduled at 2026-08-17 14:00:00+00:00) 2026-08-17 14:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-17 14:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 14:00:01,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 14:00:01,366 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 14:00:01,369 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 14:00:01,369 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 14:00:01,394 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 14:00:01,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 15:00:00 UTC)" executed successfully 2026-08-17 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 16:00:00 UTC)" (scheduled at 2026-08-17 15:00:00+00:00) 2026-08-17 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-17 15:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 15:00:01,186 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 15:00:01,189 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 15:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 15:00:01,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 15:00:01,241 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 15:00:01,521 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 16:00:00 UTC)" executed successfully 2026-08-17 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 17:00:00 UTC)" (scheduled at 2026-08-17 16:00:00+00:00) 2026-08-17 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 16:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 16:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 16:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 16:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 16:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 16:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 16:00:01,224 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 17:00:00 UTC)" executed successfully 2026-08-17 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 18:00:00 UTC)" (scheduled at 2026-08-17 17:00:00+00:00) 2026-08-17 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-17 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 17:00:02,555 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 17:00:02,557 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 17:00:02,560 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 17:00:02,560 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 17:00:02,599 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 17:00:02,614 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 18:00:00 UTC)" executed successfully 2026-08-17 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 19:00:00 UTC)" (scheduled at 2026-08-17 18:00:00+00:00) 2026-08-17 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 18:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 18:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 18:00:01,030 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 18:00:01,033 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 18:00:01,033 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 18:00:01,064 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 18:00:01,079 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 19:00:00 UTC)" executed successfully 2026-08-17 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 20:00:00 UTC)" (scheduled at 2026-08-17 19:00:00+00:00) 2026-08-17 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 19:00:01,643 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 19:00:01,644 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 19:00:01,648 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 19:00:01,648 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 19:00:01,697 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 19:00:01,719 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 20:00:00 UTC)" executed successfully 2026-08-17 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 21:00:00 UTC)" (scheduled at 2026-08-17 20:00:00+00:00) 2026-08-17 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-17 20:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 20:00:01,104 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 20:00:01,106 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 20:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 20:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 20:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 20:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 21:00:00 UTC)" executed successfully 2026-08-17 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 22:00:00 UTC)" (scheduled at 2026-08-17 21:00:00+00:00) 2026-08-17 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-17 21:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 21:00:01,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 21:00:01,088 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 21:00:01,091 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 21:00:01,091 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 21:00:01,127 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 21:00:01,138 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 22:00:00 UTC)" executed successfully 2026-08-17 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 23:00:00 UTC)" (scheduled at 2026-08-17 22:00:00+00:00) 2026-08-17 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-17 22:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 22:00:00,986 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 22:00:00,988 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 22:00:00,994 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 22:00:00,996 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 22:00:01,037 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 22:00:01,057 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-17 23:00:00 UTC)" executed successfully 2026-08-17 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 00:00:00 UTC)" (scheduled at 2026-08-17 23:00:00+00:00) 2026-08-17 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-17 23:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-17 23:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-17 23:00:01,056 INFO [fb-sync.worker] Scraped 50 posts 2026-08-17 23:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-17 23:00:01,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-17 23:00:01,097 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-17 23:00:01,113 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 00:00:00 UTC)" executed successfully 2026-08-18 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 01:00:00 UTC)" (scheduled at 2026-08-18 00:00:00+00:00) 2026-08-18 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-18 00:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 00:00:01,046 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 00:00:01,051 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 00:00:01,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 00:00:01,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 00:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 00:00:01,116 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 01:00:00 UTC)" executed successfully 2026-08-18 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 02:00:00 UTC)" (scheduled at 2026-08-18 01:00:00+00:00) 2026-08-18 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-18 01:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 01:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 01:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 01:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 01:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 01:00:01,133 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 01:00:01,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 02:00:00 UTC)" executed successfully 2026-08-18 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 03:00:00 UTC)" (scheduled at 2026-08-18 02:00:00+00:00) 2026-08-18 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-18 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 02:00:00,951 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 02:00:00,952 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 02:00:00,957 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 02:00:00,957 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 02:00:00,988 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 02:00:01,008 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 03:00:00 UTC)" executed successfully 2026-08-18 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 04:00:00 UTC)" (scheduled at 2026-08-18 03:00:00+00:00) 2026-08-18 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-18 03:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 03:00:01,464 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 03:00:01,466 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 03:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 03:00:01,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 03:00:01,522 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 03:00:01,543 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 04:00:00 UTC)" executed successfully 2026-08-18 04:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 05:00:00 UTC)" (scheduled at 2026-08-18 04:00:00+00:00) 2026-08-18 04:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-18 04:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 04:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 04:00:01,258 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 04:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 04:00:01,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 04:00:01,295 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 04:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 05:00:00 UTC)" executed successfully 2026-08-18 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 06:00:00 UTC)" (scheduled at 2026-08-18 05:00:00+00:00) 2026-08-18 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-18 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 05:00:01,293 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 05:00:01,295 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 05:00:01,299 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 05:00:01,299 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 05:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 05:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 06:00:00 UTC)" executed successfully 2026-08-18 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 07:00:00 UTC)" (scheduled at 2026-08-18 06:00:00+00:00) 2026-08-18 06:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-18 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 06:00:01,130 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 06:00:01,132 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 06:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 06:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 06:00:01,178 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 06:00:01,195 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 07:00:00 UTC)" executed successfully 2026-08-18 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 08:00:00 UTC)" (scheduled at 2026-08-18 07:00:00+00:00) 2026-08-18 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-18 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 07:00:01,655 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 07:00:01,657 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 07:00:01,660 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 07:00:01,660 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 07:00:01,706 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 07:00:01,728 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 08:00:00 UTC)" executed successfully 2026-08-18 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 09:00:00 UTC)" (scheduled at 2026-08-18 08:00:00+00:00) 2026-08-18 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-18 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 08:00:01,021 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 08:00:01,023 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 08:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 08:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 08:00:01,069 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 08:00:01,091 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 09:00:00 UTC)" executed successfully 2026-08-18 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 10:00:00 UTC)" (scheduled at 2026-08-18 09:00:00+00:00) 2026-08-18 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-18 09:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 09:00:01,304 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 09:00:01,306 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 09:00:01,310 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 09:00:01,310 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 09:00:01,370 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 09:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 10:00:00 UTC)" executed successfully 2026-08-18 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 11:00:00 UTC)" (scheduled at 2026-08-18 10:00:00+00:00) 2026-08-18 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-18 10:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 10:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 10:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 10:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 10:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 10:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 10:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 11:00:00 UTC)" executed successfully 2026-08-18 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 12:00:00 UTC)" (scheduled at 2026-08-18 11:00:00+00:00) 2026-08-18 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-18 11:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 11:00:02,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 11:00:02,095 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 11:00:02,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 11:00:02,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 11:00:02,140 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 11:00:02,160 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 12:00:00 UTC)" executed successfully 2026-08-18 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 13:00:00 UTC)" (scheduled at 2026-08-18 12:00:00+00:00) 2026-08-18 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-18 12:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 12:00:01,244 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 12:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 12:00:01,247 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 12:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 12:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 12:00:01,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 13:00:00 UTC)" executed successfully 2026-08-18 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 14:00:00 UTC)" (scheduled at 2026-08-18 13:00:00+00:00) 2026-08-18 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-18 13:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 13:00:01,798 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 13:00:01,801 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 13:00:01,804 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 13:00:01,805 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 13:00:01,846 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 13:00:01,863 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 14:00:00 UTC)" executed successfully 2026-08-18 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 15:00:00 UTC)" (scheduled at 2026-08-18 14:00:00+00:00) 2026-08-18 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-18 14:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 14:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 14:00:01,070 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 14:00:01,073 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 14:00:01,073 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 14:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 14:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 15:00:00 UTC)" executed successfully 2026-08-18 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 16:00:00 UTC)" (scheduled at 2026-08-18 15:00:00+00:00) 2026-08-18 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-18 15:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 15:00:01,665 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 15:00:01,666 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 15:00:01,670 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 15:00:01,670 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 15:00:01,711 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 15:00:01,730 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 16:00:00 UTC)" executed successfully 2026-08-18 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 17:00:00 UTC)" (scheduled at 2026-08-18 16:00:00+00:00) 2026-08-18 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-18 16:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 16:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 16:00:01,297 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 16:00:01,301 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 16:00:01,301 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 16:00:01,345 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 16:00:01,368 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 17:00:00 UTC)" executed successfully 2026-08-18 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 18:00:00 UTC)" (scheduled at 2026-08-18 17:00:00+00:00) 2026-08-18 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-18 17:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 17:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 17:00:01,218 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 17:00:01,222 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 17:00:01,222 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 17:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 17:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 18:00:00 UTC)" executed successfully 2026-08-18 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 19:00:00 UTC)" (scheduled at 2026-08-18 18:00:00+00:00) 2026-08-18 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-18 18:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 18:00:01,468 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 18:00:01,470 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 18:00:01,473 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 18:00:01,473 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 18:00:01,520 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 18:00:01,541 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 19:00:00 UTC)" executed successfully 2026-08-18 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 20:00:00 UTC)" (scheduled at 2026-08-18 19:00:00+00:00) 2026-08-18 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-18 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 19:00:01,075 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 19:00:01,077 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 19:00:01,078 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 19:00:01,079 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 19:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 19:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 20:00:00 UTC)" executed successfully 2026-08-18 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 21:00:00 UTC)" (scheduled at 2026-08-18 20:00:00+00:00) 2026-08-18 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-18 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 20:00:01,253 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 20:00:01,255 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 20:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 20:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 20:00:01,315 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 20:00:01,342 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 21:00:00 UTC)" executed successfully 2026-08-18 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 22:00:00 UTC)" (scheduled at 2026-08-18 21:00:00+00:00) 2026-08-18 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-18 21:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 21:00:01,227 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 21:00:01,229 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 21:00:01,232 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 21:00:01,232 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 21:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 21:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 22:00:00 UTC)" executed successfully 2026-08-18 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 23:00:00 UTC)" (scheduled at 2026-08-18 22:00:00+00:00) 2026-08-18 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-18 22:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 22:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 22:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 22:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 22:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 22:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 22:00:01,270 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-18 23:00:00 UTC)" executed successfully 2026-08-18 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 00:00:00 UTC)" (scheduled at 2026-08-18 23:00:00+00:00) 2026-08-18 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-18 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-18 23:00:01,088 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-18 23:00:01,091 INFO [fb-sync.worker] Scraped 50 posts 2026-08-18 23:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-18 23:00:01,095 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-18 23:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-18 23:00:01,164 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 00:00:00 UTC)" executed successfully 2026-08-19 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 01:00:00 UTC)" (scheduled at 2026-08-19 00:00:00+00:00) 2026-08-19 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-19 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 00:00:01,805 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 00:00:01,807 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 00:00:01,811 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 00:00:01,812 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 00:00:01,866 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 00:00:01,891 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 01:00:00 UTC)" executed successfully 2026-08-19 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 02:00:00 UTC)" (scheduled at 2026-08-19 01:00:00+00:00) 2026-08-19 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-19 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 01:00:01,465 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 01:00:01,466 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 01:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 01:00:01,470 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 01:00:01,516 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 01:00:01,540 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 02:00:00 UTC)" executed successfully 2026-08-19 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 03:00:00 UTC)" (scheduled at 2026-08-19 02:00:00+00:00) 2026-08-19 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-19 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 02:00:01,122 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 02:00:01,123 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 02:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 02:00:01,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 02:00:01,160 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 02:00:01,179 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 03:00:00 UTC)" executed successfully 2026-08-19 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 04:00:00 UTC)" (scheduled at 2026-08-19 03:00:00+00:00) 2026-08-19 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-19 03:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 03:00:01,972 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 03:00:01,975 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 03:00:01,978 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 03:00:01,979 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 03:00:02,041 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 03:00:02,072 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 04:00:00 UTC)" executed successfully 2026-08-19 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 05:00:00 UTC)" (scheduled at 2026-08-19 04:00:00+00:00) 2026-08-19 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-19 04:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 04:00:01,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 04:00:01,237 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 04:00:01,240 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 04:00:01,240 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 04:00:01,287 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 04:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 05:00:00 UTC)" executed successfully 2026-08-19 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 06:00:00 UTC)" (scheduled at 2026-08-19 05:00:00+00:00) 2026-08-19 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-19 05:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 05:00:02,555 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 05:00:02,557 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 05:00:02,561 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 05:00:02,561 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 05:00:02,604 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 05:00:02,628 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 06:00:00 UTC)" executed successfully 2026-08-19 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 07:00:00 UTC)" (scheduled at 2026-08-19 06:00:00+00:00) 2026-08-19 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-19 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 06:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 06:00:01,190 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 06:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 06:00:01,194 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 06:00:01,223 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 06:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 07:00:00 UTC)" executed successfully 2026-08-19 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 08:00:00 UTC)" (scheduled at 2026-08-19 07:00:00+00:00) 2026-08-19 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-19 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 07:00:02,301 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 07:00:02,304 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 07:00:02,308 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 07:00:02,309 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 07:00:02,356 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 07:00:02,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 08:00:00 UTC)" executed successfully 2026-08-19 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 09:00:00 UTC)" (scheduled at 2026-08-19 08:00:00+00:00) 2026-08-19 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-19 08:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 08:00:01,234 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 08:00:01,235 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 08:00:01,238 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 08:00:01,238 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 08:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 08:00:01,304 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 09:00:00 UTC)" executed successfully 2026-08-19 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 10:00:00 UTC)" (scheduled at 2026-08-19 09:00:00+00:00) 2026-08-19 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-19 09:00:00,143 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 09:00:01,356 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 09:00:01,358 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 09:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 09:00:01,361 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 09:00:01,407 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 09:00:01,426 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 10:00:00 UTC)" executed successfully 2026-08-19 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 11:00:00 UTC)" (scheduled at 2026-08-19 10:00:00+00:00) 2026-08-19 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-19 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 10:00:01,246 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 10:00:01,247 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 10:00:01,250 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 10:00:01,250 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 10:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 10:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 11:00:00 UTC)" executed successfully 2026-08-19 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 12:00:00 UTC)" (scheduled at 2026-08-19 11:00:00+00:00) 2026-08-19 11:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-19 11:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 11:00:02,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 11:00:02,275 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 11:00:02,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 11:00:02,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 11:00:02,338 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 11:00:02,361 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 12:00:00 UTC)" executed successfully 2026-08-19 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 13:00:00 UTC)" (scheduled at 2026-08-19 12:00:00+00:00) 2026-08-19 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-19 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 12:00:02,033 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 12:00:02,035 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 12:00:02,039 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 12:00:02,039 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 12:00:02,088 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 12:00:02,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 13:00:00 UTC)" executed successfully 2026-08-19 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 14:00:00 UTC)" (scheduled at 2026-08-19 13:00:00+00:00) 2026-08-19 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-19 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 13:00:02,705 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 13:00:02,707 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 13:00:02,709 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 13:00:02,709 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 13:00:02,750 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 13:00:02,773 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 14:00:00 UTC)" executed successfully 2026-08-19 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 15:00:00 UTC)" (scheduled at 2026-08-19 14:00:00+00:00) 2026-08-19 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-19 14:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 14:00:01,634 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 14:00:01,636 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 14:00:01,639 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 14:00:01,640 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 14:00:01,693 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 14:00:01,722 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 15:00:00 UTC)" executed successfully 2026-08-19 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 16:00:00 UTC)" (scheduled at 2026-08-19 15:00:00+00:00) 2026-08-19 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-19 15:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 15:00:02,649 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 15:00:02,651 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 15:00:02,655 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 15:00:02,655 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 15:00:02,702 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 15:00:02,721 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 16:00:00 UTC)" executed successfully 2026-08-19 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 17:00:00 UTC)" (scheduled at 2026-08-19 16:00:00+00:00) 2026-08-19 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-19 16:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 16:00:01,541 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 16:00:01,543 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 16:00:01,546 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 16:00:01,547 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 16:00:01,595 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 16:00:01,627 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 17:00:00 UTC)" executed successfully 2026-08-19 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 18:00:00 UTC)" (scheduled at 2026-08-19 17:00:00+00:00) 2026-08-19 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-19 17:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 17:00:02,503 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 17:00:02,504 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 17:00:02,508 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 17:00:02,508 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 17:00:02,541 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 17:00:02,565 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 18:00:00 UTC)" executed successfully 2026-08-19 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 19:00:00 UTC)" (scheduled at 2026-08-19 18:00:00+00:00) 2026-08-19 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-19 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 18:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 18:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 18:00:01,231 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 18:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 18:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 18:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 19:00:00 UTC)" executed successfully 2026-08-19 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 20:00:00 UTC)" (scheduled at 2026-08-19 19:00:00+00:00) 2026-08-19 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-19 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 19:00:01,426 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 19:00:01,429 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 19:00:01,432 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 19:00:01,432 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 19:00:01,464 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 19:00:01,477 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 20:00:00 UTC)" executed successfully 2026-08-19 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 21:00:00 UTC)" (scheduled at 2026-08-19 20:00:00+00:00) 2026-08-19 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-19 20:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 20:00:01,088 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 20:00:01,090 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 20:00:01,094 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 20:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 20:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 20:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 21:00:00 UTC)" executed successfully 2026-08-19 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 22:00:00 UTC)" (scheduled at 2026-08-19 21:00:00+00:00) 2026-08-19 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-19 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 21:00:01,138 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 21:00:01,141 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 21:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 21:00:01,144 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 21:00:01,199 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 21:00:01,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 22:00:00 UTC)" executed successfully 2026-08-19 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 23:00:00 UTC)" (scheduled at 2026-08-19 22:00:00+00:00) 2026-08-19 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-19 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 22:00:01,844 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 22:00:01,849 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 22:00:01,854 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 22:00:01,854 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 22:00:01,927 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 22:00:01,958 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-19 23:00:00 UTC)" executed successfully 2026-08-19 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 00:00:00 UTC)" (scheduled at 2026-08-19 23:00:00+00:00) 2026-08-19 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-19 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-19 23:00:01,605 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-19 23:00:01,606 INFO [fb-sync.worker] Scraped 50 posts 2026-08-19 23:00:01,609 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-19 23:00:01,609 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-19 23:00:01,640 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-19 23:00:01,657 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 00:00:00 UTC)" executed successfully 2026-08-20 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 01:00:00 UTC)" (scheduled at 2026-08-20 00:00:00+00:00) 2026-08-20 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-20 00:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 00:00:01,035 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 00:00:01,036 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 00:00:01,039 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 00:00:01,039 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 00:00:01,078 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 00:00:01,097 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 01:00:00 UTC)" executed successfully 2026-08-20 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 02:00:00 UTC)" (scheduled at 2026-08-20 01:00:00+00:00) 2026-08-20 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-20 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 01:00:01,891 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 01:00:01,893 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 01:00:01,896 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 01:00:01,896 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 01:00:01,940 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 01:00:01,966 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 02:00:00 UTC)" executed successfully 2026-08-20 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 03:00:00 UTC)" (scheduled at 2026-08-20 02:00:00+00:00) 2026-08-20 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-20 02:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 02:00:01,540 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 02:00:01,542 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 02:00:01,546 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 02:00:01,546 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 02:00:01,605 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 02:00:01,625 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 03:00:00 UTC)" executed successfully 2026-08-20 03:00:00,019 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 04:00:00 UTC)" (scheduled at 2026-08-20 03:00:00+00:00) 2026-08-20 03:00:00,023 INFO [fb-sync] Starting FB sync... 2026-08-20 03:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 03:00:01,129 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 03:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 03:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 03:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 03:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 03:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 04:00:00 UTC)" executed successfully 2026-08-20 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 05:00:00 UTC)" (scheduled at 2026-08-20 04:00:00+00:00) 2026-08-20 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-20 04:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 04:00:01,871 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 04:00:01,873 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 04:00:01,876 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 04:00:01,876 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 04:00:01,926 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 04:00:01,946 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 05:00:00 UTC)" executed successfully 2026-08-20 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 06:00:00 UTC)" (scheduled at 2026-08-20 05:00:00+00:00) 2026-08-20 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-20 05:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 05:00:01,138 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 05:00:01,140 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 05:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 05:00:01,144 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 05:00:01,191 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 05:00:01,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 06:00:00 UTC)" executed successfully 2026-08-20 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 07:00:00 UTC)" (scheduled at 2026-08-20 06:00:00+00:00) 2026-08-20 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-20 06:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 06:00:01,376 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 06:00:01,377 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 06:00:01,380 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 06:00:01,380 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 06:00:01,419 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 06:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 07:00:00 UTC)" executed successfully 2026-08-20 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 08:00:00 UTC)" (scheduled at 2026-08-20 07:00:00+00:00) 2026-08-20 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-20 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 07:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 07:00:01,100 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 07:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 07:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 07:00:01,136 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 07:00:01,156 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 08:00:00 UTC)" executed successfully 2026-08-20 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 09:00:00 UTC)" (scheduled at 2026-08-20 08:00:00+00:00) 2026-08-20 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-20 08:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 08:00:01,146 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 08:00:01,149 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 08:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 08:00:01,152 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 08:00:01,192 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 08:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 09:00:00 UTC)" executed successfully 2026-08-20 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 10:00:00 UTC)" (scheduled at 2026-08-20 09:00:00+00:00) 2026-08-20 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-20 09:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 09:00:01,549 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 09:00:01,552 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 09:00:01,554 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 09:00:01,555 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 09:00:01,591 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 09:00:01,614 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 10:00:00 UTC)" executed successfully 2026-08-20 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 11:00:00 UTC)" (scheduled at 2026-08-20 10:00:00+00:00) 2026-08-20 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-20 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 10:00:02,497 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 10:00:02,499 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 10:00:02,503 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 10:00:02,503 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 10:00:02,549 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 10:00:02,573 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 11:00:00 UTC)" executed successfully 2026-08-20 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 12:00:00 UTC)" (scheduled at 2026-08-20 11:00:00+00:00) 2026-08-20 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-20 11:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 11:00:02,011 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 11:00:02,019 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 11:00:02,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 11:00:02,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 11:00:02,103 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 11:00:02,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 12:00:00 UTC)" executed successfully 2026-08-20 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 13:00:00 UTC)" (scheduled at 2026-08-20 12:00:00+00:00) 2026-08-20 12:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-20 12:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 12:00:01,257 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 12:00:01,259 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 12:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 12:00:01,263 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 12:00:01,296 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 12:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 13:00:00 UTC)" executed successfully 2026-08-20 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 14:00:00 UTC)" (scheduled at 2026-08-20 13:00:00+00:00) 2026-08-20 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-20 13:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 13:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 13:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 13:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 13:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 13:00:01,241 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 13:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 14:00:00 UTC)" executed successfully 2026-08-20 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 15:00:00 UTC)" (scheduled at 2026-08-20 14:00:00+00:00) 2026-08-20 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-20 14:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 14:00:02,184 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 14:00:02,186 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 14:00:02,190 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 14:00:02,191 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 14:00:02,252 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 14:00:02,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 15:00:00 UTC)" executed successfully 2026-08-20 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 16:00:00 UTC)" (scheduled at 2026-08-20 15:00:00+00:00) 2026-08-20 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-20 15:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 15:00:01,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 15:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 15:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 15:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 15:00:01,303 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 15:00:01,318 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 16:00:00 UTC)" executed successfully 2026-08-20 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 17:00:00 UTC)" (scheduled at 2026-08-20 16:00:00+00:00) 2026-08-20 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-20 16:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 16:00:01,734 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 16:00:01,736 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 16:00:01,739 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 16:00:01,739 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 16:00:01,785 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 16:00:01,807 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 17:00:00 UTC)" executed successfully 2026-08-20 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 18:00:00 UTC)" (scheduled at 2026-08-20 17:00:00+00:00) 2026-08-20 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-20 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 17:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 17:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 17:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 17:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 17:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 17:00:01,310 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 18:00:00 UTC)" executed successfully 2026-08-20 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 19:00:00 UTC)" (scheduled at 2026-08-20 18:00:00+00:00) 2026-08-20 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-20 18:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 18:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 18:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 18:00:01,243 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 18:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 18:00:01,292 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 18:00:01,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 19:00:00 UTC)" executed successfully 2026-08-20 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 20:00:00 UTC)" (scheduled at 2026-08-20 19:00:00+00:00) 2026-08-20 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-20 19:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 19:00:01,426 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 19:00:01,427 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 19:00:01,431 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 19:00:01,431 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 19:00:01,480 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 19:00:01,506 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 20:00:00 UTC)" executed successfully 2026-08-20 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 21:00:00 UTC)" (scheduled at 2026-08-20 20:00:00+00:00) 2026-08-20 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-20 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 20:00:02,039 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 20:00:02,041 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 20:00:02,045 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 20:00:02,046 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 20:00:02,105 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 20:00:02,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 21:00:00 UTC)" executed successfully 2026-08-20 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 22:00:00 UTC)" (scheduled at 2026-08-20 21:00:00+00:00) 2026-08-20 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-20 21:00:00,105 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 21:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 21:00:01,025 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 21:00:01,028 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 21:00:01,028 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 21:00:01,077 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 21:00:01,101 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 22:00:00 UTC)" executed successfully 2026-08-20 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 23:00:00 UTC)" (scheduled at 2026-08-20 22:00:00+00:00) 2026-08-20 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-20 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 22:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 22:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 22:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 22:00:01,133 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 22:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 22:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-20 23:00:00 UTC)" executed successfully 2026-08-20 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 00:00:00 UTC)" (scheduled at 2026-08-20 23:00:00+00:00) 2026-08-20 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-20 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-20 23:00:01,153 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-20 23:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-08-20 23:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-20 23:00:01,159 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-20 23:00:01,210 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-20 23:00:01,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 00:00:00 UTC)" executed successfully 2026-08-21 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 01:00:00 UTC)" (scheduled at 2026-08-21 00:00:00+00:00) 2026-08-21 00:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-21 00:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 00:00:01,424 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 00:00:01,426 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 00:00:01,429 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 00:00:01,429 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 00:00:01,481 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 00:00:01,504 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 01:00:00 UTC)" executed successfully 2026-08-21 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 02:00:00 UTC)" (scheduled at 2026-08-21 01:00:00+00:00) 2026-08-21 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-21 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 01:00:01,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 01:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 01:00:01,269 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 01:00:01,270 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 01:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 01:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 02:00:00 UTC)" executed successfully 2026-08-21 02:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 03:00:00 UTC)" (scheduled at 2026-08-21 02:00:00+00:00) 2026-08-21 02:00:00,017 INFO [fb-sync] Starting FB sync... 2026-08-21 02:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 02:00:01,111 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 02:00:01,113 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 02:00:01,116 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 02:00:01,116 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 02:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 02:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 03:00:00 UTC)" executed successfully 2026-08-21 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 04:00:00 UTC)" (scheduled at 2026-08-21 03:00:00+00:00) 2026-08-21 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-21 03:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 03:00:01,561 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 03:00:01,562 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 03:00:01,565 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 03:00:01,565 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 03:00:01,611 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 03:00:01,632 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 04:00:00 UTC)" executed successfully 2026-08-21 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 05:00:00 UTC)" (scheduled at 2026-08-21 04:00:00+00:00) 2026-08-21 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-21 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 04:00:01,752 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 04:00:01,754 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 04:00:01,758 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 04:00:01,759 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 04:00:01,817 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 04:00:01,839 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 05:00:00 UTC)" executed successfully 2026-08-21 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 06:00:00 UTC)" (scheduled at 2026-08-21 05:00:00+00:00) 2026-08-21 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-21 05:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 05:00:01,677 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 05:00:01,679 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 05:00:01,683 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 05:00:01,683 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 05:00:01,734 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 05:00:01,757 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 06:00:00 UTC)" executed successfully 2026-08-21 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 07:00:00 UTC)" (scheduled at 2026-08-21 06:00:00+00:00) 2026-08-21 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-21 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 06:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 06:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 06:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 06:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 06:00:01,241 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 06:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 07:00:00 UTC)" executed successfully 2026-08-21 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 08:00:00 UTC)" (scheduled at 2026-08-21 07:00:00+00:00) 2026-08-21 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-21 07:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 07:00:01,559 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 07:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 07:00:01,563 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 07:00:01,564 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 07:00:01,853 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 07:00:01,877 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 08:00:00 UTC)" executed successfully 2026-08-21 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 09:00:00 UTC)" (scheduled at 2026-08-21 08:00:00+00:00) 2026-08-21 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-21 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 08:00:01,322 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 08:00:01,324 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 08:00:01,328 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 08:00:01,328 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 08:00:01,371 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 08:00:01,396 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 09:00:00 UTC)" executed successfully 2026-08-21 09:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 10:00:00 UTC)" (scheduled at 2026-08-21 09:00:00+00:00) 2026-08-21 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-21 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 09:00:01,074 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 09:00:01,076 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 09:00:01,078 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 09:00:01,078 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 09:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 09:00:01,162 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 10:00:00 UTC)" executed successfully 2026-08-21 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 11:00:00 UTC)" (scheduled at 2026-08-21 10:00:00+00:00) 2026-08-21 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-21 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 10:00:01,608 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 10:00:01,610 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 10:00:01,615 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 10:00:01,615 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 10:00:01,679 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 10:00:01,708 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 11:00:00 UTC)" executed successfully 2026-08-21 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 12:00:00 UTC)" (scheduled at 2026-08-21 11:00:00+00:00) 2026-08-21 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-21 11:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 11:00:01,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 11:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 11:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 11:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 11:00:01,238 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 11:00:01,266 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 12:00:00 UTC)" executed successfully 2026-08-21 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 13:00:00 UTC)" (scheduled at 2026-08-21 12:00:00+00:00) 2026-08-21 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-21 12:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 12:00:01,450 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 12:00:01,452 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 12:00:01,455 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 12:00:01,455 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 12:00:01,510 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 12:00:01,535 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 13:00:00 UTC)" executed successfully 2026-08-21 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 14:00:00 UTC)" (scheduled at 2026-08-21 13:00:00+00:00) 2026-08-21 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-21 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 13:00:01,070 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 13:00:01,072 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 13:00:01,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 13:00:01,077 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 13:00:01,140 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 13:00:01,166 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 14:00:00 UTC)" executed successfully 2026-08-21 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 15:00:00 UTC)" (scheduled at 2026-08-21 14:00:00+00:00) 2026-08-21 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-21 14:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 14:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 14:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 14:00:01,175 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 14:00:01,175 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 14:00:01,213 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 14:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 15:00:00 UTC)" executed successfully 2026-08-21 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 16:00:00 UTC)" (scheduled at 2026-08-21 15:00:00+00:00) 2026-08-21 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-21 15:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 15:00:01,513 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 15:00:01,516 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 15:00:01,518 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 15:00:01,518 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 15:00:01,563 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 15:00:01,588 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 16:00:00 UTC)" executed successfully 2026-08-21 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 17:00:00 UTC)" (scheduled at 2026-08-21 16:00:00+00:00) 2026-08-21 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-21 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 16:00:10,646 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 16:00:10,649 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 16:00:10,653 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 16:00:10,653 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 16:00:10,690 INFO [fb-sync] Sync done: 0 new posts in 11s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 16:00:10,706 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 17:00:00 UTC)" executed successfully 2026-08-21 17:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 18:00:00 UTC)" (scheduled at 2026-08-21 17:00:00+00:00) 2026-08-21 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-21 17:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 17:00:01,417 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 17:00:01,418 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 17:00:01,422 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 17:00:01,422 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 17:00:01,467 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 17:00:01,484 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 18:00:00 UTC)" executed successfully 2026-08-21 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 19:00:00 UTC)" (scheduled at 2026-08-21 18:00:00+00:00) 2026-08-21 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-21 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 18:00:01,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 18:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 18:00:01,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 18:00:01,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 18:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 18:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 19:00:00 UTC)" executed successfully 2026-08-21 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 20:00:00 UTC)" (scheduled at 2026-08-21 19:00:00+00:00) 2026-08-21 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-21 19:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 19:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 19:00:01,225 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 19:00:01,229 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 19:00:01,229 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 19:00:01,302 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 19:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 20:00:00 UTC)" executed successfully 2026-08-21 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 21:00:00 UTC)" (scheduled at 2026-08-21 20:00:00+00:00) 2026-08-21 20:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-21 20:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 20:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 20:00:01,144 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 20:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 20:00:01,147 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 20:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 20:00:01,215 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 21:00:00 UTC)" executed successfully 2026-08-21 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 22:00:00 UTC)" (scheduled at 2026-08-21 21:00:00+00:00) 2026-08-21 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-21 21:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 21:00:01,778 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 21:00:01,780 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 21:00:01,783 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 21:00:01,783 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 21:00:01,831 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 21:00:01,852 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 22:00:00 UTC)" executed successfully 2026-08-21 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 23:00:00 UTC)" (scheduled at 2026-08-21 22:00:00+00:00) 2026-08-21 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-21 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 22:00:01,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 22:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 22:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 22:00:01,095 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 22:00:01,144 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 22:00:01,169 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-21 23:00:00 UTC)" executed successfully 2026-08-21 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 00:00:00 UTC)" (scheduled at 2026-08-21 23:00:00+00:00) 2026-08-21 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-21 23:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-21 23:00:01,043 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-21 23:00:01,044 INFO [fb-sync.worker] Scraped 50 posts 2026-08-21 23:00:01,048 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-21 23:00:01,048 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-21 23:00:01,089 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-21 23:00:01,107 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 00:00:00 UTC)" executed successfully 2026-08-22 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 01:00:00 UTC)" (scheduled at 2026-08-22 00:00:00+00:00) 2026-08-22 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-22 00:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 00:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 00:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 00:00:01,087 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 00:00:01,088 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 00:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 00:00:01,159 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 01:00:00 UTC)" executed successfully 2026-08-22 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 02:00:00 UTC)" (scheduled at 2026-08-22 01:00:00+00:00) 2026-08-22 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-22 01:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 01:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 01:00:01,040 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 01:00:01,042 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 01:00:01,042 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 01:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 01:00:01,104 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 02:00:00 UTC)" executed successfully 2026-08-22 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 03:00:00 UTC)" (scheduled at 2026-08-22 02:00:00+00:00) 2026-08-22 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-22 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 02:00:01,977 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 02:00:01,980 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 02:00:01,984 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 02:00:01,984 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 02:00:02,039 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 02:00:02,063 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 03:00:00 UTC)" executed successfully 2026-08-22 03:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 04:00:00 UTC)" (scheduled at 2026-08-22 03:00:00+00:00) 2026-08-22 03:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-22 03:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 03:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 03:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 03:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 03:00:01,212 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 03:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 03:00:01,283 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 04:00:00 UTC)" executed successfully 2026-08-22 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 05:00:00 UTC)" (scheduled at 2026-08-22 04:00:00+00:00) 2026-08-22 04:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-22 04:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 04:00:01,481 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 04:00:01,483 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 04:00:01,486 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 04:00:01,486 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 04:00:01,542 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 04:00:01,566 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 05:00:00 UTC)" executed successfully 2026-08-22 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 06:00:00 UTC)" (scheduled at 2026-08-22 05:00:00+00:00) 2026-08-22 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 05:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 05:00:01,992 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 05:00:01,994 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 05:00:01,998 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 05:00:01,998 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 05:00:02,052 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 05:00:02,079 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 06:00:00 UTC)" executed successfully 2026-08-22 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 07:00:00 UTC)" (scheduled at 2026-08-22 06:00:00+00:00) 2026-08-22 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 06:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 06:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 06:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 06:00:01,270 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 06:00:01,270 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 06:00:01,305 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 06:00:01,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 07:00:00 UTC)" executed successfully 2026-08-22 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 08:00:00 UTC)" (scheduled at 2026-08-22 07:00:00+00:00) 2026-08-22 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-22 07:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 07:00:01,512 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 07:00:01,513 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 07:00:01,515 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 07:00:01,515 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 07:00:01,559 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 07:00:01,583 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 08:00:00 UTC)" executed successfully 2026-08-22 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 09:00:00 UTC)" (scheduled at 2026-08-22 08:00:00+00:00) 2026-08-22 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 08:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 08:00:00,962 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 08:00:00,964 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 08:00:00,966 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 08:00:00,966 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 08:00:00,999 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 08:00:01,017 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 09:00:00 UTC)" executed successfully 2026-08-22 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 10:00:00 UTC)" (scheduled at 2026-08-22 09:00:00+00:00) 2026-08-22 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 09:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 09:00:01,110 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 09:00:01,112 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 09:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 09:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 09:00:01,164 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 09:00:01,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 10:00:00 UTC)" executed successfully 2026-08-22 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 11:00:00 UTC)" (scheduled at 2026-08-22 10:00:00+00:00) 2026-08-22 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-22 10:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 10:00:01,323 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 10:00:01,325 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 10:00:01,327 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 10:00:01,328 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 10:00:01,397 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 10:00:01,432 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 11:00:00 UTC)" executed successfully 2026-08-22 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 12:00:00 UTC)" (scheduled at 2026-08-22 11:00:00+00:00) 2026-08-22 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-22 11:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 11:00:02,221 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 11:00:02,222 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 11:00:02,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 11:00:02,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 11:00:02,282 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 11:00:02,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 12:00:00 UTC)" executed successfully 2026-08-22 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 13:00:00 UTC)" (scheduled at 2026-08-22 12:00:00+00:00) 2026-08-22 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-22 12:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 12:00:01,104 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 12:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 12:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 12:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 12:00:01,143 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 12:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 13:00:00 UTC)" executed successfully 2026-08-22 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 14:00:00 UTC)" (scheduled at 2026-08-22 13:00:00+00:00) 2026-08-22 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-22 13:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 13:00:01,026 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 13:00:01,028 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 13:00:01,032 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 13:00:01,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 13:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 13:00:01,102 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 14:00:00 UTC)" executed successfully 2026-08-22 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 15:00:00 UTC)" (scheduled at 2026-08-22 14:00:00+00:00) 2026-08-22 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-22 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 14:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 14:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 14:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 14:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 14:00:01,159 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 14:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 15:00:00 UTC)" executed successfully 2026-08-22 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 16:00:00 UTC)" (scheduled at 2026-08-22 15:00:00+00:00) 2026-08-22 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 15:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 15:00:01,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 15:00:01,121 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 15:00:01,124 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 15:00:01,124 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 15:00:01,182 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 15:00:01,209 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 16:00:00 UTC)" executed successfully 2026-08-22 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 17:00:00 UTC)" (scheduled at 2026-08-22 16:00:00+00:00) 2026-08-22 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-22 16:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 16:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 16:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 16:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 16:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 16:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 16:00:01,226 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 17:00:00 UTC)" executed successfully 2026-08-22 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 18:00:00 UTC)" (scheduled at 2026-08-22 17:00:00+00:00) 2026-08-22 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-22 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 17:00:01,284 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 17:00:01,286 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 17:00:01,288 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 17:00:01,288 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 17:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 17:00:01,369 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 18:00:00 UTC)" executed successfully 2026-08-22 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 19:00:00 UTC)" (scheduled at 2026-08-22 18:00:00+00:00) 2026-08-22 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-22 18:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 18:00:01,603 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 18:00:01,605 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 18:00:01,610 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 18:00:01,610 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 18:00:01,664 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 18:00:01,685 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 19:00:00 UTC)" executed successfully 2026-08-22 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 20:00:00 UTC)" (scheduled at 2026-08-22 19:00:00+00:00) 2026-08-22 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-22 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 19:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 19:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 19:00:01,150 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 19:00:01,150 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 19:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 19:00:01,209 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 20:00:00 UTC)" executed successfully 2026-08-22 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 21:00:00 UTC)" (scheduled at 2026-08-22 20:00:00+00:00) 2026-08-22 20:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-22 20:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 20:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 20:00:01,123 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 20:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 20:00:01,128 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 20:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 20:00:01,199 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 21:00:00 UTC)" executed successfully 2026-08-22 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 22:00:00 UTC)" (scheduled at 2026-08-22 21:00:00+00:00) 2026-08-22 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-22 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 21:00:01,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 21:00:01,032 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 21:00:01,034 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 21:00:01,034 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 21:00:01,068 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 21:00:01,086 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 22:00:00 UTC)" executed successfully 2026-08-22 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 23:00:00 UTC)" (scheduled at 2026-08-22 22:00:00+00:00) 2026-08-22 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-22 22:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 22:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 22:00:01,230 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 22:00:01,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 22:00:01,233 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 22:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 22:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-22 23:00:00 UTC)" executed successfully 2026-08-22 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 00:00:00 UTC)" (scheduled at 2026-08-22 23:00:00+00:00) 2026-08-22 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-22 23:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-22 23:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-22 23:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-08-22 23:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-22 23:00:01,150 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-22 23:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-22 23:00:01,198 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 00:00:00 UTC)" executed successfully 2026-08-23 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 01:00:00 UTC)" (scheduled at 2026-08-23 00:00:00+00:00) 2026-08-23 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-23 00:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 00:00:01,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 00:00:01,049 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 00:00:01,053 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 00:00:01,053 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 00:00:01,098 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 00:00:01,116 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 01:00:00 UTC)" executed successfully 2026-08-23 01:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 02:00:00 UTC)" (scheduled at 2026-08-23 01:00:00+00:00) 2026-08-23 01:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-23 01:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 01:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 01:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 01:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 01:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 01:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 01:00:01,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 02:00:00 UTC)" executed successfully 2026-08-23 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 03:00:00 UTC)" (scheduled at 2026-08-23 02:00:00+00:00) 2026-08-23 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-23 02:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 02:00:01,081 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 02:00:01,083 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 02:00:01,085 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 02:00:01,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 02:00:01,144 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 02:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 03:00:00 UTC)" executed successfully 2026-08-23 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 04:00:00 UTC)" (scheduled at 2026-08-23 03:00:00+00:00) 2026-08-23 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-23 03:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 03:00:01,274 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 03:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 03:00:01,278 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 03:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 03:00:01,333 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 03:00:01,360 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 04:00:00 UTC)" executed successfully 2026-08-23 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 05:00:00 UTC)" (scheduled at 2026-08-23 04:00:00+00:00) 2026-08-23 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-23 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 04:00:01,933 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 04:00:01,935 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 04:00:01,939 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 04:00:01,939 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 04:00:01,990 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 04:00:02,019 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 05:00:00 UTC)" executed successfully 2026-08-23 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 06:00:00 UTC)" (scheduled at 2026-08-23 05:00:00+00:00) 2026-08-23 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-23 05:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 05:00:00,976 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 05:00:00,977 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 05:00:00,981 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 05:00:00,981 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 05:00:01,016 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 05:00:01,036 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 06:00:00 UTC)" executed successfully 2026-08-23 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 07:00:00 UTC)" (scheduled at 2026-08-23 06:00:00+00:00) 2026-08-23 06:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-23 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 06:00:01,208 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 06:00:01,210 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 06:00:01,213 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 06:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 06:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 06:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 07:00:00 UTC)" executed successfully 2026-08-23 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 08:00:00 UTC)" (scheduled at 2026-08-23 07:00:00+00:00) 2026-08-23 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-23 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 07:00:00,955 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 07:00:00,956 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 07:00:00,959 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 07:00:00,960 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 07:00:01,015 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 07:00:01,038 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 08:00:00 UTC)" executed successfully 2026-08-23 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 09:00:00 UTC)" (scheduled at 2026-08-23 08:00:00+00:00) 2026-08-23 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-23 08:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 08:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 08:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 08:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 08:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 08:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 08:00:01,215 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 09:00:00 UTC)" executed successfully 2026-08-23 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 10:00:00 UTC)" (scheduled at 2026-08-23 09:00:00+00:00) 2026-08-23 09:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-23 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 09:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 09:00:01,194 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 09:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 09:00:01,198 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 09:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 09:00:01,282 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 10:00:00 UTC)" executed successfully 2026-08-23 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 11:00:00 UTC)" (scheduled at 2026-08-23 10:00:00+00:00) 2026-08-23 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-23 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 10:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 10:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 10:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 10:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 10:00:01,276 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 10:00:01,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 11:00:00 UTC)" executed successfully 2026-08-23 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 12:00:00 UTC)" (scheduled at 2026-08-23 11:00:00+00:00) 2026-08-23 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-23 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 11:00:01,337 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 11:00:01,339 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 11:00:01,342 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 11:00:01,343 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 11:00:01,401 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 11:00:01,429 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 12:00:00 UTC)" executed successfully 2026-08-23 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 13:00:00 UTC)" (scheduled at 2026-08-23 12:00:00+00:00) 2026-08-23 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-23 12:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 12:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 12:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 12:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 12:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 12:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 12:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 13:00:00 UTC)" executed successfully 2026-08-23 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 14:00:00 UTC)" (scheduled at 2026-08-23 13:00:00+00:00) 2026-08-23 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-23 13:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 13:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 13:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 13:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 13:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 13:00:01,243 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 13:00:01,270 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 14:00:00 UTC)" executed successfully 2026-08-23 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 15:00:00 UTC)" (scheduled at 2026-08-23 14:00:00+00:00) 2026-08-23 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-23 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 14:00:01,675 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 14:00:01,676 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 14:00:01,679 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 14:00:01,680 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 14:00:01,735 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 14:00:01,757 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 15:00:00 UTC)" executed successfully 2026-08-23 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 16:00:00 UTC)" (scheduled at 2026-08-23 15:00:00+00:00) 2026-08-23 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-23 15:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 15:00:01,182 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 15:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 15:00:01,187 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 15:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 15:00:01,262 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 15:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 16:00:00 UTC)" executed successfully 2026-08-23 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 17:00:00 UTC)" (scheduled at 2026-08-23 16:00:00+00:00) 2026-08-23 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-23 16:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 16:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 16:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 16:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 16:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 16:00:01,323 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 16:00:01,345 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 17:00:00 UTC)" executed successfully 2026-08-23 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 18:00:00 UTC)" (scheduled at 2026-08-23 17:00:00+00:00) 2026-08-23 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-23 17:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 17:00:02,461 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 17:00:02,463 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 17:00:02,467 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 17:00:02,467 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 17:00:02,548 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 17:00:02,579 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 18:00:00 UTC)" executed successfully 2026-08-23 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 19:00:00 UTC)" (scheduled at 2026-08-23 18:00:00+00:00) 2026-08-23 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-23 18:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 18:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 18:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 18:00:01,270 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 18:00:01,270 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 18:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 18:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 19:00:00 UTC)" executed successfully 2026-08-23 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 20:00:00 UTC)" (scheduled at 2026-08-23 19:00:00+00:00) 2026-08-23 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-23 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 19:00:02,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 19:00:02,204 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 19:00:02,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 19:00:02,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 19:00:02,260 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 19:00:02,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 20:00:00 UTC)" executed successfully 2026-08-23 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 21:00:00 UTC)" (scheduled at 2026-08-23 20:00:00+00:00) 2026-08-23 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-23 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 20:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 20:00:01,157 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 20:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 20:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 20:00:01,205 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 20:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 21:00:00 UTC)" executed successfully 2026-08-23 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 22:00:00 UTC)" (scheduled at 2026-08-23 21:00:00+00:00) 2026-08-23 21:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-23 21:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 21:00:01,319 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 21:00:01,320 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 21:00:01,324 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 21:00:01,324 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 21:00:01,372 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 21:00:01,396 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 22:00:00 UTC)" executed successfully 2026-08-23 22:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 23:00:00 UTC)" (scheduled at 2026-08-23 22:00:00+00:00) 2026-08-23 22:00:00,003 INFO [fb-sync] Starting FB sync... 2026-08-23 22:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 22:00:01,436 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 22:00:01,439 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 22:00:01,444 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 22:00:01,445 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 22:00:01,524 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 22:00:01,552 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-23 23:00:00 UTC)" executed successfully 2026-08-23 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 00:00:00 UTC)" (scheduled at 2026-08-23 23:00:00+00:00) 2026-08-23 23:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-23 23:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-23 23:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-23 23:00:01,125 INFO [fb-sync.worker] Scraped 50 posts 2026-08-23 23:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-23 23:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-23 23:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-23 23:00:01,193 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 00:00:00 UTC)" executed successfully 2026-08-24 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 01:00:00 UTC)" (scheduled at 2026-08-24 00:00:00+00:00) 2026-08-24 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-24 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 00:00:01,196 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 00:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 00:00:01,205 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 00:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 00:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 00:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 01:00:00 UTC)" executed successfully 2026-08-24 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 02:00:00 UTC)" (scheduled at 2026-08-24 01:00:00+00:00) 2026-08-24 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-24 01:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 01:00:02,492 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 01:00:02,494 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 01:00:02,498 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 01:00:02,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 01:00:02,563 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 01:00:02,594 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 02:00:00 UTC)" executed successfully 2026-08-24 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 03:00:00 UTC)" (scheduled at 2026-08-24 02:00:00+00:00) 2026-08-24 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-24 02:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 02:00:01,843 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 02:00:01,845 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 02:00:01,849 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 02:00:01,849 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 02:00:01,908 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 02:00:01,931 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 03:00:00 UTC)" executed successfully 2026-08-24 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 04:00:00 UTC)" (scheduled at 2026-08-24 03:00:00+00:00) 2026-08-24 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-24 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 03:00:01,644 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 03:00:01,646 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 03:00:01,649 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 03:00:01,649 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 03:00:01,706 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 03:00:01,732 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 04:00:00 UTC)" executed successfully 2026-08-24 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 05:00:00 UTC)" (scheduled at 2026-08-24 04:00:00+00:00) 2026-08-24 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-24 04:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 04:00:01,954 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 04:00:01,956 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 04:00:01,959 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 04:00:01,960 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 04:00:02,010 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 04:00:02,035 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 05:00:00 UTC)" executed successfully 2026-08-24 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 06:00:00 UTC)" (scheduled at 2026-08-24 05:00:00+00:00) 2026-08-24 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-24 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 05:00:01,406 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 05:00:01,408 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 05:00:01,417 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 05:00:01,418 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 05:00:01,477 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 05:00:01,504 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 06:00:00 UTC)" executed successfully 2026-08-24 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 07:00:00 UTC)" (scheduled at 2026-08-24 06:00:00+00:00) 2026-08-24 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-24 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 06:00:01,496 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 06:00:01,497 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 06:00:01,499 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 06:00:01,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 06:00:01,543 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 06:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 07:00:00 UTC)" executed successfully 2026-08-24 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 08:00:00 UTC)" (scheduled at 2026-08-24 07:00:00+00:00) 2026-08-24 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-24 07:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 07:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 07:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 07:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 07:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 07:00:01,140 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 07:00:01,166 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 08:00:00 UTC)" executed successfully 2026-08-24 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 09:00:00 UTC)" (scheduled at 2026-08-24 08:00:00+00:00) 2026-08-24 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-24 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 08:00:01,491 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 08:00:01,492 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 08:00:01,494 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 08:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 08:00:01,544 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 08:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 09:00:00 UTC)" executed successfully 2026-08-24 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 10:00:00 UTC)" (scheduled at 2026-08-24 09:00:00+00:00) 2026-08-24 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-24 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 09:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 09:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 09:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 09:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 09:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 09:00:01,365 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 10:00:00 UTC)" executed successfully 2026-08-24 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 11:00:00 UTC)" (scheduled at 2026-08-24 10:00:00+00:00) 2026-08-24 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-24 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 10:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 10:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 10:00:01,301 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 10:00:01,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 10:00:01,378 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 10:00:01,638 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 11:00:00 UTC)" executed successfully 2026-08-24 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 12:00:00 UTC)" (scheduled at 2026-08-24 11:00:00+00:00) 2026-08-24 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-24 11:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 11:00:01,619 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 11:00:01,621 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 11:00:01,624 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 11:00:01,625 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 11:00:01,679 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 11:00:01,705 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 12:00:00 UTC)" executed successfully 2026-08-24 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 13:00:00 UTC)" (scheduled at 2026-08-24 12:00:00+00:00) 2026-08-24 12:00:00,016 INFO [fb-sync] Starting FB sync... 2026-08-24 12:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 12:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 12:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 12:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 12:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 12:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 12:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 13:00:00 UTC)" executed successfully 2026-08-24 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 14:00:00 UTC)" (scheduled at 2026-08-24 13:00:00+00:00) 2026-08-24 13:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-24 13:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 13:00:01,576 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 13:00:01,578 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 13:00:01,579 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 13:00:01,580 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 13:00:01,639 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 13:00:01,664 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 14:00:00 UTC)" executed successfully 2026-08-24 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 15:00:00 UTC)" (scheduled at 2026-08-24 14:00:00+00:00) 2026-08-24 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-24 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 14:00:01,998 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 14:00:01,999 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 14:00:02,003 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 14:00:02,003 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 14:00:02,061 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 14:00:02,078 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 15:00:00 UTC)" executed successfully 2026-08-24 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 16:00:00 UTC)" (scheduled at 2026-08-24 15:00:00+00:00) 2026-08-24 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-24 15:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 15:00:01,495 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 15:00:01,497 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 15:00:01,500 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 15:00:01,500 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 15:00:01,554 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 15:00:01,580 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 16:00:00 UTC)" executed successfully 2026-08-24 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 17:00:00 UTC)" (scheduled at 2026-08-24 16:00:00+00:00) 2026-08-24 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-24 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 16:00:01,334 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 16:00:01,336 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 16:00:01,340 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 16:00:01,340 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 16:00:01,376 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 16:00:01,391 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 17:00:00 UTC)" executed successfully 2026-08-24 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 18:00:00 UTC)" (scheduled at 2026-08-24 17:00:00+00:00) 2026-08-24 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-24 17:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 17:00:01,760 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 17:00:01,762 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 17:00:01,765 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 17:00:01,765 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 17:00:01,815 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 17:00:01,840 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 18:00:00 UTC)" executed successfully 2026-08-24 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 19:00:00 UTC)" (scheduled at 2026-08-24 18:00:00+00:00) 2026-08-24 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-24 18:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 18:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 18:00:01,218 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 18:00:01,220 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 18:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 18:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 18:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 19:00:00 UTC)" executed successfully 2026-08-24 19:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 20:00:00 UTC)" (scheduled at 2026-08-24 19:00:00+00:00) 2026-08-24 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-24 19:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 19:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 19:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 19:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 19:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 19:00:01,188 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 19:00:01,213 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 20:00:00 UTC)" executed successfully 2026-08-24 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 21:00:00 UTC)" (scheduled at 2026-08-24 20:00:00+00:00) 2026-08-24 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-24 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 20:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 20:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 20:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 20:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 20:00:01,363 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 20:00:01,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 21:00:00 UTC)" executed successfully 2026-08-24 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 22:00:00 UTC)" (scheduled at 2026-08-24 21:00:00+00:00) 2026-08-24 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-24 21:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 21:00:01,088 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 21:00:01,091 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 21:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 21:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 21:00:01,159 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 21:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 22:00:00 UTC)" executed successfully 2026-08-24 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 23:00:00 UTC)" (scheduled at 2026-08-24 22:00:00+00:00) 2026-08-24 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-24 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 22:00:00,963 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 22:00:00,965 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 22:00:00,968 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 22:00:00,968 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 22:00:01,009 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 22:00:01,030 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-24 23:00:00 UTC)" executed successfully 2026-08-24 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 00:00:00 UTC)" (scheduled at 2026-08-24 23:00:00+00:00) 2026-08-24 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-24 23:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-24 23:00:01,095 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-24 23:00:01,097 INFO [fb-sync.worker] Scraped 50 posts 2026-08-24 23:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-24 23:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-24 23:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-24 23:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 00:00:00 UTC)" executed successfully 2026-08-25 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 01:00:00 UTC)" (scheduled at 2026-08-25 00:00:00+00:00) 2026-08-25 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-25 00:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 00:00:01,080 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 00:00:01,082 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 00:00:01,085 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 00:00:01,085 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 00:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 00:00:01,172 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 01:00:00 UTC)" executed successfully 2026-08-25 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 02:00:00 UTC)" (scheduled at 2026-08-25 01:00:00+00:00) 2026-08-25 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-25 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 01:00:01,678 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 01:00:01,681 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 01:00:01,684 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 01:00:01,685 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 01:00:01,757 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 01:00:01,786 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 02:00:00 UTC)" executed successfully 2026-08-25 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 03:00:00 UTC)" (scheduled at 2026-08-25 02:00:00+00:00) 2026-08-25 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-25 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 02:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 02:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 02:00:01,199 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 02:00:01,199 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 02:00:01,246 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 02:00:01,269 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 03:00:00 UTC)" executed successfully 2026-08-25 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 04:00:00 UTC)" (scheduled at 2026-08-25 03:00:00+00:00) 2026-08-25 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-25 03:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 03:00:01,007 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 03:00:01,009 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 03:00:01,012 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 03:00:01,012 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 03:00:01,056 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 03:00:01,078 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 04:00:00 UTC)" executed successfully 2026-08-25 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 05:00:00 UTC)" (scheduled at 2026-08-25 04:00:00+00:00) 2026-08-25 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-25 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 04:00:01,741 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 04:00:01,743 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 04:00:01,747 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 04:00:01,747 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 04:00:01,813 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 04:00:01,843 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 05:00:00 UTC)" executed successfully 2026-08-25 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 06:00:00 UTC)" (scheduled at 2026-08-25 05:00:00+00:00) 2026-08-25 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-25 05:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 05:00:01,795 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 05:00:01,797 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 05:00:01,800 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 05:00:01,800 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 05:00:01,870 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 05:00:01,890 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 06:00:00 UTC)" executed successfully 2026-08-25 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 07:00:00 UTC)" (scheduled at 2026-08-25 06:00:00+00:00) 2026-08-25 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-25 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 06:00:01,357 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 06:00:01,359 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 06:00:01,362 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 06:00:01,362 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 06:00:01,423 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 06:00:01,449 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 07:00:00 UTC)" executed successfully 2026-08-25 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 08:00:00 UTC)" (scheduled at 2026-08-25 07:00:00+00:00) 2026-08-25 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-25 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 07:00:01,069 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 07:00:01,071 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 07:00:01,074 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 07:00:01,074 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 07:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 07:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 08:00:00 UTC)" executed successfully 2026-08-25 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 09:00:00 UTC)" (scheduled at 2026-08-25 08:00:00+00:00) 2026-08-25 08:00:00,016 INFO [fb-sync] Starting FB sync... 2026-08-25 08:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 08:00:02,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 08:00:02,123 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 08:00:02,126 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 08:00:02,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 08:00:02,185 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 08:00:02,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 09:00:00 UTC)" executed successfully 2026-08-25 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 10:00:00 UTC)" (scheduled at 2026-08-25 09:00:00+00:00) 2026-08-25 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-25 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 09:00:01,326 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 09:00:01,327 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 09:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 09:00:01,330 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 09:00:01,385 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 09:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 10:00:00 UTC)" executed successfully 2026-08-25 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 11:00:00 UTC)" (scheduled at 2026-08-25 10:00:00+00:00) 2026-08-25 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-25 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 10:00:01,280 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 10:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 10:00:01,285 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 10:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 10:00:01,340 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 10:00:01,360 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 11:00:00 UTC)" executed successfully 2026-08-25 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 12:00:00 UTC)" (scheduled at 2026-08-25 11:00:00+00:00) 2026-08-25 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-25 11:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 11:00:01,198 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 11:00:01,199 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 11:00:01,201 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 11:00:01,201 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 11:00:01,244 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 11:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 12:00:00 UTC)" executed successfully 2026-08-25 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 13:00:00 UTC)" (scheduled at 2026-08-25 12:00:00+00:00) 2026-08-25 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-25 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 12:00:01,246 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 12:00:01,248 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 12:00:01,251 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 12:00:01,252 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 12:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 12:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 13:00:00 UTC)" executed successfully 2026-08-25 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 14:00:00 UTC)" (scheduled at 2026-08-25 13:00:00+00:00) 2026-08-25 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-25 13:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 13:00:01,077 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 13:00:01,079 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 13:00:01,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 13:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 13:00:01,125 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 13:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 14:00:00 UTC)" executed successfully 2026-08-25 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 15:00:00 UTC)" (scheduled at 2026-08-25 14:00:00+00:00) 2026-08-25 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-25 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 14:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 14:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 14:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 14:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 14:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 14:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 15:00:00 UTC)" executed successfully 2026-08-25 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 16:00:00 UTC)" (scheduled at 2026-08-25 15:00:00+00:00) 2026-08-25 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-25 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 15:00:01,089 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 15:00:01,091 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 15:00:01,094 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 15:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 15:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 15:00:01,179 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 16:00:00 UTC)" executed successfully 2026-08-25 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 17:00:00 UTC)" (scheduled at 2026-08-25 16:00:00+00:00) 2026-08-25 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-25 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 16:00:01,542 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 16:00:01,544 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 16:00:01,547 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 16:00:01,547 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 16:00:01,597 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 16:00:01,623 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 17:00:00 UTC)" executed successfully 2026-08-25 17:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 18:00:00 UTC)" (scheduled at 2026-08-25 17:00:00+00:00) 2026-08-25 17:00:00,018 INFO [fb-sync] Starting FB sync... 2026-08-25 17:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 17:00:01,371 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 17:00:01,372 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 17:00:01,375 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 17:00:01,375 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 17:00:01,426 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 17:00:01,460 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 18:00:00 UTC)" executed successfully 2026-08-25 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 19:00:00 UTC)" (scheduled at 2026-08-25 18:00:00+00:00) 2026-08-25 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-25 18:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 18:00:02,329 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 18:00:02,330 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 18:00:02,334 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 18:00:02,335 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 18:00:02,383 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 18:00:02,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 19:00:00 UTC)" executed successfully 2026-08-25 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 20:00:00 UTC)" (scheduled at 2026-08-25 19:00:00+00:00) 2026-08-25 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-25 19:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 19:00:01,331 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 19:00:01,333 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 19:00:01,336 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 19:00:01,336 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 19:00:01,390 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 19:00:01,447 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 20:00:00 UTC)" executed successfully 2026-08-25 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 21:00:00 UTC)" (scheduled at 2026-08-25 20:00:00+00:00) 2026-08-25 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-25 20:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 20:00:01,372 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 20:00:01,374 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 20:00:01,376 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 20:00:01,376 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 20:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 20:00:01,453 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 21:00:00 UTC)" executed successfully 2026-08-25 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 22:00:00 UTC)" (scheduled at 2026-08-25 21:00:00+00:00) 2026-08-25 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-25 21:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 21:00:01,065 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 21:00:01,067 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 21:00:01,070 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 21:00:01,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 21:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 21:00:01,134 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 22:00:00 UTC)" executed successfully 2026-08-25 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 23:00:00 UTC)" (scheduled at 2026-08-25 22:00:00+00:00) 2026-08-25 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-25 22:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 22:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 22:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 22:00:01,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 22:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 22:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 22:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-25 23:00:00 UTC)" executed successfully 2026-08-25 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 00:00:00 UTC)" (scheduled at 2026-08-25 23:00:00+00:00) 2026-08-25 23:00:00,022 INFO [fb-sync] Starting FB sync... 2026-08-25 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-25 23:00:02,055 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-25 23:00:02,057 INFO [fb-sync.worker] Scraped 50 posts 2026-08-25 23:00:02,060 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-25 23:00:02,061 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-25 23:00:02,121 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-25 23:00:02,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 00:00:00 UTC)" executed successfully 2026-08-26 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 01:00:00 UTC)" (scheduled at 2026-08-26 00:00:00+00:00) 2026-08-26 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-26 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 00:00:02,417 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 00:00:02,419 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 00:00:02,422 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 00:00:02,422 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 00:00:02,484 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 00:00:02,514 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 01:00:00 UTC)" executed successfully 2026-08-26 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 02:00:00 UTC)" (scheduled at 2026-08-26 01:00:00+00:00) 2026-08-26 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 01:00:01,386 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 01:00:01,387 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 01:00:01,391 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 01:00:01,391 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 01:00:01,437 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 01:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 02:00:00 UTC)" executed successfully 2026-08-26 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 03:00:00 UTC)" (scheduled at 2026-08-26 02:00:00+00:00) 2026-08-26 02:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-26 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 02:00:01,286 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 02:00:01,290 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 02:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 02:00:01,297 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 02:00:01,362 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 02:00:01,383 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 03:00:00 UTC)" executed successfully 2026-08-26 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 04:00:00 UTC)" (scheduled at 2026-08-26 03:00:00+00:00) 2026-08-26 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-26 03:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 03:00:01,244 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 03:00:01,246 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 03:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 03:00:01,249 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 03:00:01,309 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 03:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 04:00:00 UTC)" executed successfully 2026-08-26 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 05:00:00 UTC)" (scheduled at 2026-08-26 04:00:00+00:00) 2026-08-26 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-26 04:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 04:00:01,549 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 04:00:01,551 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 04:00:01,554 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 04:00:01,554 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 04:00:01,617 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 04:00:01,634 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 05:00:00 UTC)" executed successfully 2026-08-26 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 06:00:00 UTC)" (scheduled at 2026-08-26 05:00:00+00:00) 2026-08-26 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-26 05:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 05:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 05:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 05:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 05:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 05:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 05:00:01,170 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 06:00:00 UTC)" executed successfully 2026-08-26 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 07:00:00 UTC)" (scheduled at 2026-08-26 06:00:00+00:00) 2026-08-26 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-26 06:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 06:00:01,110 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 06:00:01,112 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 06:00:01,115 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 06:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 06:00:01,167 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 06:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 07:00:00 UTC)" executed successfully 2026-08-26 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 08:00:00 UTC)" (scheduled at 2026-08-26 07:00:00+00:00) 2026-08-26 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 07:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 07:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 07:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 07:00:01,153 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 07:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 07:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 07:00:01,224 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 08:00:00 UTC)" executed successfully 2026-08-26 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 09:00:00 UTC)" (scheduled at 2026-08-26 08:00:00+00:00) 2026-08-26 08:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-26 08:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 08:00:01,320 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 08:00:01,322 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 08:00:01,325 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 08:00:01,325 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 08:00:01,563 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 08:00:01,590 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 09:00:00 UTC)" executed successfully 2026-08-26 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 10:00:00 UTC)" (scheduled at 2026-08-26 09:00:00+00:00) 2026-08-26 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-26 09:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 09:00:01,062 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 09:00:01,064 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 09:00:01,069 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 09:00:01,069 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 09:00:01,140 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 09:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 10:00:00 UTC)" executed successfully 2026-08-26 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 11:00:00 UTC)" (scheduled at 2026-08-26 10:00:00+00:00) 2026-08-26 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-26 10:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 10:00:01,554 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 10:00:01,556 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 10:00:01,560 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 10:00:01,560 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 10:00:01,618 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 10:00:01,646 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 11:00:00 UTC)" executed successfully 2026-08-26 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 12:00:00 UTC)" (scheduled at 2026-08-26 11:00:00+00:00) 2026-08-26 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 11:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 11:00:01,377 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 11:00:01,379 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 11:00:01,383 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 11:00:01,383 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 11:00:01,450 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 11:00:01,476 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 12:00:00 UTC)" executed successfully 2026-08-26 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 13:00:00 UTC)" (scheduled at 2026-08-26 12:00:00+00:00) 2026-08-26 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 12:00:01,624 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 12:00:01,626 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 12:00:01,630 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 12:00:01,630 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 12:00:01,686 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 12:00:01,715 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 13:00:00 UTC)" executed successfully 2026-08-26 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 14:00:00 UTC)" (scheduled at 2026-08-26 13:00:00+00:00) 2026-08-26 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-26 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 13:00:01,231 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 13:00:01,232 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 13:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 13:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 13:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 13:00:01,306 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 14:00:00 UTC)" executed successfully 2026-08-26 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 15:00:00 UTC)" (scheduled at 2026-08-26 14:00:00+00:00) 2026-08-26 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 14:00:01,625 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 14:00:01,627 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 14:00:01,630 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 14:00:01,630 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 14:00:01,680 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 14:00:01,718 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 15:00:00 UTC)" executed successfully 2026-08-26 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 16:00:00 UTC)" (scheduled at 2026-08-26 15:00:00+00:00) 2026-08-26 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 15:00:00,101 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 15:00:01,313 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 15:00:01,316 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 15:00:01,318 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 15:00:01,318 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 15:00:01,432 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 15:00:01,461 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 16:00:00 UTC)" executed successfully 2026-08-26 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 17:00:00 UTC)" (scheduled at 2026-08-26 16:00:00+00:00) 2026-08-26 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-26 16:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 16:00:01,797 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 16:00:01,799 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 16:00:01,803 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 16:00:01,804 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 16:00:01,875 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 16:00:01,901 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 17:00:00 UTC)" executed successfully 2026-08-26 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 18:00:00 UTC)" (scheduled at 2026-08-26 17:00:00+00:00) 2026-08-26 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 17:00:01,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 17:00:01,347 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 17:00:01,351 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 17:00:01,351 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 17:00:01,409 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 17:00:01,436 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 18:00:00 UTC)" executed successfully 2026-08-26 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 19:00:00 UTC)" (scheduled at 2026-08-26 18:00:00+00:00) 2026-08-26 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-26 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 18:00:01,443 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 18:00:01,445 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 18:00:01,449 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 18:00:01,450 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 18:00:01,511 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 18:00:01,543 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 19:00:00 UTC)" executed successfully 2026-08-26 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 20:00:00 UTC)" (scheduled at 2026-08-26 19:00:00+00:00) 2026-08-26 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-26 19:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 19:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 19:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 19:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 19:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 19:00:01,238 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 19:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 20:00:00 UTC)" executed successfully 2026-08-26 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 21:00:00 UTC)" (scheduled at 2026-08-26 20:00:00+00:00) 2026-08-26 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-26 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 20:00:02,317 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 20:00:02,319 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 20:00:02,321 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 20:00:02,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 20:00:02,374 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 20:00:02,401 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 21:00:00 UTC)" executed successfully 2026-08-26 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 22:00:00 UTC)" (scheduled at 2026-08-26 21:00:00+00:00) 2026-08-26 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-26 21:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 21:00:01,232 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 21:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 21:00:01,237 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 21:00:01,237 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 21:00:01,301 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 21:00:01,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 22:00:00 UTC)" executed successfully 2026-08-26 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 23:00:00 UTC)" (scheduled at 2026-08-26 22:00:00+00:00) 2026-08-26 22:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-26 22:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 22:00:03,070 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 22:00:03,072 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 22:00:03,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 22:00:03,077 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 22:00:03,148 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 22:00:03,177 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-26 23:00:00 UTC)" executed successfully 2026-08-26 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 00:00:00 UTC)" (scheduled at 2026-08-26 23:00:00+00:00) 2026-08-26 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-26 23:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-26 23:00:01,550 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-26 23:00:01,552 INFO [fb-sync.worker] Scraped 50 posts 2026-08-26 23:00:01,556 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-26 23:00:01,556 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-26 23:00:01,626 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-26 23:00:01,660 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 00:00:00 UTC)" executed successfully 2026-08-27 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 01:00:00 UTC)" (scheduled at 2026-08-27 00:00:00+00:00) 2026-08-27 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-27 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 00:00:01,178 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 00:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 00:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 00:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 00:00:01,268 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 00:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 01:00:00 UTC)" executed successfully 2026-08-27 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 02:00:00 UTC)" (scheduled at 2026-08-27 01:00:00+00:00) 2026-08-27 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-27 01:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 01:00:01,317 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 01:00:01,319 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 01:00:01,321 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 01:00:01,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 01:00:01,381 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 01:00:01,410 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 02:00:00 UTC)" executed successfully 2026-08-27 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 03:00:00 UTC)" (scheduled at 2026-08-27 02:00:00+00:00) 2026-08-27 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-27 02:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 02:00:01,101 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 02:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 02:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 02:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 02:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 02:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 03:00:00 UTC)" executed successfully 2026-08-27 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 04:00:00 UTC)" (scheduled at 2026-08-27 03:00:00+00:00) 2026-08-27 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-27 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 03:00:01,999 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 03:00:02,001 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 03:00:02,004 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 03:00:02,005 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 03:00:02,064 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 03:00:02,092 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 04:00:00 UTC)" executed successfully 2026-08-27 04:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 05:00:00 UTC)" (scheduled at 2026-08-27 04:00:00+00:00) 2026-08-27 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-27 04:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 04:00:01,899 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 04:00:01,900 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 04:00:01,902 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 04:00:01,903 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 04:00:01,969 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 04:00:01,998 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 05:00:00 UTC)" executed successfully 2026-08-27 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 06:00:00 UTC)" (scheduled at 2026-08-27 05:00:00+00:00) 2026-08-27 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-27 05:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 05:00:02,743 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 05:00:02,744 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 05:00:02,749 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 05:00:02,749 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 05:00:02,833 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 05:00:02,870 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 06:00:00 UTC)" executed successfully 2026-08-27 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 07:00:00 UTC)" (scheduled at 2026-08-27 06:00:00+00:00) 2026-08-27 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-27 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 06:00:01,057 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 06:00:01,059 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 06:00:01,062 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 06:00:01,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 06:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 06:00:01,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 07:00:00 UTC)" executed successfully 2026-08-27 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 08:00:00 UTC)" (scheduled at 2026-08-27 07:00:00+00:00) 2026-08-27 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-27 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 07:00:01,735 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 07:00:01,737 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 07:00:01,740 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 07:00:01,741 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 07:00:01,817 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 07:00:01,846 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 08:00:00 UTC)" executed successfully 2026-08-27 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 09:00:00 UTC)" (scheduled at 2026-08-27 08:00:00+00:00) 2026-08-27 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-27 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 08:00:01,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 08:00:01,185 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 08:00:01,187 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 08:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 08:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 08:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 09:00:00 UTC)" executed successfully 2026-08-27 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 10:00:00 UTC)" (scheduled at 2026-08-27 09:00:00+00:00) 2026-08-27 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-27 09:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 09:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 09:00:01,202 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 09:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 09:00:01,204 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 09:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 09:00:01,282 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 10:00:00 UTC)" executed successfully 2026-08-27 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 11:00:00 UTC)" (scheduled at 2026-08-27 10:00:00+00:00) 2026-08-27 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-27 10:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 10:00:01,490 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 10:00:01,491 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 10:00:01,494 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 10:00:01,495 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 10:00:01,542 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 10:00:01,564 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 11:00:00 UTC)" executed successfully 2026-08-27 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 12:00:00 UTC)" (scheduled at 2026-08-27 11:00:00+00:00) 2026-08-27 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-27 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 11:00:01,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 11:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 11:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 11:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 11:00:01,219 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 11:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 12:00:00 UTC)" executed successfully 2026-08-27 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 13:00:00 UTC)" (scheduled at 2026-08-27 12:00:00+00:00) 2026-08-27 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-27 12:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 12:00:01,509 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 12:00:01,511 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 12:00:01,515 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 12:00:01,516 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 12:00:01,578 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 12:00:01,607 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 13:00:00 UTC)" executed successfully 2026-08-27 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 14:00:00 UTC)" (scheduled at 2026-08-27 13:00:00+00:00) 2026-08-27 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-27 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 13:00:01,383 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 13:00:01,385 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 13:00:01,388 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 13:00:01,388 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 13:00:01,448 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 13:00:01,478 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 14:00:00 UTC)" executed successfully 2026-08-27 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 15:00:00 UTC)" (scheduled at 2026-08-27 14:00:00+00:00) 2026-08-27 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-27 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 14:00:01,727 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 14:00:01,730 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 14:00:01,735 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 14:00:01,735 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 14:00:01,785 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 14:00:01,822 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 15:00:00 UTC)" executed successfully 2026-08-27 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 16:00:00 UTC)" (scheduled at 2026-08-27 15:00:00+00:00) 2026-08-27 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-27 15:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 15:00:01,249 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 15:00:01,251 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 15:00:01,254 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 15:00:01,254 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 15:00:01,315 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 15:00:01,345 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 16:00:00 UTC)" executed successfully 2026-08-27 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 17:00:00 UTC)" (scheduled at 2026-08-27 16:00:00+00:00) 2026-08-27 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-27 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 16:00:01,872 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 16:00:01,875 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 16:00:01,878 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 16:00:01,879 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 16:00:01,948 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 16:00:01,981 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 17:00:00 UTC)" executed successfully 2026-08-27 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 18:00:00 UTC)" (scheduled at 2026-08-27 17:00:00+00:00) 2026-08-27 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-27 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 17:00:01,916 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 17:00:01,918 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 17:00:01,921 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 17:00:01,922 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 17:00:01,987 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 17:00:02,020 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 18:00:00 UTC)" executed successfully 2026-08-27 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 19:00:00 UTC)" (scheduled at 2026-08-27 18:00:00+00:00) 2026-08-27 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-27 18:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 18:00:01,240 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 18:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 18:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 18:00:01,249 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 18:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 18:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 19:00:00 UTC)" executed successfully 2026-08-27 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 20:00:00 UTC)" (scheduled at 2026-08-27 19:00:00+00:00) 2026-08-27 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-27 19:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 19:00:01,269 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 19:00:01,271 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 19:00:01,273 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 19:00:01,273 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 19:00:01,344 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 19:00:01,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 20:00:00 UTC)" executed successfully 2026-08-27 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 21:00:00 UTC)" (scheduled at 2026-08-27 20:00:00+00:00) 2026-08-27 20:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-27 20:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 20:00:01,331 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 20:00:01,333 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 20:00:01,337 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 20:00:01,337 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 20:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 20:00:01,437 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 21:00:00 UTC)" executed successfully 2026-08-27 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 22:00:00 UTC)" (scheduled at 2026-08-27 21:00:00+00:00) 2026-08-27 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-27 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 21:00:01,533 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 21:00:01,534 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 21:00:01,538 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 21:00:01,538 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 21:00:01,596 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 21:00:01,621 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 22:00:00 UTC)" executed successfully 2026-08-27 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 23:00:00 UTC)" (scheduled at 2026-08-27 22:00:00+00:00) 2026-08-27 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-27 22:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 22:00:01,208 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 22:00:01,210 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 22:00:01,212 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 22:00:01,212 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 22:00:01,269 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 22:00:01,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-27 23:00:00 UTC)" executed successfully 2026-08-27 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 00:00:00 UTC)" (scheduled at 2026-08-27 23:00:00+00:00) 2026-08-27 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-27 23:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-27 23:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-27 23:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-08-27 23:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-27 23:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-27 23:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-27 23:00:01,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 00:00:00 UTC)" executed successfully 2026-08-28 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 01:00:00 UTC)" (scheduled at 2026-08-28 00:00:00+00:00) 2026-08-28 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-28 00:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 00:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 00:00:01,219 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 00:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 00:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 00:00:01,321 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 00:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 01:00:00 UTC)" executed successfully 2026-08-28 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 02:00:00 UTC)" (scheduled at 2026-08-28 01:00:00+00:00) 2026-08-28 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-28 01:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 01:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 01:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 01:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 01:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 01:00:01,210 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 01:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 02:00:00 UTC)" executed successfully 2026-08-28 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 03:00:00 UTC)" (scheduled at 2026-08-28 02:00:00+00:00) 2026-08-28 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-28 02:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 02:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 02:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 02:00:01,119 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 02:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 02:00:01,178 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 02:00:01,205 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 03:00:00 UTC)" executed successfully 2026-08-28 03:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 04:00:00 UTC)" (scheduled at 2026-08-28 03:00:00+00:00) 2026-08-28 03:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-28 03:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 03:00:01,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 03:00:01,093 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 03:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 03:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 03:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 03:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 04:00:00 UTC)" executed successfully 2026-08-28 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 05:00:00 UTC)" (scheduled at 2026-08-28 04:00:00+00:00) 2026-08-28 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-28 04:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 04:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 04:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 04:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 04:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 04:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 04:00:01,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 05:00:00 UTC)" executed successfully 2026-08-28 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 06:00:00 UTC)" (scheduled at 2026-08-28 05:00:00+00:00) 2026-08-28 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-28 05:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 05:00:01,050 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 05:00:01,052 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 05:00:01,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 05:00:01,055 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 05:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 05:00:01,135 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 06:00:00 UTC)" executed successfully 2026-08-28 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 07:00:00 UTC)" (scheduled at 2026-08-28 06:00:00+00:00) 2026-08-28 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-28 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 06:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 06:00:01,146 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 06:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 06:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 06:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 06:00:01,235 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 07:00:00 UTC)" executed successfully 2026-08-28 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 08:00:00 UTC)" (scheduled at 2026-08-28 07:00:00+00:00) 2026-08-28 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-28 07:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 07:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 07:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 07:00:01,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 07:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 07:00:01,280 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 07:00:01,310 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 08:00:00 UTC)" executed successfully 2026-08-28 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 09:00:00 UTC)" (scheduled at 2026-08-28 08:00:00+00:00) 2026-08-28 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-28 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 08:00:01,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 08:00:01,374 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 08:00:01,377 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 08:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 08:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 08:00:01,462 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 09:00:00 UTC)" executed successfully 2026-08-28 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 10:00:00 UTC)" (scheduled at 2026-08-28 09:00:00+00:00) 2026-08-28 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-28 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 09:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 09:00:01,207 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 09:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 09:00:01,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 09:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 09:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 10:00:00 UTC)" executed successfully 2026-08-28 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 11:00:00 UTC)" (scheduled at 2026-08-28 10:00:00+00:00) 2026-08-28 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-28 10:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 10:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 10:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 10:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 10:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 10:00:01,276 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 10:00:01,306 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 11:00:00 UTC)" executed successfully 2026-08-28 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 12:00:00 UTC)" (scheduled at 2026-08-28 11:00:00+00:00) 2026-08-28 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-28 11:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 11:00:01,346 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 11:00:01,348 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 11:00:01,350 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 11:00:01,350 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 11:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 11:00:01,431 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 12:00:00 UTC)" executed successfully 2026-08-28 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 13:00:00 UTC)" (scheduled at 2026-08-28 12:00:00+00:00) 2026-08-28 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-28 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 12:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 12:00:01,218 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 12:00:01,222 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 12:00:01,222 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 12:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 12:00:01,282 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 13:00:00 UTC)" executed successfully 2026-08-28 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 14:00:00 UTC)" (scheduled at 2026-08-28 13:00:00+00:00) 2026-08-28 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-28 13:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 13:00:01,434 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 13:00:01,436 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 13:00:01,440 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 13:00:01,440 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 13:00:01,497 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 13:00:01,524 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 14:00:00 UTC)" executed successfully 2026-08-28 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 15:00:00 UTC)" (scheduled at 2026-08-28 14:00:00+00:00) 2026-08-28 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-28 14:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 14:00:01,081 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 14:00:01,082 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 14:00:01,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 14:00:01,087 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 14:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 14:00:01,172 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 15:00:00 UTC)" executed successfully 2026-08-28 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 16:00:00 UTC)" (scheduled at 2026-08-28 15:00:00+00:00) 2026-08-28 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-28 15:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 15:00:01,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 15:00:01,174 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 15:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 15:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 15:00:01,241 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 15:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 16:00:00 UTC)" executed successfully 2026-08-28 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 17:00:00 UTC)" (scheduled at 2026-08-28 16:00:00+00:00) 2026-08-28 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-28 16:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 16:00:01,708 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 16:00:01,710 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 16:00:01,712 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 16:00:01,712 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 16:00:01,762 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 16:00:01,790 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 17:00:00 UTC)" executed successfully 2026-08-28 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 18:00:00 UTC)" (scheduled at 2026-08-28 17:00:00+00:00) 2026-08-28 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-28 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 17:00:01,880 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 17:00:01,882 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 17:00:01,886 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 17:00:01,886 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 17:00:01,943 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 17:00:01,977 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 18:00:00 UTC)" executed successfully 2026-08-28 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 19:00:00 UTC)" (scheduled at 2026-08-28 18:00:00+00:00) 2026-08-28 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-28 18:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 18:00:01,467 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 18:00:01,468 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 18:00:01,472 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 18:00:01,472 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 18:00:01,536 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 18:00:01,567 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 19:00:00 UTC)" executed successfully 2026-08-28 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 20:00:00 UTC)" (scheduled at 2026-08-28 19:00:00+00:00) 2026-08-28 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-28 19:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 19:00:01,252 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 19:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 19:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 19:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 19:00:01,310 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 19:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 20:00:00 UTC)" executed successfully 2026-08-28 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 21:00:00 UTC)" (scheduled at 2026-08-28 20:00:00+00:00) 2026-08-28 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-28 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 20:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 20:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 20:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 20:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 20:00:01,258 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 20:00:01,283 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 21:00:00 UTC)" executed successfully 2026-08-28 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 22:00:00 UTC)" (scheduled at 2026-08-28 21:00:00+00:00) 2026-08-28 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-28 21:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 21:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 21:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 21:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 21:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 21:00:01,278 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 21:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 22:00:00 UTC)" executed successfully 2026-08-28 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 23:00:00 UTC)" (scheduled at 2026-08-28 22:00:00+00:00) 2026-08-28 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-28 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 22:00:01,456 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 22:00:01,458 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 22:00:01,461 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 22:00:01,462 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 22:00:01,523 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 22:00:01,552 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-28 23:00:00 UTC)" executed successfully 2026-08-28 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 00:00:00 UTC)" (scheduled at 2026-08-28 23:00:00+00:00) 2026-08-28 23:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-28 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-28 23:00:01,389 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-28 23:00:01,390 INFO [fb-sync.worker] Scraped 50 posts 2026-08-28 23:00:01,394 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-28 23:00:01,394 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-28 23:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-28 23:00:01,483 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 00:00:00 UTC)" executed successfully 2026-08-29 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 01:00:00 UTC)" (scheduled at 2026-08-29 00:00:00+00:00) 2026-08-29 00:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-29 00:00:00,060 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 00:00:02,616 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 00:00:02,618 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 00:00:02,621 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 00:00:02,621 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 00:00:02,696 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 00:00:02,728 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 01:00:00 UTC)" executed successfully 2026-08-29 01:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 02:00:00 UTC)" (scheduled at 2026-08-29 01:00:00+00:00) 2026-08-29 01:00:00,004 INFO [fb-sync] Starting FB sync... 2026-08-29 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 01:00:01,049 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 01:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 01:00:01,053 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 01:00:01,053 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 01:00:01,134 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 01:00:01,169 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 02:00:00 UTC)" executed successfully 2026-08-29 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 03:00:00 UTC)" (scheduled at 2026-08-29 02:00:00+00:00) 2026-08-29 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-29 02:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 02:00:00,988 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 02:00:00,989 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 02:00:00,991 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 02:00:00,991 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 02:00:01,053 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 02:00:01,081 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 03:00:00 UTC)" executed successfully 2026-08-29 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 04:00:00 UTC)" (scheduled at 2026-08-29 03:00:00+00:00) 2026-08-29 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-29 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 03:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 03:00:01,126 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 03:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 03:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 03:00:01,192 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 03:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 04:00:00 UTC)" executed successfully 2026-08-29 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 05:00:00 UTC)" (scheduled at 2026-08-29 04:00:00+00:00) 2026-08-29 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-29 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 04:00:01,035 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 04:00:01,037 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 04:00:01,040 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 04:00:01,041 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 04:00:01,089 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 04:00:01,107 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 05:00:00 UTC)" executed successfully 2026-08-29 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 06:00:00 UTC)" (scheduled at 2026-08-29 05:00:00+00:00) 2026-08-29 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-29 05:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 05:00:01,278 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 05:00:01,279 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 05:00:01,281 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 05:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 05:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 05:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 06:00:00 UTC)" executed successfully 2026-08-29 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 07:00:00 UTC)" (scheduled at 2026-08-29 06:00:00+00:00) 2026-08-29 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-29 06:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 06:00:01,078 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 06:00:01,080 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 06:00:01,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 06:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 06:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 06:00:01,164 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 07:00:00 UTC)" executed successfully 2026-08-29 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 08:00:00 UTC)" (scheduled at 2026-08-29 07:00:00+00:00) 2026-08-29 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-29 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 07:00:01,366 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 07:00:01,368 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 07:00:01,370 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 07:00:01,370 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 07:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 07:00:01,467 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 08:00:00 UTC)" executed successfully 2026-08-29 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 09:00:00 UTC)" (scheduled at 2026-08-29 08:00:00+00:00) 2026-08-29 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-29 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 08:00:01,911 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 08:00:01,912 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 08:00:01,916 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 08:00:01,916 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 08:00:01,973 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 08:00:02,000 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 09:00:00 UTC)" executed successfully 2026-08-29 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 10:00:00 UTC)" (scheduled at 2026-08-29 09:00:00+00:00) 2026-08-29 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-29 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 09:00:01,041 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 09:00:01,043 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 09:00:01,046 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 09:00:01,046 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 09:00:01,098 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 09:00:01,125 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 10:00:00 UTC)" executed successfully 2026-08-29 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 11:00:00 UTC)" (scheduled at 2026-08-29 10:00:00+00:00) 2026-08-29 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-29 10:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 10:00:01,178 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 10:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 10:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 10:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 10:00:01,240 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 10:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 11:00:00 UTC)" executed successfully 2026-08-29 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 12:00:00 UTC)" (scheduled at 2026-08-29 11:00:00+00:00) 2026-08-29 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-29 11:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 11:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 11:00:01,201 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 11:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 11:00:01,204 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 11:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 11:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 12:00:00 UTC)" executed successfully 2026-08-29 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 13:00:00 UTC)" (scheduled at 2026-08-29 12:00:00+00:00) 2026-08-29 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-29 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 12:00:01,376 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 12:00:01,378 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 12:00:01,381 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 12:00:01,382 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 12:00:01,483 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 12:00:01,513 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 13:00:00 UTC)" executed successfully 2026-08-29 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 14:00:00 UTC)" (scheduled at 2026-08-29 13:00:00+00:00) 2026-08-29 13:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-29 13:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 13:00:01,343 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 13:00:01,345 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 13:00:01,348 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 13:00:01,348 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 13:00:01,417 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 13:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 13:00:01,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 14:00:00 UTC)" executed successfully 2026-08-29 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 15:00:00 UTC)" (scheduled at 2026-08-29 14:00:00+00:00) 2026-08-29 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-29 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 14:00:01,512 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 14:00:01,513 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 14:00:01,517 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 14:00:01,517 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 14:00:01,590 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 14:00:01,658 INFO [fb-sync.journal] Retention: dropped 3 record(s) older than 30d 2026-08-29 14:00:01,658 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 15:00:00 UTC)" executed successfully 2026-08-29 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 16:00:00 UTC)" (scheduled at 2026-08-29 15:00:00+00:00) 2026-08-29 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-29 15:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 15:00:01,570 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 15:00:01,572 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 15:00:01,578 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 15:00:01,578 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 15:00:01,650 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 15:00:01,731 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 15:00:01,731 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 16:00:00 UTC)" executed successfully 2026-08-29 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 17:00:00 UTC)" (scheduled at 2026-08-29 16:00:00+00:00) 2026-08-29 16:00:00,015 INFO [fb-sync] Starting FB sync... 2026-08-29 16:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 16:00:01,619 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 16:00:01,623 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 16:00:01,629 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 16:00:01,630 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 16:00:01,732 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 16:00:01,815 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 16:00:01,816 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 17:00:00 UTC)" executed successfully 2026-08-29 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 18:00:00 UTC)" (scheduled at 2026-08-29 17:00:00+00:00) 2026-08-29 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-29 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 17:00:01,126 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 17:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 17:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 17:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 17:00:01,201 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 17:00:01,277 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 17:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 18:00:00 UTC)" executed successfully 2026-08-29 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 19:00:00 UTC)" (scheduled at 2026-08-29 18:00:00+00:00) 2026-08-29 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-29 18:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 18:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 18:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 18:00:01,123 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 18:00:01,123 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 18:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 18:00:01,229 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 18:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 19:00:00 UTC)" executed successfully 2026-08-29 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 20:00:00 UTC)" (scheduled at 2026-08-29 19:00:00+00:00) 2026-08-29 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-29 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 19:00:00,953 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 19:00:00,956 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 19:00:00,959 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 19:00:00,959 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 19:00:01,018 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 19:00:01,077 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 19:00:01,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 20:00:00 UTC)" executed successfully 2026-08-29 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 21:00:00 UTC)" (scheduled at 2026-08-29 20:00:00+00:00) 2026-08-29 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-29 20:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 20:00:02,108 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 20:00:02,111 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 20:00:02,113 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 20:00:02,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 20:00:02,170 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 20:00:02,228 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 20:00:02,228 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 21:00:00 UTC)" executed successfully 2026-08-29 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 22:00:00 UTC)" (scheduled at 2026-08-29 21:00:00+00:00) 2026-08-29 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-29 21:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 21:00:01,012 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 21:00:01,013 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 21:00:01,016 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 21:00:01,016 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 21:00:01,069 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 21:00:01,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 21:00:01,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 22:00:00 UTC)" executed successfully 2026-08-29 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 23:00:00 UTC)" (scheduled at 2026-08-29 22:00:00+00:00) 2026-08-29 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-29 22:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 22:00:02,064 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 22:00:02,065 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 22:00:02,069 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 22:00:02,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 22:00:02,142 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 22:00:02,227 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 22:00:02,227 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-29 23:00:00 UTC)" executed successfully 2026-08-29 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 00:00:00 UTC)" (scheduled at 2026-08-29 23:00:00+00:00) 2026-08-29 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-29 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-29 23:00:00,898 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-29 23:00:00,900 INFO [fb-sync.worker] Scraped 50 posts 2026-08-29 23:00:00,903 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-29 23:00:00,903 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-29 23:00:00,967 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-29 23:00:01,034 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-29 23:00:01,034 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 00:00:00 UTC)" executed successfully 2026-08-30 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 01:00:00 UTC)" (scheduled at 2026-08-30 00:00:00+00:00) 2026-08-30 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-30 00:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 00:00:00,936 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 00:00:00,940 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 00:00:00,944 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 00:00:00,945 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 00:00:00,996 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 00:00:01,079 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 00:00:01,080 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 01:00:00 UTC)" executed successfully 2026-08-30 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 02:00:00 UTC)" (scheduled at 2026-08-30 01:00:00+00:00) 2026-08-30 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-30 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 01:00:01,687 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 01:00:01,689 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 01:00:01,692 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 01:00:01,692 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 01:00:01,754 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 01:00:01,826 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 01:00:01,826 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 02:00:00 UTC)" executed successfully 2026-08-30 02:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 03:00:00 UTC)" (scheduled at 2026-08-30 02:00:00+00:00) 2026-08-30 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-30 02:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 02:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 02:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 02:00:01,090 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 02:00:01,090 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 02:00:01,156 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 02:00:01,226 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 02:00:01,226 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 03:00:00 UTC)" executed successfully 2026-08-30 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 04:00:00 UTC)" (scheduled at 2026-08-30 03:00:00+00:00) 2026-08-30 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-30 03:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 03:00:01,138 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 03:00:01,140 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 03:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 03:00:01,144 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 03:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 03:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 03:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 04:00:00 UTC)" executed successfully 2026-08-30 04:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 05:00:00 UTC)" (scheduled at 2026-08-30 04:00:00+00:00) 2026-08-30 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-30 04:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 04:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 04:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 04:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 04:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 04:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 04:00:01,364 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 04:00:01,364 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 05:00:00 UTC)" executed successfully 2026-08-30 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 06:00:00 UTC)" (scheduled at 2026-08-30 05:00:00+00:00) 2026-08-30 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-30 05:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 05:00:00,967 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 05:00:00,970 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 05:00:00,972 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 05:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 05:00:01,032 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 05:00:01,094 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 05:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 06:00:00 UTC)" executed successfully 2026-08-30 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 07:00:00 UTC)" (scheduled at 2026-08-30 06:00:00+00:00) 2026-08-30 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-30 06:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 06:00:01,430 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 06:00:01,432 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 06:00:01,435 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 06:00:01,436 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 06:00:01,502 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 06:00:01,572 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 06:00:01,572 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 07:00:00 UTC)" executed successfully 2026-08-30 07:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 08:00:00 UTC)" (scheduled at 2026-08-30 07:00:00+00:00) 2026-08-30 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-30 07:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 07:00:00,921 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 07:00:00,923 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 07:00:00,925 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 07:00:00,926 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 07:00:00,979 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 07:00:01,055 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 07:00:01,055 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 08:00:00 UTC)" executed successfully 2026-08-30 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 09:00:00 UTC)" (scheduled at 2026-08-30 08:00:00+00:00) 2026-08-30 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-30 08:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 08:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 08:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 08:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 08:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 08:00:01,157 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 08:00:01,223 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 08:00:01,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 09:00:00 UTC)" executed successfully 2026-08-30 09:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 10:00:00 UTC)" (scheduled at 2026-08-30 09:00:00+00:00) 2026-08-30 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-08-30 09:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 09:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 09:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 09:00:01,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 09:00:01,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 09:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 09:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 09:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 10:00:00 UTC)" executed successfully 2026-08-30 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 11:00:00 UTC)" (scheduled at 2026-08-30 10:00:00+00:00) 2026-08-30 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-30 10:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 10:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 10:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 10:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 10:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 10:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 10:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 10:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 11:00:00 UTC)" executed successfully 2026-08-30 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 12:00:00 UTC)" (scheduled at 2026-08-30 11:00:00+00:00) 2026-08-30 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-30 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 11:00:02,368 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 11:00:02,369 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 11:00:02,372 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 11:00:02,372 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 11:00:02,440 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 11:00:02,491 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 11:00:02,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 12:00:00 UTC)" executed successfully 2026-08-30 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 13:00:00 UTC)" (scheduled at 2026-08-30 12:00:00+00:00) 2026-08-30 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-30 12:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 12:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 12:00:01,126 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 12:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 12:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 12:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 12:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 12:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 13:00:00 UTC)" executed successfully 2026-08-30 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 14:00:00 UTC)" (scheduled at 2026-08-30 13:00:00+00:00) 2026-08-30 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-30 13:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 13:00:01,413 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 13:00:01,415 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 13:00:01,418 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 13:00:01,418 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 13:00:01,684 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 13:00:01,757 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 13:00:01,757 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 14:00:00 UTC)" executed successfully 2026-08-30 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 15:00:00 UTC)" (scheduled at 2026-08-30 14:00:00+00:00) 2026-08-30 14:00:00,016 INFO [fb-sync] Starting FB sync... 2026-08-30 14:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 14:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 14:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 14:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 14:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 14:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 14:00:01,311 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 14:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 15:00:00 UTC)" executed successfully 2026-08-30 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 16:00:00 UTC)" (scheduled at 2026-08-30 15:00:00+00:00) 2026-08-30 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-30 15:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 15:00:01,746 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 15:00:01,748 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 15:00:01,752 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 15:00:01,752 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 15:00:01,821 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 15:00:01,904 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 15:00:01,904 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 16:00:00 UTC)" executed successfully 2026-08-30 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 17:00:00 UTC)" (scheduled at 2026-08-30 16:00:00+00:00) 2026-08-30 16:00:00,018 INFO [fb-sync] Starting FB sync... 2026-08-30 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 16:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 16:00:01,062 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 16:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 16:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 16:00:01,122 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 16:00:01,178 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 16:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 17:00:00 UTC)" executed successfully 2026-08-30 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 18:00:00 UTC)" (scheduled at 2026-08-30 17:00:00+00:00) 2026-08-30 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-30 17:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 17:00:01,365 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 17:00:01,367 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 17:00:01,370 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 17:00:01,371 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 17:00:01,434 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 17:00:01,508 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 17:00:01,508 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 18:00:00 UTC)" executed successfully 2026-08-30 18:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 19:00:00 UTC)" (scheduled at 2026-08-30 18:00:00+00:00) 2026-08-30 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-30 18:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 18:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 18:00:01,117 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 18:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 18:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 18:00:01,166 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 18:00:01,237 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 18:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 19:00:00 UTC)" executed successfully 2026-08-30 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 20:00:00 UTC)" (scheduled at 2026-08-30 19:00:00+00:00) 2026-08-30 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-30 19:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 19:00:01,016 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 19:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 19:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 19:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 19:00:01,086 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 19:00:01,154 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 19:00:01,154 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 20:00:00 UTC)" executed successfully 2026-08-30 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 21:00:00 UTC)" (scheduled at 2026-08-30 20:00:00+00:00) 2026-08-30 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-30 20:00:00,110 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 20:00:01,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 20:00:01,164 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 20:00:01,168 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 20:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 20:00:01,237 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 20:00:01,325 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 20:00:01,326 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 21:00:00 UTC)" executed successfully 2026-08-30 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 22:00:00 UTC)" (scheduled at 2026-08-30 21:00:00+00:00) 2026-08-30 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-30 21:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 21:00:00,933 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 21:00:00,935 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 21:00:00,938 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 21:00:00,939 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 21:00:01,004 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 21:00:01,092 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 21:00:01,092 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 22:00:00 UTC)" executed successfully 2026-08-30 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 23:00:00 UTC)" (scheduled at 2026-08-30 22:00:00+00:00) 2026-08-30 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-30 22:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 22:00:00,950 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 22:00:00,951 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 22:00:00,954 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 22:00:00,954 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 22:00:01,004 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 22:00:01,061 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 22:00:01,062 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-30 23:00:00 UTC)" executed successfully 2026-08-30 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 00:00:00 UTC)" (scheduled at 2026-08-30 23:00:00+00:00) 2026-08-30 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-30 23:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-30 23:00:01,310 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-30 23:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-08-30 23:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-30 23:00:01,314 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-30 23:00:01,378 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-30 23:00:01,448 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-30 23:00:01,448 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 00:00:00 UTC)" executed successfully 2026-08-31 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 01:00:00 UTC)" (scheduled at 2026-08-31 00:00:00+00:00) 2026-08-31 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-31 00:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 00:00:01,574 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 00:00:01,576 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 00:00:01,579 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 00:00:01,579 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 00:00:01,642 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 00:00:01,725 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 00:00:01,726 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 01:00:00 UTC)" executed successfully 2026-08-31 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 02:00:00 UTC)" (scheduled at 2026-08-31 01:00:00+00:00) 2026-08-31 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-31 01:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 01:00:00,999 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 01:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 01:00:01,007 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 01:00:01,008 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 01:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 01:00:01,140 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 01:00:01,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 02:00:00 UTC)" executed successfully 2026-08-31 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 03:00:00 UTC)" (scheduled at 2026-08-31 02:00:00+00:00) 2026-08-31 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-08-31 02:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 02:00:00,931 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 02:00:00,932 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 02:00:00,935 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 02:00:00,935 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 02:00:00,975 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 02:00:01,021 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 02:00:01,021 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 03:00:00 UTC)" executed successfully 2026-08-31 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 04:00:00 UTC)" (scheduled at 2026-08-31 03:00:00+00:00) 2026-08-31 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-31 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 03:00:00,951 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 03:00:00,953 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 03:00:00,958 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 03:00:00,958 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 03:00:01,022 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 03:00:01,093 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 03:00:01,093 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 04:00:00 UTC)" executed successfully 2026-08-31 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 05:00:00 UTC)" (scheduled at 2026-08-31 04:00:00+00:00) 2026-08-31 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-31 04:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 04:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 04:00:01,069 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 04:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 04:00:01,073 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 04:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 04:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 04:00:01,211 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 05:00:00 UTC)" executed successfully 2026-08-31 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 06:00:00 UTC)" (scheduled at 2026-08-31 05:00:00+00:00) 2026-08-31 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-31 05:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 05:00:01,965 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 05:00:01,967 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 05:00:01,971 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 05:00:01,971 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 05:00:02,037 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 05:00:02,104 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 05:00:02,104 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 06:00:00 UTC)" executed successfully 2026-08-31 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 07:00:00 UTC)" (scheduled at 2026-08-31 06:00:00+00:00) 2026-08-31 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-31 06:00:00,124 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 06:00:01,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 06:00:01,366 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 06:00:01,370 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 06:00:01,371 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 06:00:01,420 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 06:00:01,508 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 06:00:01,509 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 07:00:00 UTC)" executed successfully 2026-08-31 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 08:00:00 UTC)" (scheduled at 2026-08-31 07:00:00+00:00) 2026-08-31 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-31 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 07:00:02,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 07:00:02,137 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 07:00:02,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 07:00:02,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 07:00:02,214 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 07:00:02,310 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 07:00:02,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 08:00:00 UTC)" executed successfully 2026-08-31 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 09:00:00 UTC)" (scheduled at 2026-08-31 08:00:00+00:00) 2026-08-31 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-31 08:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 08:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 08:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 08:00:01,021 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 08:00:01,021 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 08:00:01,098 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 08:00:01,186 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 08:00:01,187 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 09:00:00 UTC)" executed successfully 2026-08-31 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 10:00:00 UTC)" (scheduled at 2026-08-31 09:00:00+00:00) 2026-08-31 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-31 09:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 09:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 09:00:01,127 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 09:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 09:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 09:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 09:00:01,283 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 09:00:01,283 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 10:00:00 UTC)" executed successfully 2026-08-31 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 11:00:00 UTC)" (scheduled at 2026-08-31 10:00:00+00:00) 2026-08-31 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-31 10:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 10:00:01,540 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 10:00:01,541 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 10:00:01,545 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 10:00:01,545 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 10:00:01,612 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 10:00:01,688 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 10:00:01,688 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 11:00:00 UTC)" executed successfully 2026-08-31 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 12:00:00 UTC)" (scheduled at 2026-08-31 11:00:00+00:00) 2026-08-31 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-08-31 11:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 11:00:01,262 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 11:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 11:00:01,268 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 11:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 11:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 11:00:01,412 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 11:00:01,413 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 12:00:00 UTC)" executed successfully 2026-08-31 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 13:00:00 UTC)" (scheduled at 2026-08-31 12:00:00+00:00) 2026-08-31 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-31 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 12:00:02,771 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 12:00:02,772 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 12:00:02,776 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 12:00:02,776 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 12:00:02,833 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 12:00:02,900 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 12:00:02,901 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 13:00:00 UTC)" executed successfully 2026-08-31 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 14:00:00 UTC)" (scheduled at 2026-08-31 13:00:00+00:00) 2026-08-31 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-31 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 13:00:01,071 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 13:00:01,073 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 13:00:01,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 13:00:01,077 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 13:00:01,127 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 13:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 13:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 14:00:00 UTC)" executed successfully 2026-08-31 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 15:00:00 UTC)" (scheduled at 2026-08-31 14:00:00+00:00) 2026-08-31 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-31 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 14:00:02,384 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 14:00:02,385 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 14:00:02,388 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 14:00:02,389 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 14:00:02,450 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 14:00:02,504 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 14:00:02,505 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 15:00:00 UTC)" executed successfully 2026-08-31 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 16:00:00 UTC)" (scheduled at 2026-08-31 15:00:00+00:00) 2026-08-31 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-31 15:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 15:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 15:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 15:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 15:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 15:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 15:00:01,286 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 15:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 16:00:00 UTC)" executed successfully 2026-08-31 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 17:00:00 UTC)" (scheduled at 2026-08-31 16:00:00+00:00) 2026-08-31 16:00:00,007 INFO [fb-sync] Starting FB sync... 2026-08-31 16:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 16:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 16:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 16:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 16:00:01,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 16:00:01,348 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 16:00:01,429 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 16:00:01,430 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 17:00:00 UTC)" executed successfully 2026-08-31 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 18:00:00 UTC)" (scheduled at 2026-08-31 17:00:00+00:00) 2026-08-31 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-08-31 17:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 17:00:01,198 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 17:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 17:00:01,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 17:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 17:00:01,262 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 17:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 17:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 18:00:00 UTC)" executed successfully 2026-08-31 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 19:00:00 UTC)" (scheduled at 2026-08-31 18:00:00+00:00) 2026-08-31 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-31 18:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 18:00:01,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 18:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 18:00:01,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 18:00:01,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 18:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 18:00:01,254 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 18:00:01,255 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 19:00:00 UTC)" executed successfully 2026-08-31 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 20:00:00 UTC)" (scheduled at 2026-08-31 19:00:00+00:00) 2026-08-31 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-08-31 19:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 19:00:00,968 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 19:00:00,969 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 19:00:00,972 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 19:00:00,972 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 19:00:01,035 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 19:00:01,093 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 19:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 20:00:00 UTC)" executed successfully 2026-08-31 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 21:00:00 UTC)" (scheduled at 2026-08-31 20:00:00+00:00) 2026-08-31 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-08-31 20:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 20:00:01,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 20:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 20:00:01,054 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 20:00:01,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 20:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 20:00:01,160 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 20:00:01,160 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 21:00:00 UTC)" executed successfully 2026-08-31 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 22:00:00 UTC)" (scheduled at 2026-08-31 21:00:00+00:00) 2026-08-31 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-08-31 21:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 21:00:01,481 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 21:00:01,483 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 21:00:01,487 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 21:00:01,487 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 21:00:01,550 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 21:00:01,628 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 21:00:01,629 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 22:00:00 UTC)" executed successfully 2026-08-31 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 23:00:00 UTC)" (scheduled at 2026-08-31 22:00:00+00:00) 2026-08-31 22:00:00,006 INFO [fb-sync] Starting FB sync... 2026-08-31 22:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 22:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 22:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 22:00:01,099 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 22:00:01,100 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 22:00:01,175 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 22:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 22:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-08-31 23:00:00 UTC)" executed successfully 2026-08-31 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 00:00:00 UTC)" (scheduled at 2026-08-31 23:00:00+00:00) 2026-08-31 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-08-31 23:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-08-31 23:00:01,021 INFO [fb-sync.worker] Graph API returned 50 posts 2026-08-31 23:00:01,022 INFO [fb-sync.worker] Scraped 50 posts 2026-08-31 23:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-08-31 23:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-08-31 23:00:01,102 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-08-31 23:00:01,173 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-08-31 23:00:01,174 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 00:00:00 UTC)" executed successfully 2026-09-01 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 01:00:00 UTC)" (scheduled at 2026-09-01 00:00:00+00:00) 2026-09-01 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-01 00:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 00:00:01,287 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 00:00:01,289 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 00:00:01,294 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 00:00:01,295 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 00:00:01,362 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 00:00:01,448 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 00:00:01,448 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 01:00:00 UTC)" executed successfully 2026-09-01 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 02:00:00 UTC)" (scheduled at 2026-09-01 01:00:00+00:00) 2026-09-01 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-01 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 01:00:01,012 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 01:00:01,014 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 01:00:01,016 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 01:00:01,016 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 01:00:01,057 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 01:00:01,125 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 01:00:01,125 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 02:00:00 UTC)" executed successfully 2026-09-01 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 03:00:00 UTC)" (scheduled at 2026-09-01 02:00:00+00:00) 2026-09-01 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-01 02:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 02:00:01,076 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 02:00:01,078 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 02:00:01,081 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 02:00:01,081 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 02:00:01,138 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 02:00:01,215 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 02:00:01,215 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 03:00:00 UTC)" executed successfully 2026-09-01 03:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 04:00:00 UTC)" (scheduled at 2026-09-01 03:00:00+00:00) 2026-09-01 03:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-01 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 03:00:00,987 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 03:00:00,989 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 03:00:00,990 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 03:00:00,990 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 03:00:01,039 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 03:00:01,092 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 03:00:01,092 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 04:00:00 UTC)" executed successfully 2026-09-01 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 05:00:00 UTC)" (scheduled at 2026-09-01 04:00:00+00:00) 2026-09-01 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-01 04:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 04:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 04:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 04:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 04:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 04:00:01,239 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 04:00:01,306 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 04:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 05:00:00 UTC)" executed successfully 2026-09-01 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 06:00:00 UTC)" (scheduled at 2026-09-01 05:00:00+00:00) 2026-09-01 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-01 05:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 05:00:01,304 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 05:00:01,305 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 05:00:01,307 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 05:00:01,307 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 05:00:01,531 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 05:00:01,599 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 05:00:01,599 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 06:00:00 UTC)" executed successfully 2026-09-01 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 07:00:00 UTC)" (scheduled at 2026-09-01 06:00:00+00:00) 2026-09-01 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-01 06:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 06:00:01,039 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 06:00:01,041 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 06:00:01,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 06:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 06:00:01,094 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 06:00:01,155 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 06:00:01,156 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 07:00:00 UTC)" executed successfully 2026-09-01 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 08:00:00 UTC)" (scheduled at 2026-09-01 07:00:00+00:00) 2026-09-01 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-01 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 07:00:01,330 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 07:00:01,332 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 07:00:01,336 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 07:00:01,336 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 07:00:01,384 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 07:00:01,459 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 07:00:01,459 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 08:00:00 UTC)" executed successfully 2026-09-01 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 09:00:00 UTC)" (scheduled at 2026-09-01 08:00:00+00:00) 2026-09-01 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-01 08:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 08:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 08:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 08:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 08:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 08:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 08:00:01,317 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 08:00:01,317 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 09:00:00 UTC)" executed successfully 2026-09-01 09:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 10:00:00 UTC)" (scheduled at 2026-09-01 09:00:00+00:00) 2026-09-01 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-01 09:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 09:00:01,030 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 09:00:01,032 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 09:00:01,034 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 09:00:01,034 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 09:00:01,101 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 09:00:01,188 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 09:00:01,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 10:00:00 UTC)" executed successfully 2026-09-01 10:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 11:00:00 UTC)" (scheduled at 2026-09-01 10:00:00+00:00) 2026-09-01 10:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-01 10:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 10:00:02,775 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 10:00:02,776 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 10:00:02,778 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 10:00:02,778 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 10:00:02,812 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 10:00:02,861 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 10:00:02,862 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 11:00:00 UTC)" executed successfully 2026-09-01 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 12:00:00 UTC)" (scheduled at 2026-09-01 11:00:00+00:00) 2026-09-01 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-01 11:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 11:00:00,996 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 11:00:00,998 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 11:00:01,001 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 11:00:01,002 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 11:00:01,060 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 11:00:01,104 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 11:00:01,105 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 12:00:00 UTC)" executed successfully 2026-09-01 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 13:00:00 UTC)" (scheduled at 2026-09-01 12:00:00+00:00) 2026-09-01 12:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-01 12:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 12:00:01,284 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 12:00:01,285 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 12:00:01,288 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 12:00:01,288 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 12:00:01,352 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 12:00:01,416 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 12:00:01,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 13:00:00 UTC)" executed successfully 2026-09-01 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 14:00:00 UTC)" (scheduled at 2026-09-01 13:00:00+00:00) 2026-09-01 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-01 13:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 13:00:01,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 13:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 13:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 13:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 13:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 13:00:01,254 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 13:00:01,254 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 14:00:00 UTC)" executed successfully 2026-09-01 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 15:00:00 UTC)" (scheduled at 2026-09-01 14:00:00+00:00) 2026-09-01 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-01 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 14:00:01,514 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 14:00:01,516 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 14:00:01,520 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 14:00:01,520 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 14:00:01,591 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 14:00:01,678 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 14:00:01,679 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 15:00:00 UTC)" executed successfully 2026-09-01 15:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 16:00:00 UTC)" (scheduled at 2026-09-01 15:00:00+00:00) 2026-09-01 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-01 15:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 15:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 15:00:01,199 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 15:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 15:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 15:00:01,269 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 15:00:01,350 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 15:00:01,350 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 16:00:00 UTC)" executed successfully 2026-09-01 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 17:00:00 UTC)" (scheduled at 2026-09-01 16:00:00+00:00) 2026-09-01 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-01 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 16:00:02,395 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 16:00:02,396 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 16:00:02,400 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 16:00:02,400 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 16:00:02,463 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 16:00:02,526 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 16:00:02,527 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 17:00:00 UTC)" executed successfully 2026-09-01 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 18:00:00 UTC)" (scheduled at 2026-09-01 17:00:00+00:00) 2026-09-01 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-01 17:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 17:00:01,254 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 17:00:01,256 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 17:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 17:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 17:00:01,312 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 17:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 17:00:01,373 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 18:00:00 UTC)" executed successfully 2026-09-01 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 19:00:00 UTC)" (scheduled at 2026-09-01 18:00:00+00:00) 2026-09-01 18:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-01 18:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 18:00:01,349 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 18:00:01,351 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 18:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 18:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 18:00:01,419 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 18:00:01,508 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 18:00:01,509 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 19:00:00 UTC)" executed successfully 2026-09-01 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 20:00:00 UTC)" (scheduled at 2026-09-01 19:00:00+00:00) 2026-09-01 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-01 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 19:00:01,524 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 19:00:01,526 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 19:00:01,529 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 19:00:01,529 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 19:00:01,607 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 19:00:01,687 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 19:00:01,688 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 20:00:00 UTC)" executed successfully 2026-09-01 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 21:00:00 UTC)" (scheduled at 2026-09-01 20:00:00+00:00) 2026-09-01 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-01 20:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 20:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 20:00:01,352 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 20:00:01,357 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 20:00:01,357 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 20:00:01,430 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 20:00:01,501 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 20:00:01,501 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 21:00:00 UTC)" executed successfully 2026-09-01 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 22:00:00 UTC)" (scheduled at 2026-09-01 21:00:00+00:00) 2026-09-01 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-01 21:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 21:00:01,450 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 21:00:01,453 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 21:00:01,456 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 21:00:01,457 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 21:00:01,525 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 21:00:01,607 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 21:00:01,607 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 22:00:00 UTC)" executed successfully 2026-09-01 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 23:00:00 UTC)" (scheduled at 2026-09-01 22:00:00+00:00) 2026-09-01 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-01 22:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 22:00:01,771 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 22:00:01,773 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 22:00:01,776 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 22:00:01,777 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 22:00:01,842 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 22:00:01,922 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 22:00:01,923 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-01 23:00:00 UTC)" executed successfully 2026-09-01 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 00:00:00 UTC)" (scheduled at 2026-09-01 23:00:00+00:00) 2026-09-01 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-01 23:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-01 23:00:01,193 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-01 23:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-09-01 23:00:01,205 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-01 23:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-01 23:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-01 23:00:01,350 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-01 23:00:01,350 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 00:00:00 UTC)" executed successfully 2026-09-02 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 01:00:00 UTC)" (scheduled at 2026-09-02 00:00:00+00:00) 2026-09-02 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 00:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 00:00:00,939 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 00:00:00,941 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 00:00:00,944 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 00:00:00,945 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 00:00:00,997 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 00:00:01,066 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 00:00:01,067 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 01:00:00 UTC)" executed successfully 2026-09-02 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 02:00:00 UTC)" (scheduled at 2026-09-02 01:00:00+00:00) 2026-09-02 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-02 01:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 01:00:01,041 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 01:00:01,042 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 01:00:01,045 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 01:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 01:00:01,106 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 01:00:01,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 01:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 02:00:00 UTC)" executed successfully 2026-09-02 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 03:00:00 UTC)" (scheduled at 2026-09-02 02:00:00+00:00) 2026-09-02 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 02:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 02:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 02:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 02:00:01,225 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 02:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 02:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 02:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 02:00:01,353 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 03:00:00 UTC)" executed successfully 2026-09-02 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 04:00:00 UTC)" (scheduled at 2026-09-02 03:00:00+00:00) 2026-09-02 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-02 03:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 03:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 03:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 03:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 03:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 03:00:01,175 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 03:00:01,234 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 03:00:01,234 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 04:00:00 UTC)" executed successfully 2026-09-02 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 05:00:00 UTC)" (scheduled at 2026-09-02 04:00:00+00:00) 2026-09-02 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-02 04:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 04:00:01,678 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 04:00:01,682 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 04:00:01,686 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 04:00:01,686 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 04:00:01,752 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 04:00:01,856 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 04:00:01,857 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 05:00:00 UTC)" executed successfully 2026-09-02 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 06:00:00 UTC)" (scheduled at 2026-09-02 05:00:00+00:00) 2026-09-02 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 05:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 05:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 05:00:01,127 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 05:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 05:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 05:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 05:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 05:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 06:00:00 UTC)" executed successfully 2026-09-02 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 07:00:00 UTC)" (scheduled at 2026-09-02 06:00:00+00:00) 2026-09-02 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-02 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 06:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 06:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 06:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 06:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 06:00:01,222 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 06:00:01,298 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 06:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 07:00:00 UTC)" executed successfully 2026-09-02 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 08:00:00 UTC)" (scheduled at 2026-09-02 07:00:00+00:00) 2026-09-02 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-02 07:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 07:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 07:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 07:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 07:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 07:00:01,178 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 07:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 07:00:01,232 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 08:00:00 UTC)" executed successfully 2026-09-02 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 09:00:00 UTC)" (scheduled at 2026-09-02 08:00:00+00:00) 2026-09-02 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-02 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 08:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 08:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 08:00:01,231 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 08:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 08:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 08:00:01,372 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 08:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 09:00:00 UTC)" executed successfully 2026-09-02 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 10:00:00 UTC)" (scheduled at 2026-09-02 09:00:00+00:00) 2026-09-02 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-02 09:00:00,111 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 09:00:01,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 09:00:01,346 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 09:00:01,348 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 09:00:01,348 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 09:00:01,398 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 09:00:01,462 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 09:00:01,462 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 10:00:00 UTC)" executed successfully 2026-09-02 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 11:00:00 UTC)" (scheduled at 2026-09-02 10:00:00+00:00) 2026-09-02 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-02 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 10:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 10:00:01,174 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 10:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 10:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 10:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 10:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 10:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 11:00:00 UTC)" executed successfully 2026-09-02 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 12:00:00 UTC)" (scheduled at 2026-09-02 11:00:00+00:00) 2026-09-02 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-02 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 11:00:01,596 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 11:00:01,597 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 11:00:01,600 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 11:00:01,600 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 11:00:01,652 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 11:00:01,725 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 11:00:01,725 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 12:00:00 UTC)" executed successfully 2026-09-02 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 13:00:00 UTC)" (scheduled at 2026-09-02 12:00:00+00:00) 2026-09-02 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 12:00:01,241 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 12:00:01,242 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 12:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 12:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 12:00:01,295 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 12:00:01,358 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 12:00:01,358 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 13:00:00 UTC)" executed successfully 2026-09-02 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 14:00:00 UTC)" (scheduled at 2026-09-02 13:00:00+00:00) 2026-09-02 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 13:00:01,887 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 13:00:01,889 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 13:00:01,892 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 13:00:01,892 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 13:00:01,953 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 13:00:02,028 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 13:00:02,029 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 14:00:00 UTC)" executed successfully 2026-09-02 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 15:00:00 UTC)" (scheduled at 2026-09-02 14:00:00+00:00) 2026-09-02 14:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-02 14:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 14:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 14:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 14:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 14:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 14:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 14:00:01,307 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 14:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 15:00:00 UTC)" executed successfully 2026-09-02 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 16:00:00 UTC)" (scheduled at 2026-09-02 15:00:00+00:00) 2026-09-02 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 15:00:01,833 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 15:00:01,835 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 15:00:01,838 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 15:00:01,838 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 15:00:01,908 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 15:00:01,992 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 15:00:01,993 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 16:00:00 UTC)" executed successfully 2026-09-02 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 17:00:00 UTC)" (scheduled at 2026-09-02 16:00:00+00:00) 2026-09-02 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-02 16:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 16:00:01,132 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 16:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 16:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 16:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 16:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 16:00:01,255 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 16:00:01,255 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 17:00:00 UTC)" executed successfully 2026-09-02 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 18:00:00 UTC)" (scheduled at 2026-09-02 17:00:00+00:00) 2026-09-02 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-02 17:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 17:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 17:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 17:00:01,163 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 17:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 17:00:01,215 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 17:00:01,289 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 17:00:01,290 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 18:00:00 UTC)" executed successfully 2026-09-02 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 19:00:00 UTC)" (scheduled at 2026-09-02 18:00:00+00:00) 2026-09-02 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 18:00:01,509 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 18:00:01,511 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 18:00:01,516 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 18:00:01,517 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 18:00:01,593 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 18:00:01,679 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 18:00:01,680 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 19:00:00 UTC)" executed successfully 2026-09-02 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 20:00:00 UTC)" (scheduled at 2026-09-02 19:00:00+00:00) 2026-09-02 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-02 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 19:00:01,645 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 19:00:01,647 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 19:00:01,651 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 19:00:01,651 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 19:00:01,718 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 19:00:01,807 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 19:00:01,808 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 20:00:00 UTC)" executed successfully 2026-09-02 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 21:00:00 UTC)" (scheduled at 2026-09-02 20:00:00+00:00) 2026-09-02 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-02 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 20:00:01,066 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 20:00:01,067 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 20:00:01,071 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 20:00:01,071 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 20:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 20:00:01,227 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 20:00:01,228 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 21:00:00 UTC)" executed successfully 2026-09-02 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 22:00:00 UTC)" (scheduled at 2026-09-02 21:00:00+00:00) 2026-09-02 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-02 21:00:00,110 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 21:00:01,797 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 21:00:01,799 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 21:00:01,804 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 21:00:01,804 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 21:00:01,856 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 21:00:01,931 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 21:00:01,931 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 22:00:00 UTC)" executed successfully 2026-09-02 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 23:00:00 UTC)" (scheduled at 2026-09-02 22:00:00+00:00) 2026-09-02 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-02 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 22:00:01,059 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 22:00:01,060 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 22:00:01,063 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 22:00:01,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 22:00:01,129 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 22:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 22:00:01,205 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-02 23:00:00 UTC)" executed successfully 2026-09-02 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 00:00:00 UTC)" (scheduled at 2026-09-02 23:00:00+00:00) 2026-09-02 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-02 23:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-02 23:00:00,999 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-02 23:00:01,000 INFO [fb-sync.worker] Scraped 50 posts 2026-09-02 23:00:01,002 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-02 23:00:01,002 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-02 23:00:01,065 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-02 23:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-02 23:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 00:00:00 UTC)" executed successfully 2026-09-03 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 01:00:00 UTC)" (scheduled at 2026-09-03 00:00:00+00:00) 2026-09-03 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-03 00:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 00:00:01,008 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 00:00:01,009 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 00:00:01,013 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 00:00:01,013 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 00:00:01,082 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 00:00:01,162 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 00:00:01,163 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 01:00:00 UTC)" executed successfully 2026-09-03 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 02:00:00 UTC)" (scheduled at 2026-09-03 01:00:00+00:00) 2026-09-03 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-03 01:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 01:00:01,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 01:00:01,091 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 01:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 01:00:01,095 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 01:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 01:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 01:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 02:00:00 UTC)" executed successfully 2026-09-03 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 03:00:00 UTC)" (scheduled at 2026-09-03 02:00:00+00:00) 2026-09-03 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-03 02:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 02:00:01,628 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 02:00:01,630 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 02:00:01,632 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 02:00:01,633 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 02:00:01,690 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 02:00:01,764 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 02:00:01,765 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 03:00:00 UTC)" executed successfully 2026-09-03 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 04:00:00 UTC)" (scheduled at 2026-09-03 03:00:00+00:00) 2026-09-03 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-03 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 03:00:01,006 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 03:00:01,008 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 03:00:01,012 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 03:00:01,012 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 03:00:01,055 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 03:00:01,114 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 03:00:01,114 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 04:00:00 UTC)" executed successfully 2026-09-03 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 05:00:00 UTC)" (scheduled at 2026-09-03 04:00:00+00:00) 2026-09-03 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-03 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 04:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 04:00:01,071 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 04:00:01,074 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 04:00:01,074 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 04:00:01,113 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 04:00:01,155 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 04:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 05:00:00 UTC)" executed successfully 2026-09-03 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 06:00:00 UTC)" (scheduled at 2026-09-03 05:00:00+00:00) 2026-09-03 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-03 05:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 05:00:01,020 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 05:00:01,022 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 05:00:01,024 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 05:00:01,024 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 05:00:01,074 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 05:00:01,134 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 05:00:01,134 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 06:00:00 UTC)" executed successfully 2026-09-03 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 07:00:00 UTC)" (scheduled at 2026-09-03 06:00:00+00:00) 2026-09-03 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-03 06:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 06:00:01,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 06:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 06:00:01,125 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 06:00:01,125 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 06:00:01,182 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 06:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 06:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 07:00:00 UTC)" executed successfully 2026-09-03 07:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 08:00:00 UTC)" (scheduled at 2026-09-03 07:00:00+00:00) 2026-09-03 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-03 07:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 07:00:01,140 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 07:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 07:00:01,146 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 07:00:01,147 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 07:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 07:00:01,265 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 07:00:01,266 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 08:00:00 UTC)" executed successfully 2026-09-03 08:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 09:00:00 UTC)" (scheduled at 2026-09-03 08:00:00+00:00) 2026-09-03 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-03 08:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 08:00:01,058 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 08:00:01,061 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 08:00:01,065 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 08:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 08:00:01,150 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 08:00:01,242 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 08:00:01,243 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 09:00:00 UTC)" executed successfully 2026-09-03 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 10:00:00 UTC)" (scheduled at 2026-09-03 09:00:00+00:00) 2026-09-03 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-03 09:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 09:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 09:00:01,231 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 09:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 09:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 09:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 09:00:01,369 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 09:00:01,370 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 10:00:00 UTC)" executed successfully 2026-09-03 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 11:00:00 UTC)" (scheduled at 2026-09-03 10:00:00+00:00) 2026-09-03 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-03 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 10:00:00,971 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 10:00:00,973 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 10:00:00,977 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 10:00:00,977 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 10:00:01,033 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 10:00:01,094 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 10:00:01,095 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 11:00:00 UTC)" executed successfully 2026-09-03 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 12:00:00 UTC)" (scheduled at 2026-09-03 11:00:00+00:00) 2026-09-03 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-03 11:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 11:00:01,050 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 11:00:01,052 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 11:00:01,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 11:00:01,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 11:00:01,107 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 11:00:01,202 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 11:00:01,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 12:00:00 UTC)" executed successfully 2026-09-03 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 13:00:00 UTC)" (scheduled at 2026-09-03 12:00:00+00:00) 2026-09-03 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-03 12:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 12:00:01,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 12:00:01,053 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 12:00:01,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 12:00:01,057 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 12:00:01,115 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 12:00:01,185 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 12:00:01,186 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 13:00:00 UTC)" executed successfully 2026-09-03 13:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 14:00:00 UTC)" (scheduled at 2026-09-03 13:00:00+00:00) 2026-09-03 13:00:00,021 INFO [fb-sync] Starting FB sync... 2026-09-03 13:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 13:00:03,492 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 13:00:03,495 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 13:00:03,499 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 13:00:03,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 13:00:03,573 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 13:00:03,665 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 13:00:03,666 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 14:00:00 UTC)" executed successfully 2026-09-03 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 15:00:00 UTC)" (scheduled at 2026-09-03 14:00:00+00:00) 2026-09-03 14:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-03 14:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 14:00:01,911 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 14:00:01,912 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 14:00:01,916 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 14:00:01,916 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 14:00:01,988 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 14:00:02,064 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 14:00:02,064 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 15:00:00 UTC)" executed successfully 2026-09-03 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 16:00:00 UTC)" (scheduled at 2026-09-03 15:00:00+00:00) 2026-09-03 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-03 15:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 15:00:01,789 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 15:00:01,791 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 15:00:01,793 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 15:00:01,794 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 15:00:01,863 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 15:00:01,950 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 15:00:01,950 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 16:00:00 UTC)" executed successfully 2026-09-03 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 17:00:00 UTC)" (scheduled at 2026-09-03 16:00:00+00:00) 2026-09-03 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-03 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 16:00:01,738 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 16:00:01,739 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 16:00:01,743 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 16:00:01,744 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 16:00:01,805 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 16:00:01,888 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 16:00:01,888 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 17:00:00 UTC)" executed successfully 2026-09-03 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 18:00:00 UTC)" (scheduled at 2026-09-03 17:00:00+00:00) 2026-09-03 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-03 17:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 17:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 17:00:01,123 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 17:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 17:00:01,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 17:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 17:00:01,292 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 17:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 18:00:00 UTC)" executed successfully 2026-09-03 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 19:00:00 UTC)" (scheduled at 2026-09-03 18:00:00+00:00) 2026-09-03 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-03 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 18:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 18:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 18:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 18:00:01,201 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 18:00:01,286 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 18:00:01,379 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 18:00:01,379 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 19:00:00 UTC)" executed successfully 2026-09-03 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 20:00:00 UTC)" (scheduled at 2026-09-03 19:00:00+00:00) 2026-09-03 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-03 19:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 19:00:01,462 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 19:00:01,464 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 19:00:01,469 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 19:00:01,469 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 19:00:01,533 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 19:00:01,599 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 19:00:01,600 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 20:00:00 UTC)" executed successfully 2026-09-03 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 21:00:00 UTC)" (scheduled at 2026-09-03 20:00:00+00:00) 2026-09-03 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-03 20:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 20:00:01,066 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 20:00:01,068 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 20:00:01,073 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 20:00:01,073 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 20:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 20:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 20:00:01,222 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 21:00:00 UTC)" executed successfully 2026-09-03 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 22:00:00 UTC)" (scheduled at 2026-09-03 21:00:00+00:00) 2026-09-03 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-03 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 21:00:01,107 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 21:00:01,109 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 21:00:01,112 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 21:00:01,112 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 21:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 21:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 21:00:01,233 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 22:00:00 UTC)" executed successfully 2026-09-03 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 23:00:00 UTC)" (scheduled at 2026-09-03 22:00:00+00:00) 2026-09-03 22:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-03 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 22:00:01,040 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 22:00:01,042 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 22:00:01,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 22:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 22:00:01,095 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 22:00:01,168 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 22:00:01,168 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-03 23:00:00 UTC)" executed successfully 2026-09-03 23:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 00:00:00 UTC)" (scheduled at 2026-09-03 23:00:00+00:00) 2026-09-03 23:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-03 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-03 23:00:01,104 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-03 23:00:01,106 INFO [fb-sync.worker] Scraped 50 posts 2026-09-03 23:00:01,109 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-03 23:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-03 23:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-03 23:00:01,233 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-03 23:00:01,233 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 00:00:00 UTC)" executed successfully 2026-09-04 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 01:00:00 UTC)" (scheduled at 2026-09-04 00:00:00+00:00) 2026-09-04 00:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-04 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 00:00:01,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 00:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 00:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 00:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 00:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 00:00:01,235 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 00:00:01,235 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 01:00:00 UTC)" executed successfully 2026-09-04 01:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 02:00:00 UTC)" (scheduled at 2026-09-04 01:00:00+00:00) 2026-09-04 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-04 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 01:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 01:00:01,055 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 01:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 01:00:01,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 01:00:01,112 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 01:00:01,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 01:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 02:00:00 UTC)" executed successfully 2026-09-04 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 03:00:00 UTC)" (scheduled at 2026-09-04 02:00:00+00:00) 2026-09-04 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-04 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 02:00:01,785 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 02:00:01,786 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 02:00:01,789 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 02:00:01,789 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 02:00:01,845 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 02:00:01,912 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 02:00:01,913 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 03:00:00 UTC)" executed successfully 2026-09-04 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 04:00:00 UTC)" (scheduled at 2026-09-04 03:00:00+00:00) 2026-09-04 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-04 03:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 03:00:01,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 03:00:01,139 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 03:00:01,142 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 03:00:01,142 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 03:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 03:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 03:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 04:00:00 UTC)" executed successfully 2026-09-04 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 05:00:00 UTC)" (scheduled at 2026-09-04 04:00:00+00:00) 2026-09-04 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-04 04:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 04:00:01,923 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 04:00:01,925 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 04:00:01,928 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 04:00:01,929 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 04:00:01,993 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 04:00:02,077 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 04:00:02,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 05:00:00 UTC)" executed successfully 2026-09-04 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 06:00:00 UTC)" (scheduled at 2026-09-04 05:00:00+00:00) 2026-09-04 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-04 05:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 05:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 05:00:01,110 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 05:00:01,113 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 05:00:01,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 05:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 05:00:01,316 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 05:00:01,316 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 06:00:00 UTC)" executed successfully 2026-09-04 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 07:00:00 UTC)" (scheduled at 2026-09-04 06:00:00+00:00) 2026-09-04 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-04 06:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 06:00:02,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 06:00:02,218 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 06:00:02,222 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 06:00:02,222 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 06:00:02,296 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 06:00:02,383 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 06:00:02,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 07:00:00 UTC)" executed successfully 2026-09-04 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 08:00:00 UTC)" (scheduled at 2026-09-04 07:00:00+00:00) 2026-09-04 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-04 07:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 07:00:01,058 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 07:00:01,060 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 07:00:01,063 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 07:00:01,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 07:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 07:00:01,378 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 07:00:01,378 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 08:00:00 UTC)" executed successfully 2026-09-04 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 09:00:00 UTC)" (scheduled at 2026-09-04 08:00:00+00:00) 2026-09-04 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-04 08:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 08:00:01,007 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 08:00:01,008 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 08:00:01,010 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 08:00:01,010 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 08:00:01,062 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 08:00:01,118 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 08:00:01,118 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 09:00:00 UTC)" executed successfully 2026-09-04 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 10:00:00 UTC)" (scheduled at 2026-09-04 09:00:00+00:00) 2026-09-04 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-04 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 09:00:01,512 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 09:00:01,514 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 09:00:01,518 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 09:00:01,518 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 09:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 09:00:01,650 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 09:00:01,651 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 10:00:00 UTC)" executed successfully 2026-09-04 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 11:00:00 UTC)" (scheduled at 2026-09-04 10:00:00+00:00) 2026-09-04 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-04 10:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 10:00:01,639 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 10:00:01,641 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 10:00:01,644 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 10:00:01,644 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 10:00:01,711 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 10:00:01,787 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 10:00:01,787 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 11:00:00 UTC)" executed successfully 2026-09-04 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 12:00:00 UTC)" (scheduled at 2026-09-04 11:00:00+00:00) 2026-09-04 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-04 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 11:00:02,050 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 11:00:02,052 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 11:00:02,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 11:00:02,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 11:00:02,124 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 11:00:02,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 11:00:02,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 12:00:00 UTC)" executed successfully 2026-09-04 12:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 13:00:00 UTC)" (scheduled at 2026-09-04 12:00:00+00:00) 2026-09-04 12:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-04 12:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 12:00:01,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 12:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 12:00:01,125 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 12:00:01,125 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 12:00:01,187 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 12:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 12:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 13:00:00 UTC)" executed successfully 2026-09-04 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 14:00:00 UTC)" (scheduled at 2026-09-04 13:00:00+00:00) 2026-09-04 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-04 13:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 13:00:01,938 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 13:00:01,941 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 13:00:01,944 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 13:00:01,944 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 13:00:02,006 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 13:00:02,074 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 13:00:02,074 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 14:00:00 UTC)" executed successfully 2026-09-04 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 15:00:00 UTC)" (scheduled at 2026-09-04 14:00:00+00:00) 2026-09-04 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-04 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 14:00:01,348 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 14:00:01,351 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 14:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 14:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 14:00:01,419 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 14:00:01,495 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 14:00:01,495 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 15:00:00 UTC)" executed successfully 2026-09-04 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 16:00:00 UTC)" (scheduled at 2026-09-04 15:00:00+00:00) 2026-09-04 15:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-04 15:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 15:00:01,473 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 15:00:01,476 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 15:00:01,479 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 15:00:01,479 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 15:00:01,541 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 15:00:01,599 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 15:00:01,599 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 16:00:00 UTC)" executed successfully 2026-09-04 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 17:00:00 UTC)" (scheduled at 2026-09-04 16:00:00+00:00) 2026-09-04 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-04 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 16:00:01,190 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 16:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 16:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 16:00:01,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 16:00:01,228 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 16:00:01,271 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 16:00:01,272 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 17:00:00 UTC)" executed successfully 2026-09-04 17:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 18:00:00 UTC)" (scheduled at 2026-09-04 17:00:00+00:00) 2026-09-04 17:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-04 17:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 17:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 17:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 17:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 17:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 17:00:01,276 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 17:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 17:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 18:00:00 UTC)" executed successfully 2026-09-04 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 19:00:00 UTC)" (scheduled at 2026-09-04 18:00:00+00:00) 2026-09-04 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-04 18:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 18:00:01,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 18:00:01,164 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 18:00:01,168 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 18:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 18:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 18:00:01,297 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 18:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 19:00:00 UTC)" executed successfully 2026-09-04 19:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 20:00:00 UTC)" (scheduled at 2026-09-04 19:00:00+00:00) 2026-09-04 19:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-04 19:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 19:00:00,971 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 19:00:00,973 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 19:00:00,975 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 19:00:00,975 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 19:00:01,028 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 19:00:01,094 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 19:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 20:00:00 UTC)" executed successfully 2026-09-04 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 21:00:00 UTC)" (scheduled at 2026-09-04 20:00:00+00:00) 2026-09-04 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-04 20:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 20:00:00,916 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 20:00:00,917 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 20:00:00,920 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 20:00:00,920 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 20:00:00,976 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 20:00:01,045 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 20:00:01,046 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 21:00:00 UTC)" executed successfully 2026-09-04 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 22:00:00 UTC)" (scheduled at 2026-09-04 21:00:00+00:00) 2026-09-04 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-04 21:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 21:00:01,234 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 21:00:01,235 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 21:00:01,237 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 21:00:01,237 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 21:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 21:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 21:00:01,346 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 22:00:00 UTC)" executed successfully 2026-09-04 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 23:00:00 UTC)" (scheduled at 2026-09-04 22:00:00+00:00) 2026-09-04 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-04 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 22:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 22:00:01,030 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 22:00:01,033 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 22:00:01,033 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 22:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 22:00:01,133 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 22:00:01,133 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-04 23:00:00 UTC)" executed successfully 2026-09-04 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 00:00:00 UTC)" (scheduled at 2026-09-04 23:00:00+00:00) 2026-09-04 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-04 23:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-04 23:00:01,264 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-04 23:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-09-04 23:00:01,268 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-04 23:00:01,269 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-04 23:00:01,325 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-04 23:00:01,409 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-04 23:00:01,410 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 00:00:00 UTC)" executed successfully 2026-09-05 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 01:00:00 UTC)" (scheduled at 2026-09-05 00:00:00+00:00) 2026-09-05 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 00:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 00:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 00:00:01,030 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 00:00:01,032 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 00:00:01,033 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 00:00:01,088 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 00:00:01,181 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 00:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 01:00:00 UTC)" executed successfully 2026-09-05 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 02:00:00 UTC)" (scheduled at 2026-09-05 01:00:00+00:00) 2026-09-05 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-05 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 01:00:00,928 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 01:00:00,929 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 01:00:00,932 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 01:00:00,932 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 01:00:00,973 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 01:00:01,033 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 01:00:01,034 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 02:00:00 UTC)" executed successfully 2026-09-05 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 03:00:00 UTC)" (scheduled at 2026-09-05 02:00:00+00:00) 2026-09-05 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 02:00:00,968 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 02:00:00,969 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 02:00:00,973 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 02:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 02:00:01,030 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 02:00:01,095 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 02:00:01,095 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 03:00:00 UTC)" executed successfully 2026-09-05 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 04:00:00 UTC)" (scheduled at 2026-09-05 03:00:00+00:00) 2026-09-05 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-05 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 03:00:00,961 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 03:00:00,962 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 03:00:00,964 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 03:00:00,964 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 03:00:01,007 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 03:00:01,062 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 03:00:01,062 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 04:00:00 UTC)" executed successfully 2026-09-05 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 05:00:00 UTC)" (scheduled at 2026-09-05 04:00:00+00:00) 2026-09-05 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-05 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 04:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 04:00:01,039 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 04:00:01,041 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 04:00:01,041 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 04:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 04:00:01,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 04:00:01,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 05:00:00 UTC)" executed successfully 2026-09-05 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 06:00:00 UTC)" (scheduled at 2026-09-05 05:00:00+00:00) 2026-09-05 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-05 05:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 05:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 05:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 05:00:01,033 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 05:00:01,034 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 05:00:01,090 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 05:00:01,159 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 05:00:01,159 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 06:00:00 UTC)" executed successfully 2026-09-05 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 07:00:00 UTC)" (scheduled at 2026-09-05 06:00:00+00:00) 2026-09-05 06:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-05 06:00:00,135 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 06:00:01,383 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 06:00:01,386 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 06:00:01,389 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 06:00:01,389 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 06:00:01,470 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 06:00:01,516 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 06:00:01,516 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 07:00:00 UTC)" executed successfully 2026-09-05 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 08:00:00 UTC)" (scheduled at 2026-09-05 07:00:00+00:00) 2026-09-05 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-05 07:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 07:00:01,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 07:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 07:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 07:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 07:00:01,191 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 07:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 07:00:01,274 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 08:00:00 UTC)" executed successfully 2026-09-05 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 09:00:00 UTC)" (scheduled at 2026-09-05 08:00:00+00:00) 2026-09-05 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 08:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 08:00:01,430 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 08:00:01,432 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 08:00:01,436 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 08:00:01,436 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 08:00:01,501 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 08:00:01,576 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 08:00:01,577 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 09:00:00 UTC)" executed successfully 2026-09-05 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 10:00:00 UTC)" (scheduled at 2026-09-05 09:00:00+00:00) 2026-09-05 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 09:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 09:00:01,422 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 09:00:01,423 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 09:00:01,426 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 09:00:01,426 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 09:00:01,473 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 09:00:01,545 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 09:00:01,545 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 10:00:00 UTC)" executed successfully 2026-09-05 10:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 11:00:00 UTC)" (scheduled at 2026-09-05 10:00:00+00:00) 2026-09-05 10:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-05 10:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 10:00:00,989 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 10:00:00,992 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 10:00:00,995 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 10:00:00,995 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 10:00:01,061 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 10:00:01,112 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 10:00:01,112 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 11:00:00 UTC)" executed successfully 2026-09-05 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 12:00:00 UTC)" (scheduled at 2026-09-05 11:00:00+00:00) 2026-09-05 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-05 11:00:00,116 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 11:00:01,078 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 11:00:01,079 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 11:00:01,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 11:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 11:00:01,133 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 11:00:01,171 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 11:00:01,171 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 12:00:00 UTC)" executed successfully 2026-09-05 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 13:00:00 UTC)" (scheduled at 2026-09-05 12:00:00+00:00) 2026-09-05 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 12:00:01,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 12:00:01,054 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 12:00:01,057 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 12:00:01,057 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 12:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 12:00:01,176 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 12:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 13:00:00 UTC)" executed successfully 2026-09-05 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 14:00:00 UTC)" (scheduled at 2026-09-05 13:00:00+00:00) 2026-09-05 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-05 13:00:00,114 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 13:00:01,511 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 13:00:01,512 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 13:00:01,516 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 13:00:01,516 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 13:00:01,608 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 13:00:01,683 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 13:00:01,683 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 14:00:00 UTC)" executed successfully 2026-09-05 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 15:00:00 UTC)" (scheduled at 2026-09-05 14:00:00+00:00) 2026-09-05 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-05 14:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 14:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 14:00:01,098 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 14:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 14:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 14:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 14:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 14:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 15:00:00 UTC)" executed successfully 2026-09-05 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 16:00:00 UTC)" (scheduled at 2026-09-05 15:00:00+00:00) 2026-09-05 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-05 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 15:00:01,631 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 15:00:01,632 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 15:00:01,635 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 15:00:01,635 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 15:00:01,693 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 15:00:01,750 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 15:00:01,750 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 16:00:00 UTC)" executed successfully 2026-09-05 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 17:00:00 UTC)" (scheduled at 2026-09-05 16:00:00+00:00) 2026-09-05 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-05 16:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 16:00:01,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 16:00:01,174 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 16:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 16:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 16:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 16:00:01,299 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 16:00:01,299 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 17:00:00 UTC)" executed successfully 2026-09-05 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 18:00:00 UTC)" (scheduled at 2026-09-05 17:00:00+00:00) 2026-09-05 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-05 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 17:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 17:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 17:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 17:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 17:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 17:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 17:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 18:00:00 UTC)" executed successfully 2026-09-05 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 19:00:00 UTC)" (scheduled at 2026-09-05 18:00:00+00:00) 2026-09-05 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-05 18:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 18:00:02,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 18:00:02,365 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 18:00:02,369 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 18:00:02,369 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 18:00:02,433 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 18:00:02,502 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 18:00:02,502 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 19:00:00 UTC)" executed successfully 2026-09-05 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 20:00:00 UTC)" (scheduled at 2026-09-05 19:00:00+00:00) 2026-09-05 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 19:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 19:00:03,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 19:00:03,127 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 19:00:03,129 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 19:00:03,129 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 19:00:03,197 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 19:00:03,258 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 19:00:03,258 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 20:00:00 UTC)" executed successfully 2026-09-05 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 21:00:00 UTC)" (scheduled at 2026-09-05 20:00:00+00:00) 2026-09-05 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-05 20:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 20:00:00,904 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 20:00:00,905 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 20:00:00,907 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 20:00:00,907 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 20:00:00,999 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 20:00:01,089 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 20:00:01,089 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 21:00:00 UTC)" executed successfully 2026-09-05 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 22:00:00 UTC)" (scheduled at 2026-09-05 21:00:00+00:00) 2026-09-05 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-05 21:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 21:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 21:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 21:00:01,116 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 21:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 21:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 21:00:01,257 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 21:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 22:00:00 UTC)" executed successfully 2026-09-05 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 23:00:00 UTC)" (scheduled at 2026-09-05 22:00:00+00:00) 2026-09-05 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-05 22:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 22:00:00,990 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 22:00:00,992 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 22:00:00,995 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 22:00:00,996 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 22:00:01,054 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 22:00:01,129 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 22:00:01,129 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-05 23:00:00 UTC)" executed successfully 2026-09-05 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 00:00:00 UTC)" (scheduled at 2026-09-05 23:00:00+00:00) 2026-09-05 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-05 23:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-05 23:00:01,049 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-05 23:00:01,049 INFO [fb-sync.worker] Scraped 50 posts 2026-09-05 23:00:01,052 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-05 23:00:01,052 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-05 23:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-05 23:00:01,166 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-05 23:00:01,166 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 00:00:00 UTC)" executed successfully 2026-09-06 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 01:00:00 UTC)" (scheduled at 2026-09-06 00:00:00+00:00) 2026-09-06 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-06 00:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 00:00:00,959 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 00:00:00,960 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 00:00:00,963 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 00:00:00,964 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 00:00:01,021 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 00:00:01,088 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 00:00:01,089 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 01:00:00 UTC)" executed successfully 2026-09-06 01:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 02:00:00 UTC)" (scheduled at 2026-09-06 01:00:00+00:00) 2026-09-06 01:00:00,023 INFO [fb-sync] Starting FB sync... 2026-09-06 01:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 01:00:01,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 01:00:01,065 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 01:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 01:00:01,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 01:00:01,120 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 01:00:01,179 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 01:00:01,179 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 02:00:00 UTC)" executed successfully 2026-09-06 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 03:00:00 UTC)" (scheduled at 2026-09-06 02:00:00+00:00) 2026-09-06 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-06 02:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 02:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 02:00:01,170 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 02:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 02:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 02:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 02:00:01,276 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 02:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 03:00:00 UTC)" executed successfully 2026-09-06 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 04:00:00 UTC)" (scheduled at 2026-09-06 03:00:00+00:00) 2026-09-06 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 03:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 03:00:01,173 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 03:00:01,175 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 03:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 03:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 03:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 03:00:01,326 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 03:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 04:00:00 UTC)" executed successfully 2026-09-06 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 05:00:00 UTC)" (scheduled at 2026-09-06 04:00:00+00:00) 2026-09-06 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-06 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 04:00:01,553 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 04:00:01,554 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 04:00:01,557 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 04:00:01,557 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 04:00:01,604 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 04:00:01,678 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 04:00:01,678 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 05:00:00 UTC)" executed successfully 2026-09-06 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 06:00:00 UTC)" (scheduled at 2026-09-06 05:00:00+00:00) 2026-09-06 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 05:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 05:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 05:00:01,085 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 05:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 05:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 05:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 05:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 05:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 06:00:00 UTC)" executed successfully 2026-09-06 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 07:00:00 UTC)" (scheduled at 2026-09-06 06:00:00+00:00) 2026-09-06 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-06 06:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 06:00:00,950 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 06:00:00,951 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 06:00:00,954 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 06:00:00,955 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 06:00:01,022 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 06:00:01,100 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 06:00:01,101 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 07:00:00 UTC)" executed successfully 2026-09-06 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 08:00:00 UTC)" (scheduled at 2026-09-06 07:00:00+00:00) 2026-09-06 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 07:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 07:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 07:00:01,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 07:00:01,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 07:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 07:00:01,204 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 07:00:01,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 08:00:00 UTC)" executed successfully 2026-09-06 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 09:00:00 UTC)" (scheduled at 2026-09-06 08:00:00+00:00) 2026-09-06 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-06 08:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 08:00:00,987 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 08:00:00,989 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 08:00:00,993 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 08:00:00,993 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 08:00:01,046 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 08:00:01,112 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 08:00:01,112 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 09:00:00 UTC)" executed successfully 2026-09-06 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 10:00:00 UTC)" (scheduled at 2026-09-06 09:00:00+00:00) 2026-09-06 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 09:00:01,448 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 09:00:01,449 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 09:00:01,452 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 09:00:01,452 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 09:00:01,501 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 09:00:01,560 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 09:00:01,560 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 10:00:00 UTC)" executed successfully 2026-09-06 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 11:00:00 UTC)" (scheduled at 2026-09-06 10:00:00+00:00) 2026-09-06 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-06 10:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 10:00:01,067 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 10:00:01,068 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 10:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 10:00:01,072 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 10:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 10:00:01,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 10:00:01,203 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 11:00:00 UTC)" executed successfully 2026-09-06 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 12:00:00 UTC)" (scheduled at 2026-09-06 11:00:00+00:00) 2026-09-06 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-06 11:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 11:00:01,380 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 11:00:01,383 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 11:00:01,384 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 11:00:01,385 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 11:00:01,439 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 11:00:01,509 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 11:00:01,510 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 12:00:00 UTC)" executed successfully 2026-09-06 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 13:00:00 UTC)" (scheduled at 2026-09-06 12:00:00+00:00) 2026-09-06 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 12:00:01,903 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 12:00:01,904 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 12:00:01,908 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 12:00:01,909 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 12:00:01,971 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 12:00:02,037 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 12:00:02,038 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 13:00:00 UTC)" executed successfully 2026-09-06 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 14:00:00 UTC)" (scheduled at 2026-09-06 13:00:00+00:00) 2026-09-06 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-06 13:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 13:00:02,236 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 13:00:02,239 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 13:00:02,241 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 13:00:02,241 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 13:00:02,329 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 13:00:02,413 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 13:00:02,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 14:00:00 UTC)" executed successfully 2026-09-06 14:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 15:00:00 UTC)" (scheduled at 2026-09-06 14:00:00+00:00) 2026-09-06 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-06 14:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 14:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 14:00:01,297 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 14:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 14:00:01,301 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 14:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 14:00:01,415 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 14:00:01,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 15:00:00 UTC)" executed successfully 2026-09-06 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 16:00:00 UTC)" (scheduled at 2026-09-06 15:00:00+00:00) 2026-09-06 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-06 15:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 15:00:02,253 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 15:00:02,255 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 15:00:02,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 15:00:02,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 15:00:02,315 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 15:00:02,369 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 15:00:02,370 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 16:00:00 UTC)" executed successfully 2026-09-06 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 17:00:00 UTC)" (scheduled at 2026-09-06 16:00:00+00:00) 2026-09-06 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 16:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 16:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 16:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 16:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 16:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 16:00:01,171 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 16:00:01,245 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 16:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 17:00:00 UTC)" executed successfully 2026-09-06 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 18:00:00 UTC)" (scheduled at 2026-09-06 17:00:00+00:00) 2026-09-06 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-06 17:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 17:00:02,428 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 17:00:02,429 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 17:00:02,432 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 17:00:02,432 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 17:00:02,518 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 17:00:02,597 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 17:00:02,598 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 18:00:00 UTC)" executed successfully 2026-09-06 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 19:00:00 UTC)" (scheduled at 2026-09-06 18:00:00+00:00) 2026-09-06 18:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-06 18:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 18:00:02,296 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 18:00:02,298 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 18:00:02,302 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 18:00:02,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 18:00:02,391 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 18:00:02,465 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 18:00:02,466 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 19:00:00 UTC)" executed successfully 2026-09-06 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 20:00:00 UTC)" (scheduled at 2026-09-06 19:00:00+00:00) 2026-09-06 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-06 19:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 19:00:01,652 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 19:00:01,654 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 19:00:01,657 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 19:00:01,657 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 19:00:01,724 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 19:00:01,787 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 19:00:01,787 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 20:00:00 UTC)" executed successfully 2026-09-06 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 21:00:00 UTC)" (scheduled at 2026-09-06 20:00:00+00:00) 2026-09-06 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-06 20:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 20:00:00,959 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 20:00:00,961 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 20:00:00,963 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 20:00:00,964 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 20:00:01,017 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 20:00:01,063 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 20:00:01,064 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 21:00:00 UTC)" executed successfully 2026-09-06 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 22:00:00 UTC)" (scheduled at 2026-09-06 21:00:00+00:00) 2026-09-06 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-06 21:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 21:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 21:00:01,214 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 21:00:01,217 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 21:00:01,218 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 21:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 21:00:01,330 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 21:00:01,330 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 22:00:00 UTC)" executed successfully 2026-09-06 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 23:00:00 UTC)" (scheduled at 2026-09-06 22:00:00+00:00) 2026-09-06 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-06 22:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 22:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 22:00:01,071 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 22:00:01,074 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 22:00:01,074 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 22:00:01,149 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 22:00:01,281 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 22:00:01,282 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-06 23:00:00 UTC)" executed successfully 2026-09-06 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 00:00:00 UTC)" (scheduled at 2026-09-06 23:00:00+00:00) 2026-09-06 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-06 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-06 23:00:00,902 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-06 23:00:00,904 INFO [fb-sync.worker] Scraped 50 posts 2026-09-06 23:00:00,906 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-06 23:00:00,907 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-06 23:00:00,959 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-06 23:00:01,018 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-06 23:00:01,018 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 00:00:00 UTC)" executed successfully 2026-09-07 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 01:00:00 UTC)" (scheduled at 2026-09-07 00:00:00+00:00) 2026-09-07 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-07 00:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 00:00:02,300 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 00:00:02,306 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 00:00:02,315 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 00:00:02,316 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 00:00:02,414 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 00:00:02,504 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 00:00:02,505 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 01:00:00 UTC)" executed successfully 2026-09-07 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 02:00:00 UTC)" (scheduled at 2026-09-07 01:00:00+00:00) 2026-09-07 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-07 01:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 01:00:00,933 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 01:00:00,934 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 01:00:00,935 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 01:00:00,936 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 01:00:00,984 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 01:00:01,059 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 01:00:01,060 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 02:00:00 UTC)" executed successfully 2026-09-07 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 03:00:00 UTC)" (scheduled at 2026-09-07 02:00:00+00:00) 2026-09-07 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 02:00:01,676 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 02:00:01,679 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 02:00:01,682 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 02:00:01,683 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 02:00:01,751 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 02:00:01,827 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 02:00:01,828 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 03:00:00 UTC)" executed successfully 2026-09-07 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 04:00:00 UTC)" (scheduled at 2026-09-07 03:00:00+00:00) 2026-09-07 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-07 03:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 03:00:01,077 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 03:00:01,080 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 03:00:01,083 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 03:00:01,084 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 03:00:01,154 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 03:00:01,213 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 03:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 04:00:00 UTC)" executed successfully 2026-09-07 04:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 05:00:00 UTC)" (scheduled at 2026-09-07 04:00:00+00:00) 2026-09-07 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-07 04:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 04:00:01,014 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 04:00:01,015 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 04:00:01,018 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 04:00:01,018 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 04:00:01,078 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 04:00:01,166 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 04:00:01,167 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 05:00:00 UTC)" executed successfully 2026-09-07 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 06:00:00 UTC)" (scheduled at 2026-09-07 05:00:00+00:00) 2026-09-07 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-07 05:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 05:00:01,312 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 05:00:01,315 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 05:00:01,317 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 05:00:01,317 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 05:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 05:00:01,487 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 05:00:01,488 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 06:00:00 UTC)" executed successfully 2026-09-07 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 07:00:00 UTC)" (scheduled at 2026-09-07 06:00:00+00:00) 2026-09-07 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-07 06:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 06:00:01,017 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 06:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 06:00:01,024 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 06:00:01,025 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 06:00:01,093 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 06:00:01,156 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 06:00:01,156 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 07:00:00 UTC)" executed successfully 2026-09-07 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 08:00:00 UTC)" (scheduled at 2026-09-07 07:00:00+00:00) 2026-09-07 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-07 07:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 07:00:01,678 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 07:00:01,680 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 07:00:01,684 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 07:00:01,684 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 07:00:01,738 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 07:00:01,796 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 07:00:01,797 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 08:00:00 UTC)" executed successfully 2026-09-07 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 09:00:00 UTC)" (scheduled at 2026-09-07 08:00:00+00:00) 2026-09-07 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-07 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 08:00:01,208 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 08:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 08:00:01,215 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 08:00:01,215 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 08:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 08:00:01,348 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 08:00:01,349 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 09:00:00 UTC)" executed successfully 2026-09-07 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 10:00:00 UTC)" (scheduled at 2026-09-07 09:00:00+00:00) 2026-09-07 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-07 09:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 09:00:01,059 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 09:00:01,061 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 09:00:01,063 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 09:00:01,063 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 09:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 09:00:01,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 09:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 10:00:00 UTC)" executed successfully 2026-09-07 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 11:00:00 UTC)" (scheduled at 2026-09-07 10:00:00+00:00) 2026-09-07 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-07 10:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 10:00:01,089 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 10:00:01,089 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 10:00:01,092 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 10:00:01,093 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 10:00:01,144 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 10:00:01,200 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 10:00:01,201 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 11:00:00 UTC)" executed successfully 2026-09-07 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 12:00:00 UTC)" (scheduled at 2026-09-07 11:00:00+00:00) 2026-09-07 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 11:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 11:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 11:00:01,004 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 11:00:01,007 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 11:00:01,007 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 11:00:01,063 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 11:00:01,124 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 11:00:01,124 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 12:00:00 UTC)" executed successfully 2026-09-07 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 13:00:00 UTC)" (scheduled at 2026-09-07 12:00:00+00:00) 2026-09-07 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-07 12:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 12:00:01,019 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 12:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 12:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 12:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 12:00:01,075 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 12:00:01,143 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 12:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 13:00:00 UTC)" executed successfully 2026-09-07 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 14:00:00 UTC)" (scheduled at 2026-09-07 13:00:00+00:00) 2026-09-07 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-07 13:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 13:00:02,291 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 13:00:02,293 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 13:00:02,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 13:00:02,297 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 13:00:02,348 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 13:00:02,427 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 13:00:02,428 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 14:00:00 UTC)" executed successfully 2026-09-07 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 15:00:00 UTC)" (scheduled at 2026-09-07 14:00:00+00:00) 2026-09-07 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-07 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 14:00:01,199 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 14:00:01,201 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 14:00:01,205 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 14:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 14:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 14:00:01,375 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 14:00:01,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 15:00:00 UTC)" executed successfully 2026-09-07 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 16:00:00 UTC)" (scheduled at 2026-09-07 15:00:00+00:00) 2026-09-07 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-07 15:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 15:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 15:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 15:00:01,172 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 15:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 15:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 15:00:01,289 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 15:00:01,290 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 16:00:00 UTC)" executed successfully 2026-09-07 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 17:00:00 UTC)" (scheduled at 2026-09-07 16:00:00+00:00) 2026-09-07 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 16:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 16:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 16:00:01,039 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 16:00:01,041 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 16:00:01,041 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 16:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 16:00:01,144 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 16:00:01,144 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 17:00:00 UTC)" executed successfully 2026-09-07 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 18:00:00 UTC)" (scheduled at 2026-09-07 17:00:00+00:00) 2026-09-07 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-07 17:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 17:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 17:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 17:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 17:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 17:00:01,294 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 17:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 17:00:01,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 18:00:00 UTC)" executed successfully 2026-09-07 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 19:00:00 UTC)" (scheduled at 2026-09-07 18:00:00+00:00) 2026-09-07 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 18:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 18:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 18:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 18:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 18:00:01,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 18:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 18:00:01,322 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 18:00:01,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 19:00:00 UTC)" executed successfully 2026-09-07 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 20:00:00 UTC)" (scheduled at 2026-09-07 19:00:00+00:00) 2026-09-07 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 19:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 19:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 19:00:01,034 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 19:00:01,035 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 19:00:01,094 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 19:00:01,139 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 19:00:01,139 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 20:00:00 UTC)" executed successfully 2026-09-07 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 21:00:00 UTC)" (scheduled at 2026-09-07 20:00:00+00:00) 2026-09-07 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-07 20:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 20:00:01,512 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 20:00:01,514 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 20:00:01,518 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 20:00:01,518 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 20:00:01,560 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 20:00:01,620 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 20:00:01,620 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 21:00:00 UTC)" executed successfully 2026-09-07 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 22:00:00 UTC)" (scheduled at 2026-09-07 21:00:00+00:00) 2026-09-07 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-07 21:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 21:00:01,527 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 21:00:01,528 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 21:00:01,532 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 21:00:01,532 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 21:00:01,582 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 21:00:01,669 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 21:00:01,669 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 22:00:00 UTC)" executed successfully 2026-09-07 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 23:00:00 UTC)" (scheduled at 2026-09-07 22:00:00+00:00) 2026-09-07 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-07 22:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 22:00:01,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 22:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 22:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 22:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 22:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 22:00:01,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 22:00:01,410 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-07 23:00:00 UTC)" executed successfully 2026-09-07 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 00:00:00 UTC)" (scheduled at 2026-09-07 23:00:00+00:00) 2026-09-07 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-07 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-07 23:00:01,587 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-07 23:00:01,589 INFO [fb-sync.worker] Scraped 50 posts 2026-09-07 23:00:01,593 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-07 23:00:01,593 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-07 23:00:01,660 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-07 23:00:01,743 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-07 23:00:01,744 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 00:00:00 UTC)" executed successfully 2026-09-08 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 01:00:00 UTC)" (scheduled at 2026-09-08 00:00:00+00:00) 2026-09-08 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-08 00:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 00:00:01,700 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 00:00:01,702 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 00:00:01,705 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 00:00:01,706 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 00:00:01,768 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 00:00:01,840 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 00:00:01,840 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 01:00:00 UTC)" executed successfully 2026-09-08 01:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 02:00:00 UTC)" (scheduled at 2026-09-08 01:00:00+00:00) 2026-09-08 01:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-08 01:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 01:00:01,274 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 01:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 01:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 01:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 01:00:01,344 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 01:00:01,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 01:00:01,411 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 02:00:00 UTC)" executed successfully 2026-09-08 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 03:00:00 UTC)" (scheduled at 2026-09-08 02:00:00+00:00) 2026-09-08 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-08 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 02:00:02,056 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 02:00:02,057 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 02:00:02,061 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 02:00:02,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 02:00:02,111 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 02:00:02,169 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 02:00:02,169 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 03:00:00 UTC)" executed successfully 2026-09-08 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 04:00:00 UTC)" (scheduled at 2026-09-08 03:00:00+00:00) 2026-09-08 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-08 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 03:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 03:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 03:00:01,034 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 03:00:01,034 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 03:00:01,089 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 03:00:01,169 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 03:00:01,169 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 04:00:00 UTC)" executed successfully 2026-09-08 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 05:00:00 UTC)" (scheduled at 2026-09-08 04:00:00+00:00) 2026-09-08 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-08 04:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 04:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 04:00:01,119 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 04:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 04:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 04:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 04:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 04:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 05:00:00 UTC)" executed successfully 2026-09-08 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 06:00:00 UTC)" (scheduled at 2026-09-08 05:00:00+00:00) 2026-09-08 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-08 05:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 05:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 05:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 05:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 05:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 05:00:01,206 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 05:00:01,255 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 05:00:01,255 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 06:00:00 UTC)" executed successfully 2026-09-08 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 07:00:00 UTC)" (scheduled at 2026-09-08 06:00:00+00:00) 2026-09-08 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-08 06:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 06:00:01,144 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 06:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 06:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 06:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 06:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 06:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 06:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 07:00:00 UTC)" executed successfully 2026-09-08 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 08:00:00 UTC)" (scheduled at 2026-09-08 07:00:00+00:00) 2026-09-08 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-08 07:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 07:00:01,356 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 07:00:01,356 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 07:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 07:00:01,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 07:00:01,411 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 07:00:01,482 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 07:00:01,482 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 08:00:00 UTC)" executed successfully 2026-09-08 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 09:00:00 UTC)" (scheduled at 2026-09-08 08:00:00+00:00) 2026-09-08 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-08 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 08:00:01,069 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 08:00:01,071 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 08:00:01,074 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 08:00:01,074 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 08:00:01,124 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 08:00:01,187 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 08:00:01,187 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 09:00:00 UTC)" executed successfully 2026-09-08 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 10:00:00 UTC)" (scheduled at 2026-09-08 09:00:00+00:00) 2026-09-08 09:00:00,020 INFO [fb-sync] Starting FB sync... 2026-09-08 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 09:00:00,995 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 09:00:00,997 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 09:00:01,000 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 09:00:01,000 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 09:00:01,043 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 09:00:01,109 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 09:00:01,110 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 10:00:00 UTC)" executed successfully 2026-09-08 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 11:00:00 UTC)" (scheduled at 2026-09-08 10:00:00+00:00) 2026-09-08 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-08 10:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 10:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 10:00:01,167 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 10:00:01,169 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 10:00:01,170 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 10:00:01,222 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 10:00:01,283 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 10:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 11:00:00 UTC)" executed successfully 2026-09-08 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 12:00:00 UTC)" (scheduled at 2026-09-08 11:00:00+00:00) 2026-09-08 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-08 11:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 11:00:01,330 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 11:00:01,331 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 11:00:01,335 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 11:00:01,336 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 11:00:01,392 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 11:00:01,465 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 11:00:01,466 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 12:00:00 UTC)" executed successfully 2026-09-08 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 13:00:00 UTC)" (scheduled at 2026-09-08 12:00:00+00:00) 2026-09-08 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-08 12:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 12:00:01,138 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 12:00:01,140 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 12:00:01,143 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 12:00:01,144 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 12:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 12:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 12:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 13:00:00 UTC)" executed successfully 2026-09-08 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 14:00:00 UTC)" (scheduled at 2026-09-08 13:00:00+00:00) 2026-09-08 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-08 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 13:00:01,446 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 13:00:01,448 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 13:00:01,452 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 13:00:01,452 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 13:00:01,512 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 13:00:01,582 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 13:00:01,583 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 14:00:00 UTC)" executed successfully 2026-09-08 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 15:00:00 UTC)" (scheduled at 2026-09-08 14:00:00+00:00) 2026-09-08 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-08 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 14:00:01,262 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 14:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 14:00:01,267 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 14:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 14:00:01,318 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 14:00:01,359 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 14:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 15:00:00 UTC)" executed successfully 2026-09-08 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 16:00:00 UTC)" (scheduled at 2026-09-08 15:00:00+00:00) 2026-09-08 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-08 15:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 15:00:02,412 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 15:00:02,413 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 15:00:02,416 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 15:00:02,416 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 15:00:02,470 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 15:00:02,540 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 15:00:02,541 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 16:00:00 UTC)" executed successfully 2026-09-08 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 17:00:00 UTC)" (scheduled at 2026-09-08 16:00:00+00:00) 2026-09-08 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-08 16:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 16:00:01,251 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 16:00:01,252 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 16:00:01,256 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 16:00:01,256 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 16:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 16:00:01,350 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 16:00:01,350 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 17:00:00 UTC)" executed successfully 2026-09-08 17:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 18:00:00 UTC)" (scheduled at 2026-09-08 17:00:00+00:00) 2026-09-08 17:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-08 17:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 17:00:01,327 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 17:00:01,328 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 17:00:01,332 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 17:00:01,332 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 17:00:01,393 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 17:00:01,475 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 17:00:01,476 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 18:00:00 UTC)" executed successfully 2026-09-08 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 19:00:00 UTC)" (scheduled at 2026-09-08 18:00:00+00:00) 2026-09-08 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-08 18:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 18:00:01,594 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 18:00:01,595 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 18:00:01,599 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 18:00:01,600 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 18:00:01,674 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 18:00:01,745 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 18:00:01,746 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 19:00:00 UTC)" executed successfully 2026-09-08 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 20:00:00 UTC)" (scheduled at 2026-09-08 19:00:00+00:00) 2026-09-08 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-08 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 19:00:01,122 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 19:00:01,124 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 19:00:01,128 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 19:00:01,128 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 19:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 19:00:01,259 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 19:00:01,259 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 20:00:00 UTC)" executed successfully 2026-09-08 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 21:00:00 UTC)" (scheduled at 2026-09-08 20:00:00+00:00) 2026-09-08 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-08 20:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 20:00:01,599 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 20:00:01,601 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 20:00:01,605 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 20:00:01,605 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 20:00:01,662 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 20:00:01,737 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 20:00:01,738 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 21:00:00 UTC)" executed successfully 2026-09-08 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 22:00:00 UTC)" (scheduled at 2026-09-08 21:00:00+00:00) 2026-09-08 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-08 21:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 21:00:01,879 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 21:00:01,879 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 21:00:01,882 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 21:00:01,883 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 21:00:01,955 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 21:00:02,027 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 21:00:02,028 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 22:00:00 UTC)" executed successfully 2026-09-08 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 23:00:00 UTC)" (scheduled at 2026-09-08 22:00:00+00:00) 2026-09-08 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-08 22:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 22:00:00,977 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 22:00:00,979 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 22:00:00,982 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 22:00:00,983 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 22:00:01,062 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 22:00:01,134 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 22:00:01,134 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-08 23:00:00 UTC)" executed successfully 2026-09-08 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 00:00:00 UTC)" (scheduled at 2026-09-08 23:00:00+00:00) 2026-09-08 23:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-08 23:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-08 23:00:01,088 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-08 23:00:01,089 INFO [fb-sync.worker] Scraped 50 posts 2026-09-08 23:00:01,092 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-08 23:00:01,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-08 23:00:01,134 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-08 23:00:01,183 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-08 23:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 00:00:00 UTC)" executed successfully 2026-09-09 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 01:00:00 UTC)" (scheduled at 2026-09-09 00:00:00+00:00) 2026-09-09 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-09 00:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 00:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 00:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 00:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 00:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 00:00:01,232 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 00:00:01,290 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 00:00:01,290 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 01:00:00 UTC)" executed successfully 2026-09-09 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 02:00:00 UTC)" (scheduled at 2026-09-09 01:00:00+00:00) 2026-09-09 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-09 01:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 01:00:01,099 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 01:00:01,100 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 01:00:01,105 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 01:00:01,105 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 01:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 01:00:01,241 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 01:00:01,241 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 02:00:00 UTC)" executed successfully 2026-09-09 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 03:00:00 UTC)" (scheduled at 2026-09-09 02:00:00+00:00) 2026-09-09 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-09 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 02:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 02:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 02:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 02:00:01,201 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 02:00:01,268 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 02:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 02:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 03:00:00 UTC)" executed successfully 2026-09-09 03:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 04:00:00 UTC)" (scheduled at 2026-09-09 03:00:00+00:00) 2026-09-09 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-09 03:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 03:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 03:00:01,267 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 03:00:01,270 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 03:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 03:00:01,329 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 03:00:01,372 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 03:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 04:00:00 UTC)" executed successfully 2026-09-09 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 05:00:00 UTC)" (scheduled at 2026-09-09 04:00:00+00:00) 2026-09-09 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-09 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 04:00:01,049 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 04:00:01,051 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 04:00:01,054 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 04:00:01,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 04:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 04:00:01,180 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 04:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 05:00:00 UTC)" executed successfully 2026-09-09 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 06:00:00 UTC)" (scheduled at 2026-09-09 05:00:00+00:00) 2026-09-09 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-09 05:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 05:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 05:00:01,194 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 05:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 05:00:01,198 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 05:00:01,271 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 05:00:01,330 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 05:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 06:00:00 UTC)" executed successfully 2026-09-09 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 07:00:00 UTC)" (scheduled at 2026-09-09 06:00:00+00:00) 2026-09-09 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-09 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 06:00:01,074 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 06:00:01,076 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 06:00:01,079 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 06:00:01,080 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 06:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 06:00:01,181 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 06:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 07:00:00 UTC)" executed successfully 2026-09-09 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 08:00:00 UTC)" (scheduled at 2026-09-09 07:00:00+00:00) 2026-09-09 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-09 07:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 07:00:02,423 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 07:00:02,424 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 07:00:02,428 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 07:00:02,428 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 07:00:02,492 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 07:00:02,567 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 07:00:02,568 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 08:00:00 UTC)" executed successfully 2026-09-09 08:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 09:00:00 UTC)" (scheduled at 2026-09-09 08:00:00+00:00) 2026-09-09 08:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-09 08:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 08:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 08:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 08:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 08:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 08:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 08:00:01,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 08:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 09:00:00 UTC)" executed successfully 2026-09-09 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 10:00:00 UTC)" (scheduled at 2026-09-09 09:00:00+00:00) 2026-09-09 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-09 09:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 09:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 09:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 09:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 09:00:01,132 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 09:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 09:00:01,270 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 09:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 10:00:00 UTC)" executed successfully 2026-09-09 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 11:00:00 UTC)" (scheduled at 2026-09-09 10:00:00+00:00) 2026-09-09 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-09 10:00:00,101 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 10:00:01,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 10:00:01,065 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 10:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 10:00:01,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 10:00:01,154 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 10:00:01,207 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 10:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 11:00:00 UTC)" executed successfully 2026-09-09 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 12:00:00 UTC)" (scheduled at 2026-09-09 11:00:00+00:00) 2026-09-09 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-09 11:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 11:00:01,233 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 11:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 11:00:01,238 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 11:00:01,238 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 11:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 11:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 11:00:01,373 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 12:00:00 UTC)" executed successfully 2026-09-09 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 13:00:00 UTC)" (scheduled at 2026-09-09 12:00:00+00:00) 2026-09-09 12:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-09 12:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 12:00:02,686 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 12:00:02,688 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 12:00:02,691 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 12:00:02,692 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 12:00:02,756 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 12:00:02,827 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 12:00:02,828 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 13:00:00 UTC)" executed successfully 2026-09-09 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 14:00:00 UTC)" (scheduled at 2026-09-09 13:00:00+00:00) 2026-09-09 13:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-09 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 13:00:01,291 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 13:00:01,293 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 13:00:01,297 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 13:00:01,297 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 13:00:01,368 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 13:00:01,456 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 13:00:01,458 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 14:00:00 UTC)" executed successfully 2026-09-09 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 15:00:00 UTC)" (scheduled at 2026-09-09 14:00:00+00:00) 2026-09-09 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-09 14:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 14:00:02,744 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 14:00:02,746 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 14:00:02,749 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 14:00:02,749 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 14:00:02,809 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 14:00:02,879 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 14:00:02,879 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 15:00:00 UTC)" executed successfully 2026-09-09 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 16:00:00 UTC)" (scheduled at 2026-09-09 15:00:00+00:00) 2026-09-09 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-09 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 15:00:02,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 15:00:02,236 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 15:00:02,239 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 15:00:02,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 15:00:02,304 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 15:00:02,377 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 15:00:02,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 16:00:00 UTC)" executed successfully 2026-09-09 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 17:00:00 UTC)" (scheduled at 2026-09-09 16:00:00+00:00) 2026-09-09 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-09 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 16:00:02,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 16:00:02,181 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 16:00:02,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 16:00:02,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 16:00:02,269 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 16:00:02,358 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 16:00:02,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 17:00:00 UTC)" executed successfully 2026-09-09 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 18:00:00 UTC)" (scheduled at 2026-09-09 17:00:00+00:00) 2026-09-09 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-09 17:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 17:00:02,133 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 17:00:02,135 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 17:00:02,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 17:00:02,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 17:00:02,230 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 17:00:02,313 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 17:00:02,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 18:00:00 UTC)" executed successfully 2026-09-09 18:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 19:00:00 UTC)" (scheduled at 2026-09-09 18:00:00+00:00) 2026-09-09 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-09 18:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 18:00:01,655 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 18:00:01,657 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 18:00:01,661 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 18:00:01,661 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 18:00:01,710 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 18:00:01,752 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 18:00:01,752 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 19:00:00 UTC)" executed successfully 2026-09-09 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 20:00:00 UTC)" (scheduled at 2026-09-09 19:00:00+00:00) 2026-09-09 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-09 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 19:00:01,400 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 19:00:01,401 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 19:00:01,404 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 19:00:01,404 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 19:00:01,456 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 19:00:01,524 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 19:00:01,525 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 20:00:00 UTC)" executed successfully 2026-09-09 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 21:00:00 UTC)" (scheduled at 2026-09-09 20:00:00+00:00) 2026-09-09 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-09 20:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 20:00:01,502 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 20:00:01,504 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 20:00:01,508 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 20:00:01,508 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 20:00:01,561 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 20:00:01,638 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 20:00:01,639 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 21:00:00 UTC)" executed successfully 2026-09-09 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 22:00:00 UTC)" (scheduled at 2026-09-09 21:00:00+00:00) 2026-09-09 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-09 21:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 21:00:01,500 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 21:00:01,503 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 21:00:01,506 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 21:00:01,507 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 21:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 21:00:01,651 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 21:00:01,651 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 22:00:00 UTC)" executed successfully 2026-09-09 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 23:00:00 UTC)" (scheduled at 2026-09-09 22:00:00+00:00) 2026-09-09 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-09 22:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 22:00:01,253 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 22:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 22:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 22:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 22:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 22:00:01,382 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 22:00:01,382 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-09 23:00:00 UTC)" executed successfully 2026-09-09 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 00:00:00 UTC)" (scheduled at 2026-09-09 23:00:00+00:00) 2026-09-09 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-09 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-09 23:00:01,199 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-09 23:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-09-09 23:00:01,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-09 23:00:01,204 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-09 23:00:01,272 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-09 23:00:01,391 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-09 23:00:01,391 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 00:00:00 UTC)" executed successfully 2026-09-10 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 01:00:00 UTC)" (scheduled at 2026-09-10 00:00:00+00:00) 2026-09-10 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-10 00:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 00:00:01,233 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 00:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 00:00:01,238 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 00:00:01,238 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 00:00:01,305 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 00:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 00:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 01:00:00 UTC)" executed successfully 2026-09-10 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 02:00:00 UTC)" (scheduled at 2026-09-10 01:00:00+00:00) 2026-09-10 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-10 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 01:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 01:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 01:00:01,208 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 01:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 01:00:01,292 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 01:00:01,401 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 01:00:01,402 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 02:00:00 UTC)" executed successfully 2026-09-10 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 03:00:00 UTC)" (scheduled at 2026-09-10 02:00:00+00:00) 2026-09-10 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-10 02:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 02:00:03,638 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 02:00:03,640 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 02:00:03,644 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 02:00:03,645 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 02:00:03,697 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 02:00:03,763 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 02:00:03,764 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 03:00:00 UTC)" executed successfully 2026-09-10 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 04:00:00 UTC)" (scheduled at 2026-09-10 03:00:00+00:00) 2026-09-10 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-10 03:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 03:00:01,230 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 03:00:01,231 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 03:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 03:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 03:00:01,290 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 03:00:01,340 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 03:00:01,340 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 04:00:00 UTC)" executed successfully 2026-09-10 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 05:00:00 UTC)" (scheduled at 2026-09-10 04:00:00+00:00) 2026-09-10 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-10 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 04:00:01,352 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 04:00:01,354 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 04:00:01,358 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 04:00:01,358 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 04:00:01,413 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 04:00:01,470 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 04:00:01,471 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 05:00:00 UTC)" executed successfully 2026-09-10 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 06:00:00 UTC)" (scheduled at 2026-09-10 05:00:00+00:00) 2026-09-10 05:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-10 05:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 05:00:01,402 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 05:00:01,403 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 05:00:01,407 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 05:00:01,407 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 05:00:01,467 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 05:00:01,551 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 05:00:01,551 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 06:00:00 UTC)" executed successfully 2026-09-10 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 07:00:00 UTC)" (scheduled at 2026-09-10 06:00:00+00:00) 2026-09-10 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-10 06:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 06:00:01,629 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 06:00:01,632 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 06:00:01,636 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 06:00:01,636 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 06:00:01,693 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 06:00:01,750 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 06:00:01,750 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 07:00:00 UTC)" executed successfully 2026-09-10 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 08:00:00 UTC)" (scheduled at 2026-09-10 07:00:00+00:00) 2026-09-10 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-10 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 07:00:01,313 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 07:00:01,315 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 07:00:01,318 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 07:00:01,319 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 07:00:01,390 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 07:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 07:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 08:00:00 UTC)" executed successfully 2026-09-10 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 09:00:00 UTC)" (scheduled at 2026-09-10 08:00:00+00:00) 2026-09-10 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-10 08:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 08:00:01,349 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 08:00:01,350 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 08:00:01,352 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 08:00:01,353 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 08:00:01,400 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 08:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 08:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 09:00:00 UTC)" executed successfully 2026-09-10 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 10:00:00 UTC)" (scheduled at 2026-09-10 09:00:00+00:00) 2026-09-10 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-10 09:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 09:00:01,475 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 09:00:01,477 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 09:00:01,481 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 09:00:01,481 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 09:00:01,545 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 09:00:01,633 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 09:00:01,634 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 10:00:00 UTC)" executed successfully 2026-09-10 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 11:00:00 UTC)" (scheduled at 2026-09-10 10:00:00+00:00) 2026-09-10 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-10 10:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 10:00:01,374 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 10:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 10:00:01,378 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 10:00:01,379 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 10:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 10:00:01,519 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 10:00:01,520 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 11:00:00 UTC)" executed successfully 2026-09-10 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 12:00:00 UTC)" (scheduled at 2026-09-10 11:00:00+00:00) 2026-09-10 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-10 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 11:00:01,328 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 11:00:01,329 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 11:00:01,331 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 11:00:01,331 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 11:00:01,402 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 11:00:01,482 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 11:00:01,482 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 12:00:00 UTC)" executed successfully 2026-09-10 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 13:00:00 UTC)" (scheduled at 2026-09-10 12:00:00+00:00) 2026-09-10 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-10 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 12:00:01,682 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 12:00:01,684 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 12:00:01,688 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 12:00:01,688 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 12:00:01,751 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 12:00:01,831 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 12:00:01,831 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 13:00:00 UTC)" executed successfully 2026-09-10 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 14:00:00 UTC)" (scheduled at 2026-09-10 13:00:00+00:00) 2026-09-10 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-10 13:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 13:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 13:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 13:00:01,225 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 13:00:01,225 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 13:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 13:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 13:00:01,353 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 14:00:00 UTC)" executed successfully 2026-09-10 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 15:00:00 UTC)" (scheduled at 2026-09-10 14:00:00+00:00) 2026-09-10 14:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-10 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 14:00:01,926 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 14:00:01,928 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 14:00:01,931 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 14:00:01,932 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 14:00:02,025 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 14:00:02,103 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 14:00:02,103 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 15:00:00 UTC)" executed successfully 2026-09-10 15:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 16:00:00 UTC)" (scheduled at 2026-09-10 15:00:00+00:00) 2026-09-10 15:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-10 15:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 15:00:01,618 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 15:00:01,620 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 15:00:01,623 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 15:00:01,623 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 15:00:01,679 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 15:00:01,749 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 15:00:01,750 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 16:00:00 UTC)" executed successfully 2026-09-10 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 17:00:00 UTC)" (scheduled at 2026-09-10 16:00:00+00:00) 2026-09-10 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-10 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 16:00:01,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 16:00:01,443 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 16:00:01,445 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 16:00:01,445 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 16:00:01,500 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 16:00:01,568 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 16:00:01,569 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 17:00:00 UTC)" executed successfully 2026-09-10 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 18:00:00 UTC)" (scheduled at 2026-09-10 17:00:00+00:00) 2026-09-10 17:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-10 17:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 17:00:01,435 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 17:00:01,436 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 17:00:01,440 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 17:00:01,440 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 17:00:01,484 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 17:00:01,548 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 17:00:01,548 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 18:00:00 UTC)" executed successfully 2026-09-10 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 19:00:00 UTC)" (scheduled at 2026-09-10 18:00:00+00:00) 2026-09-10 18:00:00,025 INFO [fb-sync] Starting FB sync... 2026-09-10 18:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 18:00:01,724 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 18:00:01,726 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 18:00:01,729 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 18:00:01,730 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 18:00:01,778 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 18:00:01,859 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 18:00:01,859 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 19:00:00 UTC)" executed successfully 2026-09-10 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 20:00:00 UTC)" (scheduled at 2026-09-10 19:00:00+00:00) 2026-09-10 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-10 19:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 19:00:01,426 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 19:00:01,428 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 19:00:01,431 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 19:00:01,431 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 19:00:01,487 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 19:00:01,562 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 19:00:01,563 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 20:00:00 UTC)" executed successfully 2026-09-10 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 21:00:00 UTC)" (scheduled at 2026-09-10 20:00:00+00:00) 2026-09-10 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-10 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 20:00:01,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 20:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 20:00:01,269 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 20:00:01,269 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 20:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 20:00:01,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 20:00:01,410 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 21:00:00 UTC)" executed successfully 2026-09-10 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 22:00:00 UTC)" (scheduled at 2026-09-10 21:00:00+00:00) 2026-09-10 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-10 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 21:00:01,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 21:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 21:00:01,277 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 21:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 21:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 21:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 21:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 22:00:00 UTC)" executed successfully 2026-09-10 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 23:00:00 UTC)" (scheduled at 2026-09-10 22:00:00+00:00) 2026-09-10 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-10 22:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 22:00:01,272 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 22:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 22:00:01,277 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 22:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 22:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 22:00:01,414 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 22:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-10 23:00:00 UTC)" executed successfully 2026-09-10 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 00:00:00 UTC)" (scheduled at 2026-09-10 23:00:00+00:00) 2026-09-10 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-10 23:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-10 23:00:01,416 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-10 23:00:01,418 INFO [fb-sync.worker] Scraped 50 posts 2026-09-10 23:00:01,421 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-10 23:00:01,421 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-10 23:00:01,493 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-10 23:00:01,568 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-10 23:00:01,569 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 00:00:00 UTC)" executed successfully 2026-09-11 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 01:00:00 UTC)" (scheduled at 2026-09-11 00:00:00+00:00) 2026-09-11 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-11 00:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 00:00:01,282 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 00:00:01,284 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 00:00:01,286 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 00:00:01,287 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 00:00:01,347 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 00:00:01,408 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 00:00:01,409 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 01:00:00 UTC)" executed successfully 2026-09-11 01:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 02:00:00 UTC)" (scheduled at 2026-09-11 01:00:00+00:00) 2026-09-11 01:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-11 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 01:00:01,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 01:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 01:00:01,187 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 01:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 01:00:01,240 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 01:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 01:00:01,296 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 02:00:00 UTC)" executed successfully 2026-09-11 02:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 03:00:00 UTC)" (scheduled at 2026-09-11 02:00:00+00:00) 2026-09-11 02:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-11 02:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 02:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 02:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 02:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 02:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 02:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 02:00:01,202 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 02:00:01,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 03:00:00 UTC)" executed successfully 2026-09-11 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 04:00:00 UTC)" (scheduled at 2026-09-11 03:00:00+00:00) 2026-09-11 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-11 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 03:00:01,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 03:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 03:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 03:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 03:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 03:00:01,302 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 03:00:01,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 04:00:00 UTC)" executed successfully 2026-09-11 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 05:00:00 UTC)" (scheduled at 2026-09-11 04:00:00+00:00) 2026-09-11 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-11 04:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 04:00:01,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 04:00:01,139 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 04:00:01,142 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 04:00:01,143 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 04:00:01,232 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 04:00:01,316 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 04:00:01,316 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 05:00:00 UTC)" executed successfully 2026-09-11 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 06:00:00 UTC)" (scheduled at 2026-09-11 05:00:00+00:00) 2026-09-11 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-11 05:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 05:00:01,763 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 05:00:01,766 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 05:00:01,770 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 05:00:01,770 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 05:00:01,849 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 05:00:01,927 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 05:00:01,927 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 06:00:00 UTC)" executed successfully 2026-09-11 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 07:00:00 UTC)" (scheduled at 2026-09-11 06:00:00+00:00) 2026-09-11 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-11 06:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 06:00:01,221 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 06:00:01,222 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 06:00:01,225 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 06:00:01,225 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 06:00:01,267 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 06:00:01,317 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 06:00:01,317 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 07:00:00 UTC)" executed successfully 2026-09-11 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 08:00:00 UTC)" (scheduled at 2026-09-11 07:00:00+00:00) 2026-09-11 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-11 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 07:00:01,107 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 07:00:01,109 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 07:00:01,112 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 07:00:01,112 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 07:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 07:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 07:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 08:00:00 UTC)" executed successfully 2026-09-11 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 09:00:00 UTC)" (scheduled at 2026-09-11 08:00:00+00:00) 2026-09-11 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-11 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 08:00:01,754 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 08:00:01,757 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 08:00:01,760 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 08:00:01,760 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 08:00:01,840 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 08:00:01,923 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 08:00:01,924 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 09:00:00 UTC)" executed successfully 2026-09-11 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 10:00:00 UTC)" (scheduled at 2026-09-11 09:00:00+00:00) 2026-09-11 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-11 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 09:00:01,340 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 09:00:01,341 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 09:00:01,344 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 09:00:01,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 09:00:01,400 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 09:00:01,454 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 09:00:01,454 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 10:00:00 UTC)" executed successfully 2026-09-11 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 11:00:00 UTC)" (scheduled at 2026-09-11 10:00:00+00:00) 2026-09-11 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-11 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 10:00:01,354 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 10:00:01,356 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 10:00:01,358 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 10:00:01,358 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 10:00:01,426 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 10:00:01,494 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 10:00:01,494 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 11:00:00 UTC)" executed successfully 2026-09-11 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 12:00:00 UTC)" (scheduled at 2026-09-11 11:00:00+00:00) 2026-09-11 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-11 11:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 11:00:01,549 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 11:00:01,551 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 11:00:01,554 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 11:00:01,555 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 11:00:01,620 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 11:00:01,692 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 11:00:01,693 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 12:00:00 UTC)" executed successfully 2026-09-11 12:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 13:00:00 UTC)" (scheduled at 2026-09-11 12:00:00+00:00) 2026-09-11 12:00:00,022 INFO [fb-sync] Starting FB sync... 2026-09-11 12:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 12:00:01,502 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 12:00:01,503 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 12:00:01,506 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 12:00:01,506 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 12:00:01,563 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 12:00:01,638 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 12:00:01,639 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 13:00:00 UTC)" executed successfully 2026-09-11 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 14:00:00 UTC)" (scheduled at 2026-09-11 13:00:00+00:00) 2026-09-11 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-11 13:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 13:00:01,955 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 13:00:01,957 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 13:00:01,961 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 13:00:01,961 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 13:00:02,025 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 13:00:02,102 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 13:00:02,102 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 14:00:00 UTC)" executed successfully 2026-09-11 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 15:00:00 UTC)" (scheduled at 2026-09-11 14:00:00+00:00) 2026-09-11 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-11 14:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 14:00:01,828 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 14:00:01,831 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 14:00:01,836 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 14:00:01,837 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 14:00:01,906 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 14:00:01,986 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 14:00:01,986 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 15:00:00 UTC)" executed successfully 2026-09-11 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 16:00:00 UTC)" (scheduled at 2026-09-11 15:00:00+00:00) 2026-09-11 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-11 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 15:00:01,787 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 15:00:01,789 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 15:00:01,792 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 15:00:01,793 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 15:00:01,852 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 15:00:01,927 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 15:00:01,927 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 16:00:00 UTC)" executed successfully 2026-09-11 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 17:00:00 UTC)" (scheduled at 2026-09-11 16:00:00+00:00) 2026-09-11 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-11 16:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 16:00:01,542 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 16:00:01,545 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 16:00:01,548 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 16:00:01,549 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 16:00:01,616 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 16:00:01,668 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 16:00:01,668 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 17:00:00 UTC)" executed successfully 2026-09-11 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 18:00:00 UTC)" (scheduled at 2026-09-11 17:00:00+00:00) 2026-09-11 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-11 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 17:00:02,775 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 17:00:02,777 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 17:00:02,780 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 17:00:02,780 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 17:00:02,827 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 17:00:02,886 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 17:00:02,886 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 18:00:00 UTC)" executed successfully 2026-09-11 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 19:00:00 UTC)" (scheduled at 2026-09-11 18:00:00+00:00) 2026-09-11 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-11 18:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 18:00:01,605 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 18:00:01,607 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 18:00:01,611 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 18:00:01,611 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 18:00:01,661 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 18:00:01,725 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 18:00:01,725 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 19:00:00 UTC)" executed successfully 2026-09-11 19:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 20:00:00 UTC)" (scheduled at 2026-09-11 19:00:00+00:00) 2026-09-11 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-11 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 19:00:02,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 19:00:02,053 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 19:00:02,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 19:00:02,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 19:00:02,118 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 19:00:02,188 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 19:00:02,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 20:00:00 UTC)" executed successfully 2026-09-11 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 21:00:00 UTC)" (scheduled at 2026-09-11 20:00:00+00:00) 2026-09-11 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-11 20:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 20:00:01,280 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 20:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 20:00:01,286 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 20:00:01,286 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 20:00:01,350 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 20:00:01,424 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 20:00:01,424 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 21:00:00 UTC)" executed successfully 2026-09-11 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 22:00:00 UTC)" (scheduled at 2026-09-11 21:00:00+00:00) 2026-09-11 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-11 21:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 21:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 21:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 21:00:01,176 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 21:00:01,176 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 21:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 21:00:01,293 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 21:00:01,294 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 22:00:00 UTC)" executed successfully 2026-09-11 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 23:00:00 UTC)" (scheduled at 2026-09-11 22:00:00+00:00) 2026-09-11 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-11 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 22:00:03,483 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 22:00:03,485 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 22:00:03,489 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 22:00:03,489 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 22:00:03,551 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 22:00:03,616 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 22:00:03,616 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-11 23:00:00 UTC)" executed successfully 2026-09-11 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 00:00:00 UTC)" (scheduled at 2026-09-11 23:00:00+00:00) 2026-09-11 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-11 23:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-11 23:00:01,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-11 23:00:01,185 INFO [fb-sync.worker] Scraped 50 posts 2026-09-11 23:00:01,189 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-11 23:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-11 23:00:01,257 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-11 23:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-11 23:00:01,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 00:00:00 UTC)" executed successfully 2026-09-12 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 01:00:00 UTC)" (scheduled at 2026-09-12 00:00:00+00:00) 2026-09-12 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-12 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 00:00:01,164 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 00:00:01,167 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 00:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 00:00:01,171 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 00:00:01,257 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 00:00:01,357 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 00:00:01,358 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 01:00:00 UTC)" executed successfully 2026-09-12 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 02:00:00 UTC)" (scheduled at 2026-09-12 01:00:00+00:00) 2026-09-12 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-12 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 01:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 01:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 01:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 01:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 01:00:01,171 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 01:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 01:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 02:00:00 UTC)" executed successfully 2026-09-12 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 03:00:00 UTC)" (scheduled at 2026-09-12 02:00:00+00:00) 2026-09-12 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-12 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 02:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 02:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 02:00:01,214 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 02:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 02:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 02:00:01,332 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 02:00:01,332 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 03:00:00 UTC)" executed successfully 2026-09-12 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 04:00:00 UTC)" (scheduled at 2026-09-12 03:00:00+00:00) 2026-09-12 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 03:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 03:00:01,087 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 03:00:01,090 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 03:00:01,091 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 03:00:01,155 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 03:00:01,222 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 03:00:01,222 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 04:00:00 UTC)" executed successfully 2026-09-12 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 05:00:00 UTC)" (scheduled at 2026-09-12 04:00:00+00:00) 2026-09-12 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-12 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 04:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 04:00:01,258 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 04:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 04:00:01,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 04:00:01,331 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 04:00:01,374 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 04:00:01,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 05:00:00 UTC)" executed successfully 2026-09-12 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 06:00:00 UTC)" (scheduled at 2026-09-12 05:00:00+00:00) 2026-09-12 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-12 05:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 05:00:01,378 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 05:00:01,380 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 05:00:01,384 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 05:00:01,384 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 05:00:01,432 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 05:00:01,502 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 05:00:01,503 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 06:00:00 UTC)" executed successfully 2026-09-12 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 07:00:00 UTC)" (scheduled at 2026-09-12 06:00:00+00:00) 2026-09-12 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-12 06:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 06:00:01,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 06:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 06:00:01,163 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 06:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 06:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 06:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 06:00:01,296 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 07:00:00 UTC)" executed successfully 2026-09-12 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 08:00:00 UTC)" (scheduled at 2026-09-12 07:00:00+00:00) 2026-09-12 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-12 07:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 07:00:01,509 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 07:00:01,511 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 07:00:01,515 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 07:00:01,515 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 07:00:01,571 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 07:00:01,680 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 07:00:01,681 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 08:00:00 UTC)" executed successfully 2026-09-12 08:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 09:00:00 UTC)" (scheduled at 2026-09-12 08:00:00+00:00) 2026-09-12 08:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-12 08:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 08:00:01,644 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 08:00:01,646 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 08:00:01,649 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 08:00:01,649 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 08:00:01,714 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 08:00:01,798 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 08:00:01,799 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 09:00:00 UTC)" executed successfully 2026-09-12 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 10:00:00 UTC)" (scheduled at 2026-09-12 09:00:00+00:00) 2026-09-12 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-12 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 09:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 09:00:01,130 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 09:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 09:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 09:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 09:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 09:00:01,232 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 10:00:00 UTC)" executed successfully 2026-09-12 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 11:00:00 UTC)" (scheduled at 2026-09-12 10:00:00+00:00) 2026-09-12 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 10:00:01,864 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 10:00:01,866 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 10:00:01,870 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 10:00:01,870 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 10:00:01,937 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 10:00:02,014 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 10:00:02,015 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 11:00:00 UTC)" executed successfully 2026-09-12 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 12:00:00 UTC)" (scheduled at 2026-09-12 11:00:00+00:00) 2026-09-12 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-12 11:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 11:00:01,358 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 11:00:01,360 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 11:00:01,364 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 11:00:01,364 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 11:00:01,422 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 11:00:01,510 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 11:00:01,511 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 12:00:00 UTC)" executed successfully 2026-09-12 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 13:00:00 UTC)" (scheduled at 2026-09-12 12:00:00+00:00) 2026-09-12 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 12:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 12:00:02,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 12:00:02,092 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 12:00:02,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 12:00:02,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 12:00:02,159 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 12:00:02,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 12:00:02,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 13:00:00 UTC)" executed successfully 2026-09-12 13:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 14:00:00 UTC)" (scheduled at 2026-09-12 13:00:00+00:00) 2026-09-12 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-12 13:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 13:00:01,402 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 13:00:01,404 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 13:00:01,407 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 13:00:01,407 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 13:00:01,463 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 13:00:01,533 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 13:00:01,533 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 14:00:00 UTC)" executed successfully 2026-09-12 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 15:00:00 UTC)" (scheduled at 2026-09-12 14:00:00+00:00) 2026-09-12 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-12 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 14:00:01,962 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 14:00:01,964 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 14:00:01,968 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 14:00:01,968 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 14:00:02,033 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 14:00:02,106 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 14:00:02,107 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 15:00:00 UTC)" executed successfully 2026-09-12 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 16:00:00 UTC)" (scheduled at 2026-09-12 15:00:00+00:00) 2026-09-12 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-12 15:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 15:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 15:00:01,256 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 15:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 15:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 15:00:01,324 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 15:00:01,381 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 15:00:01,381 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 16:00:00 UTC)" executed successfully 2026-09-12 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 17:00:00 UTC)" (scheduled at 2026-09-12 16:00:00+00:00) 2026-09-12 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 16:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 16:00:01,559 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 16:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 16:00:01,563 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 16:00:01,564 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 16:00:01,621 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 16:00:01,688 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 16:00:01,688 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 17:00:00 UTC)" executed successfully 2026-09-12 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 18:00:00 UTC)" (scheduled at 2026-09-12 17:00:00+00:00) 2026-09-12 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-12 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 17:00:01,376 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 17:00:01,377 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 17:00:01,379 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 17:00:01,379 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 17:00:01,414 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 17:00:01,478 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 17:00:01,478 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 18:00:00 UTC)" executed successfully 2026-09-12 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 19:00:00 UTC)" (scheduled at 2026-09-12 18:00:00+00:00) 2026-09-12 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-12 18:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 18:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 18:00:01,195 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 18:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 18:00:01,198 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 18:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 18:00:01,310 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 18:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 19:00:00 UTC)" executed successfully 2026-09-12 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 20:00:00 UTC)" (scheduled at 2026-09-12 19:00:00+00:00) 2026-09-12 19:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-12 19:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 19:00:01,411 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 19:00:01,413 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 19:00:01,415 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 19:00:01,415 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 19:00:01,477 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 19:00:01,558 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 19:00:01,559 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 20:00:00 UTC)" executed successfully 2026-09-12 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 21:00:00 UTC)" (scheduled at 2026-09-12 20:00:00+00:00) 2026-09-12 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 20:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 20:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 20:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 20:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 20:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 20:00:01,251 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 20:00:01,317 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 20:00:01,318 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 21:00:00 UTC)" executed successfully 2026-09-12 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 22:00:00 UTC)" (scheduled at 2026-09-12 21:00:00+00:00) 2026-09-12 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-12 21:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 21:00:01,327 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 21:00:01,329 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 21:00:01,331 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 21:00:01,331 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 21:00:01,383 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 21:00:01,463 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 21:00:01,464 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 22:00:00 UTC)" executed successfully 2026-09-12 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 23:00:00 UTC)" (scheduled at 2026-09-12 22:00:00+00:00) 2026-09-12 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-12 22:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 22:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 22:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 22:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 22:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 22:00:01,286 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 22:00:01,348 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 22:00:01,348 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-12 23:00:00 UTC)" executed successfully 2026-09-12 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 00:00:00 UTC)" (scheduled at 2026-09-12 23:00:00+00:00) 2026-09-12 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-12 23:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-12 23:00:01,445 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-12 23:00:01,447 INFO [fb-sync.worker] Scraped 50 posts 2026-09-12 23:00:01,451 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-12 23:00:01,451 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-12 23:00:01,511 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-12 23:00:01,584 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-12 23:00:01,584 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 00:00:00 UTC)" executed successfully 2026-09-13 00:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 01:00:00 UTC)" (scheduled at 2026-09-13 00:00:00+00:00) 2026-09-13 00:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-13 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 00:00:01,372 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 00:00:01,374 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 00:00:01,377 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 00:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 00:00:01,446 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 00:00:01,537 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 00:00:01,537 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 01:00:00 UTC)" executed successfully 2026-09-13 01:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 02:00:00 UTC)" (scheduled at 2026-09-13 01:00:00+00:00) 2026-09-13 01:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-13 01:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 01:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 01:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 01:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 01:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 01:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 01:00:01,316 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 01:00:01,316 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 02:00:00 UTC)" executed successfully 2026-09-13 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 03:00:00 UTC)" (scheduled at 2026-09-13 02:00:00+00:00) 2026-09-13 02:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-13 02:00:00,059 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 02:00:02,991 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 02:00:02,993 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 02:00:02,996 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 02:00:02,997 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 02:00:03,043 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 02:00:03,086 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 02:00:03,087 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 03:00:00 UTC)" executed successfully 2026-09-13 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 04:00:00 UTC)" (scheduled at 2026-09-13 03:00:00+00:00) 2026-09-13 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-13 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 03:00:01,107 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 03:00:01,109 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 03:00:01,113 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 03:00:01,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 03:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 03:00:01,257 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 03:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 04:00:00 UTC)" executed successfully 2026-09-13 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 05:00:00 UTC)" (scheduled at 2026-09-13 04:00:00+00:00) 2026-09-13 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-13 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 04:00:01,389 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 04:00:01,391 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 04:00:01,395 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 04:00:01,395 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 04:00:01,452 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 04:00:01,521 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 04:00:01,522 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 05:00:00 UTC)" executed successfully 2026-09-13 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 06:00:00 UTC)" (scheduled at 2026-09-13 05:00:00+00:00) 2026-09-13 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 05:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 05:00:01,144 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 05:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 05:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 05:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 05:00:01,305 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 05:00:01,305 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 06:00:00 UTC)" executed successfully 2026-09-13 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 07:00:00 UTC)" (scheduled at 2026-09-13 06:00:00+00:00) 2026-09-13 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-13 06:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 06:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 06:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 06:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 06:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 06:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 06:00:01,303 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 06:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 07:00:00 UTC)" executed successfully 2026-09-13 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 08:00:00 UTC)" (scheduled at 2026-09-13 07:00:00+00:00) 2026-09-13 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-13 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 07:00:01,486 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 07:00:01,488 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 07:00:01,491 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 07:00:01,492 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 07:00:01,553 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 07:00:01,623 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 07:00:01,624 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 08:00:00 UTC)" executed successfully 2026-09-13 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 09:00:00 UTC)" (scheduled at 2026-09-13 08:00:00+00:00) 2026-09-13 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-13 08:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 08:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 08:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 08:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 08:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 08:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 08:00:01,349 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 08:00:01,349 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 09:00:00 UTC)" executed successfully 2026-09-13 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 10:00:00 UTC)" (scheduled at 2026-09-13 09:00:00+00:00) 2026-09-13 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 09:00:02,745 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 09:00:02,746 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 09:00:02,748 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 09:00:02,748 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 09:00:02,810 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 09:00:02,883 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 09:00:02,883 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 10:00:00 UTC)" executed successfully 2026-09-13 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 11:00:00 UTC)" (scheduled at 2026-09-13 10:00:00+00:00) 2026-09-13 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-13 10:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 10:00:01,443 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 10:00:01,444 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 10:00:01,447 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 10:00:01,447 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 10:00:01,500 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 10:00:01,555 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 10:00:01,556 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 11:00:00 UTC)" executed successfully 2026-09-13 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 12:00:00 UTC)" (scheduled at 2026-09-13 11:00:00+00:00) 2026-09-13 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-13 11:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 11:00:01,658 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 11:00:01,660 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 11:00:01,662 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 11:00:01,663 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 11:00:01,707 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 11:00:01,767 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 11:00:01,767 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 12:00:00 UTC)" executed successfully 2026-09-13 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 13:00:00 UTC)" (scheduled at 2026-09-13 12:00:00+00:00) 2026-09-13 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 12:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 12:00:01,291 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 12:00:01,293 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 12:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 12:00:01,296 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 12:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 12:00:01,383 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 12:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 13:00:00 UTC)" executed successfully 2026-09-13 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 14:00:00 UTC)" (scheduled at 2026-09-13 13:00:00+00:00) 2026-09-13 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-13 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 13:00:01,981 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 13:00:01,982 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 13:00:01,984 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 13:00:01,984 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 13:00:02,045 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 13:00:02,124 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 13:00:02,124 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 14:00:00 UTC)" executed successfully 2026-09-13 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 15:00:00 UTC)" (scheduled at 2026-09-13 14:00:00+00:00) 2026-09-13 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-13 14:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 14:00:01,432 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 14:00:01,434 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 14:00:01,438 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 14:00:01,438 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 14:00:01,500 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 14:00:01,570 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 14:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 15:00:00 UTC)" executed successfully 2026-09-13 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 16:00:00 UTC)" (scheduled at 2026-09-13 15:00:00+00:00) 2026-09-13 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-13 15:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 15:00:01,423 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 15:00:01,424 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 15:00:01,428 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 15:00:01,428 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 15:00:01,495 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 15:00:01,573 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 15:00:01,574 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 16:00:00 UTC)" executed successfully 2026-09-13 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 17:00:00 UTC)" (scheduled at 2026-09-13 16:00:00+00:00) 2026-09-13 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 16:00:01,447 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 16:00:01,448 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 16:00:01,452 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 16:00:01,453 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 16:00:01,515 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 16:00:01,587 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 16:00:01,587 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 17:00:00 UTC)" executed successfully 2026-09-13 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 18:00:00 UTC)" (scheduled at 2026-09-13 17:00:00+00:00) 2026-09-13 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 17:00:01,687 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 17:00:01,688 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 17:00:01,691 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 17:00:01,691 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 17:00:01,748 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 17:00:01,819 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 17:00:01,819 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 18:00:00 UTC)" executed successfully 2026-09-13 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 19:00:00 UTC)" (scheduled at 2026-09-13 18:00:00+00:00) 2026-09-13 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-13 18:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 18:00:01,392 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 18:00:01,394 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 18:00:01,398 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 18:00:01,398 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 18:00:01,476 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 18:00:01,560 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 18:00:01,560 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 19:00:00 UTC)" executed successfully 2026-09-13 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 20:00:00 UTC)" (scheduled at 2026-09-13 19:00:00+00:00) 2026-09-13 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-13 19:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 19:00:01,782 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 19:00:01,784 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 19:00:01,786 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 19:00:01,787 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 19:00:01,852 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 19:00:01,939 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 19:00:01,939 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 20:00:00 UTC)" executed successfully 2026-09-13 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 21:00:00 UTC)" (scheduled at 2026-09-13 20:00:00+00:00) 2026-09-13 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-13 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 20:00:01,384 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 20:00:01,387 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 20:00:01,391 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 20:00:01,391 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 20:00:01,461 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 20:00:01,546 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 20:00:01,547 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 21:00:00 UTC)" executed successfully 2026-09-13 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 22:00:00 UTC)" (scheduled at 2026-09-13 21:00:00+00:00) 2026-09-13 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-13 21:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 21:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 21:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 21:00:01,199 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 21:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 21:00:01,269 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 21:00:01,351 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 21:00:01,351 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 22:00:00 UTC)" executed successfully 2026-09-13 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 23:00:00 UTC)" (scheduled at 2026-09-13 22:00:00+00:00) 2026-09-13 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-13 22:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 22:00:01,254 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 22:00:01,257 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 22:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 22:00:01,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 22:00:01,345 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 22:00:01,444 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 22:00:01,445 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-13 23:00:00 UTC)" executed successfully 2026-09-13 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 00:00:00 UTC)" (scheduled at 2026-09-13 23:00:00+00:00) 2026-09-13 23:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-13 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-13 23:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-13 23:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-09-13 23:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-13 23:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-13 23:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-13 23:00:01,305 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-13 23:00:01,305 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 00:00:00 UTC)" executed successfully 2026-09-14 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 01:00:00 UTC)" (scheduled at 2026-09-14 00:00:00+00:00) 2026-09-14 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-14 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 00:00:01,318 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 00:00:01,320 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 00:00:01,322 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 00:00:01,322 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 00:00:01,386 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 00:00:01,458 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 00:00:01,459 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 01:00:00 UTC)" executed successfully 2026-09-14 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 02:00:00 UTC)" (scheduled at 2026-09-14 01:00:00+00:00) 2026-09-14 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-14 01:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 01:00:01,741 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 01:00:01,743 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 01:00:01,746 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 01:00:01,746 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 01:00:01,798 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 01:00:01,855 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 01:00:01,856 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 02:00:00 UTC)" executed successfully 2026-09-14 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 03:00:00 UTC)" (scheduled at 2026-09-14 02:00:00+00:00) 2026-09-14 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-14 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 02:00:01,437 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 02:00:01,438 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 02:00:01,440 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 02:00:01,440 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 02:00:01,478 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 02:00:01,519 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 02:00:01,519 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 03:00:00 UTC)" executed successfully 2026-09-14 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 04:00:00 UTC)" (scheduled at 2026-09-14 03:00:00+00:00) 2026-09-14 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-14 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 03:00:01,686 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 03:00:01,688 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 03:00:01,691 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 03:00:01,691 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 03:00:01,759 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 03:00:01,830 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 03:00:01,830 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 04:00:00 UTC)" executed successfully 2026-09-14 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 05:00:00 UTC)" (scheduled at 2026-09-14 04:00:00+00:00) 2026-09-14 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-14 04:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 04:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 04:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 04:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 04:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 04:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 04:00:01,382 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 04:00:01,382 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 05:00:00 UTC)" executed successfully 2026-09-14 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 06:00:00 UTC)" (scheduled at 2026-09-14 05:00:00+00:00) 2026-09-14 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-14 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 05:00:01,161 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 05:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 05:00:01,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 05:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 05:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 05:00:01,295 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 05:00:01,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 06:00:00 UTC)" executed successfully 2026-09-14 06:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 07:00:00 UTC)" (scheduled at 2026-09-14 06:00:00+00:00) 2026-09-14 06:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-14 06:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 06:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 06:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 06:00:01,302 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 06:00:01,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 06:00:01,356 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 06:00:01,424 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 06:00:01,424 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 07:00:00 UTC)" executed successfully 2026-09-14 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 08:00:00 UTC)" (scheduled at 2026-09-14 07:00:00+00:00) 2026-09-14 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-14 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 07:00:01,519 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 07:00:01,520 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 07:00:01,523 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 07:00:01,523 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 07:00:01,592 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 07:00:01,670 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 07:00:01,670 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 08:00:00 UTC)" executed successfully 2026-09-14 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 09:00:00 UTC)" (scheduled at 2026-09-14 08:00:00+00:00) 2026-09-14 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-14 08:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 08:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 08:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 08:00:01,241 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 08:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 08:00:01,296 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 08:00:01,344 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 08:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 09:00:00 UTC)" executed successfully 2026-09-14 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 10:00:00 UTC)" (scheduled at 2026-09-14 09:00:00+00:00) 2026-09-14 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-14 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 09:00:01,308 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 09:00:01,310 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 09:00:01,313 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 09:00:01,313 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 09:00:01,361 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 09:00:01,425 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 09:00:01,425 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 10:00:00 UTC)" executed successfully 2026-09-14 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 11:00:00 UTC)" (scheduled at 2026-09-14 10:00:00+00:00) 2026-09-14 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-14 10:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 10:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 10:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 10:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 10:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 10:00:01,269 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 10:00:01,314 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 10:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 11:00:00 UTC)" executed successfully 2026-09-14 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 12:00:00 UTC)" (scheduled at 2026-09-14 11:00:00+00:00) 2026-09-14 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-14 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 11:00:01,493 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 11:00:01,495 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 11:00:01,499 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 11:00:01,500 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 11:00:01,591 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 11:00:01,674 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 11:00:01,674 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 12:00:00 UTC)" executed successfully 2026-09-14 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 13:00:00 UTC)" (scheduled at 2026-09-14 12:00:00+00:00) 2026-09-14 12:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-14 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 12:00:02,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 12:00:02,136 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 12:00:02,139 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 12:00:02,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 12:00:02,200 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 12:00:02,270 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 12:00:02,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 13:00:00 UTC)" executed successfully 2026-09-14 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 14:00:00 UTC)" (scheduled at 2026-09-14 13:00:00+00:00) 2026-09-14 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-14 13:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 13:00:01,289 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 13:00:01,291 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 13:00:01,295 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 13:00:01,296 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 13:00:01,349 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 13:00:01,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 13:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 14:00:00 UTC)" executed successfully 2026-09-14 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 15:00:00 UTC)" (scheduled at 2026-09-14 14:00:00+00:00) 2026-09-14 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-14 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 14:00:01,407 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 14:00:01,410 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 14:00:01,414 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 14:00:01,414 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 14:00:01,487 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 14:00:01,568 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 14:00:01,568 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 15:00:00 UTC)" executed successfully 2026-09-14 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 16:00:00 UTC)" (scheduled at 2026-09-14 15:00:00+00:00) 2026-09-14 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-14 15:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 15:00:01,486 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 15:00:01,487 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 15:00:01,491 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 15:00:01,491 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 15:00:01,548 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 15:00:01,636 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 15:00:01,637 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 16:00:00 UTC)" executed successfully 2026-09-14 16:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 17:00:00 UTC)" (scheduled at 2026-09-14 16:00:00+00:00) 2026-09-14 16:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-14 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 16:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 16:00:01,244 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 16:00:01,247 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 16:00:01,247 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 16:00:01,310 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 16:00:01,362 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 16:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 17:00:00 UTC)" executed successfully 2026-09-14 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 18:00:00 UTC)" (scheduled at 2026-09-14 17:00:00+00:00) 2026-09-14 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-14 17:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 17:00:01,393 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 17:00:01,396 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 17:00:01,399 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 17:00:01,400 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 17:00:01,462 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 17:00:01,524 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 17:00:01,524 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 18:00:00 UTC)" executed successfully 2026-09-14 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 19:00:00 UTC)" (scheduled at 2026-09-14 18:00:00+00:00) 2026-09-14 18:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-14 18:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 18:00:01,568 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 18:00:01,569 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 18:00:01,572 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 18:00:01,572 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 18:00:01,620 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 18:00:01,686 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 18:00:01,686 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 19:00:00 UTC)" executed successfully 2026-09-14 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 20:00:00 UTC)" (scheduled at 2026-09-14 19:00:00+00:00) 2026-09-14 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-14 19:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 19:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 19:00:01,299 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 19:00:01,302 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 19:00:01,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 19:00:01,369 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 19:00:01,440 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 19:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 20:00:00 UTC)" executed successfully 2026-09-14 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 21:00:00 UTC)" (scheduled at 2026-09-14 20:00:00+00:00) 2026-09-14 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-14 20:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 20:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 20:00:01,420 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 20:00:01,425 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 20:00:01,425 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 20:00:01,483 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 20:00:01,539 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 20:00:01,540 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 21:00:00 UTC)" executed successfully 2026-09-14 21:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 22:00:00 UTC)" (scheduled at 2026-09-14 21:00:00+00:00) 2026-09-14 21:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-14 21:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 21:00:02,104 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 21:00:02,106 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 21:00:02,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 21:00:02,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 21:00:02,180 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 21:00:02,258 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 21:00:02,258 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 22:00:00 UTC)" executed successfully 2026-09-14 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 23:00:00 UTC)" (scheduled at 2026-09-14 22:00:00+00:00) 2026-09-14 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-14 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 22:00:02,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 22:00:02,053 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 22:00:02,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 22:00:02,057 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 22:00:02,124 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 22:00:02,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 22:00:02,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-14 23:00:00 UTC)" executed successfully 2026-09-14 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 00:00:00 UTC)" (scheduled at 2026-09-14 23:00:00+00:00) 2026-09-14 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-14 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-14 23:00:02,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-14 23:00:02,443 INFO [fb-sync.worker] Scraped 50 posts 2026-09-14 23:00:02,446 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-14 23:00:02,446 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-14 23:00:02,505 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-14 23:00:02,571 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-14 23:00:02,571 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 00:00:00 UTC)" executed successfully 2026-09-15 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 01:00:00 UTC)" (scheduled at 2026-09-15 00:00:00+00:00) 2026-09-15 00:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-15 00:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 00:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 00:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 00:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 00:00:01,212 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 00:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 00:00:01,360 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 00:00:01,360 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 01:00:00 UTC)" executed successfully 2026-09-15 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 02:00:00 UTC)" (scheduled at 2026-09-15 01:00:00+00:00) 2026-09-15 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-15 01:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 01:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 01:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 01:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 01:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 01:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 01:00:01,359 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 01:00:01,360 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 02:00:00 UTC)" executed successfully 2026-09-15 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 03:00:00 UTC)" (scheduled at 2026-09-15 02:00:00+00:00) 2026-09-15 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-15 02:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 02:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 02:00:01,155 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 02:00:01,159 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 02:00:01,159 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 02:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 02:00:01,285 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 02:00:01,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 03:00:00 UTC)" executed successfully 2026-09-15 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 04:00:00 UTC)" (scheduled at 2026-09-15 03:00:00+00:00) 2026-09-15 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-15 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 03:00:01,160 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 03:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 03:00:01,166 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 03:00:01,166 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 03:00:01,246 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 03:00:01,327 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 03:00:01,328 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 04:00:00 UTC)" executed successfully 2026-09-15 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 05:00:00 UTC)" (scheduled at 2026-09-15 04:00:00+00:00) 2026-09-15 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-15 04:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 04:00:01,361 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 04:00:01,363 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 04:00:01,368 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 04:00:01,368 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 04:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 04:00:01,481 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 04:00:01,481 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 05:00:00 UTC)" executed successfully 2026-09-15 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 06:00:00 UTC)" (scheduled at 2026-09-15 05:00:00+00:00) 2026-09-15 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-15 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 05:00:01,190 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 05:00:01,192 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 05:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 05:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 05:00:01,256 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 05:00:01,318 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 05:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 06:00:00 UTC)" executed successfully 2026-09-15 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 07:00:00 UTC)" (scheduled at 2026-09-15 06:00:00+00:00) 2026-09-15 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-15 06:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 06:00:01,225 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 06:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 06:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 06:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 06:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 06:00:01,336 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 06:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 07:00:00 UTC)" executed successfully 2026-09-15 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 08:00:00 UTC)" (scheduled at 2026-09-15 07:00:00+00:00) 2026-09-15 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-15 07:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 07:00:01,544 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 07:00:01,546 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 07:00:01,548 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 07:00:01,549 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 07:00:01,614 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 07:00:01,707 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 07:00:01,707 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 08:00:00 UTC)" executed successfully 2026-09-15 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 09:00:00 UTC)" (scheduled at 2026-09-15 08:00:00+00:00) 2026-09-15 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-15 08:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 08:00:01,344 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 08:00:01,347 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 08:00:01,350 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 08:00:01,351 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 08:00:01,414 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 08:00:01,477 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 08:00:01,478 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 09:00:00 UTC)" executed successfully 2026-09-15 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 10:00:00 UTC)" (scheduled at 2026-09-15 09:00:00+00:00) 2026-09-15 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-15 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 09:00:01,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 09:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 09:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 09:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 09:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 09:00:01,307 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 09:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 10:00:00 UTC)" executed successfully 2026-09-15 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 11:00:00 UTC)" (scheduled at 2026-09-15 10:00:00+00:00) 2026-09-15 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-15 10:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 10:00:01,458 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 10:00:01,462 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 10:00:01,466 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 10:00:01,467 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 10:00:01,555 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 10:00:01,643 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 10:00:01,643 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 11:00:00 UTC)" executed successfully 2026-09-15 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 12:00:00 UTC)" (scheduled at 2026-09-15 11:00:00+00:00) 2026-09-15 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-15 11:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 11:00:01,207 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 11:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 11:00:01,216 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 11:00:01,216 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 11:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 11:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 11:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 12:00:00 UTC)" executed successfully 2026-09-15 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 13:00:00 UTC)" (scheduled at 2026-09-15 12:00:00+00:00) 2026-09-15 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-15 12:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 12:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 12:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 12:00:01,298 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 12:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 12:00:01,363 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 12:00:01,440 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 12:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 13:00:00 UTC)" executed successfully 2026-09-15 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 14:00:00 UTC)" (scheduled at 2026-09-15 13:00:00+00:00) 2026-09-15 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-15 13:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 13:00:01,374 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 13:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 13:00:01,379 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 13:00:01,379 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 13:00:01,443 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 13:00:01,493 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 13:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 14:00:00 UTC)" executed successfully 2026-09-15 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 15:00:00 UTC)" (scheduled at 2026-09-15 14:00:00+00:00) 2026-09-15 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-15 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 14:00:01,301 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 14:00:01,303 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 14:00:01,308 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 14:00:01,308 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 14:00:01,391 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 14:00:01,478 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 14:00:01,479 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 15:00:00 UTC)" executed successfully 2026-09-15 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 16:00:00 UTC)" (scheduled at 2026-09-15 15:00:00+00:00) 2026-09-15 15:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-15 15:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 15:00:01,485 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 15:00:01,487 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 15:00:01,489 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 15:00:01,489 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 15:00:01,544 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 15:00:01,603 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 15:00:01,603 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 16:00:00 UTC)" executed successfully 2026-09-15 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 17:00:00 UTC)" (scheduled at 2026-09-15 16:00:00+00:00) 2026-09-15 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-15 16:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 16:00:01,353 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 16:00:01,355 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 16:00:01,357 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 16:00:01,357 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 16:00:01,409 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 16:00:01,469 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 16:00:01,470 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 17:00:00 UTC)" executed successfully 2026-09-15 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 18:00:00 UTC)" (scheduled at 2026-09-15 17:00:00+00:00) 2026-09-15 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-15 17:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 17:00:01,487 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 17:00:01,489 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 17:00:01,492 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 17:00:01,492 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 17:00:01,552 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 17:00:01,626 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 17:00:01,627 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 18:00:00 UTC)" executed successfully 2026-09-15 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 19:00:00 UTC)" (scheduled at 2026-09-15 18:00:00+00:00) 2026-09-15 18:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-15 18:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 18:00:01,368 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 18:00:01,370 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 18:00:01,373 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 18:00:01,373 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 18:00:01,441 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 18:00:01,516 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 18:00:01,516 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 19:00:00 UTC)" executed successfully 2026-09-15 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 20:00:00 UTC)" (scheduled at 2026-09-15 19:00:00+00:00) 2026-09-15 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-15 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 19:00:01,311 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 19:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 19:00:01,316 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 19:00:01,316 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 19:00:01,381 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 19:00:01,442 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 19:00:01,442 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 20:00:00 UTC)" executed successfully 2026-09-15 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 21:00:00 UTC)" (scheduled at 2026-09-15 20:00:00+00:00) 2026-09-15 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-15 20:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 20:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 20:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 20:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 20:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 20:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 20:00:01,309 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 20:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 21:00:00 UTC)" executed successfully 2026-09-15 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 22:00:00 UTC)" (scheduled at 2026-09-15 21:00:00+00:00) 2026-09-15 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-15 21:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 21:00:01,307 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 21:00:01,309 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 21:00:01,312 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 21:00:01,313 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 21:00:01,373 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 21:00:01,439 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 21:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 22:00:00 UTC)" executed successfully 2026-09-15 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 23:00:00 UTC)" (scheduled at 2026-09-15 22:00:00+00:00) 2026-09-15 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-15 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 22:00:01,994 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 22:00:01,996 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 22:00:01,999 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 22:00:01,999 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 22:00:02,050 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 22:00:02,119 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 22:00:02,119 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-15 23:00:00 UTC)" executed successfully 2026-09-15 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 00:00:00 UTC)" (scheduled at 2026-09-15 23:00:00+00:00) 2026-09-15 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-15 23:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-15 23:00:02,026 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-15 23:00:02,028 INFO [fb-sync.worker] Scraped 50 posts 2026-09-15 23:00:02,032 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-15 23:00:02,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-15 23:00:02,154 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-15 23:00:02,248 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-15 23:00:02,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 00:00:00 UTC)" executed successfully 2026-09-16 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 01:00:00 UTC)" (scheduled at 2026-09-16 00:00:00+00:00) 2026-09-16 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-16 00:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 00:00:01,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 00:00:01,170 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 00:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 00:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 00:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 00:00:01,374 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 00:00:01,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 01:00:00 UTC)" executed successfully 2026-09-16 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 02:00:00 UTC)" (scheduled at 2026-09-16 01:00:00+00:00) 2026-09-16 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-16 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 01:00:01,323 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 01:00:01,324 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 01:00:01,327 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 01:00:01,327 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 01:00:01,389 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 01:00:01,479 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 01:00:01,479 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 02:00:00 UTC)" executed successfully 2026-09-16 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 03:00:00 UTC)" (scheduled at 2026-09-16 02:00:00+00:00) 2026-09-16 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-16 02:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 02:00:01,302 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 02:00:01,304 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 02:00:01,307 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 02:00:01,308 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 02:00:01,364 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 02:00:01,432 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 02:00:01,433 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 03:00:00 UTC)" executed successfully 2026-09-16 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 04:00:00 UTC)" (scheduled at 2026-09-16 03:00:00+00:00) 2026-09-16 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-16 03:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 03:00:01,398 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 03:00:01,400 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 03:00:01,403 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 03:00:01,403 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 03:00:01,458 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 03:00:01,534 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 03:00:01,534 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 04:00:00 UTC)" executed successfully 2026-09-16 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 05:00:00 UTC)" (scheduled at 2026-09-16 04:00:00+00:00) 2026-09-16 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-16 04:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 04:00:01,379 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 04:00:01,381 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 04:00:01,382 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 04:00:01,382 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 04:00:01,482 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 04:00:01,557 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 04:00:01,558 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 05:00:00 UTC)" executed successfully 2026-09-16 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 06:00:00 UTC)" (scheduled at 2026-09-16 05:00:00+00:00) 2026-09-16 05:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-16 05:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 05:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 05:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 05:00:01,201 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 05:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 05:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 05:00:01,544 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 05:00:01,545 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 06:00:00 UTC)" executed successfully 2026-09-16 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 07:00:00 UTC)" (scheduled at 2026-09-16 06:00:00+00:00) 2026-09-16 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-16 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 06:00:01,727 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 06:00:01,729 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 06:00:01,732 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 06:00:01,733 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 06:00:01,795 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 06:00:01,867 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 06:00:01,867 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 07:00:00 UTC)" executed successfully 2026-09-16 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 08:00:00 UTC)" (scheduled at 2026-09-16 07:00:00+00:00) 2026-09-16 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-16 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 07:00:01,548 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 07:00:01,550 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 07:00:01,553 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 07:00:01,554 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 07:00:01,635 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 07:00:01,719 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 07:00:01,719 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 08:00:00 UTC)" executed successfully 2026-09-16 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 09:00:00 UTC)" (scheduled at 2026-09-16 08:00:00+00:00) 2026-09-16 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-16 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 08:00:02,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 08:00:02,173 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 08:00:02,176 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 08:00:02,176 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 08:00:02,219 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 08:00:02,271 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 08:00:02,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 09:00:00 UTC)" executed successfully 2026-09-16 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 10:00:00 UTC)" (scheduled at 2026-09-16 09:00:00+00:00) 2026-09-16 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-16 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 09:00:01,405 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 09:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 09:00:01,411 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 09:00:01,411 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 09:00:01,479 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 09:00:01,544 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 09:00:01,544 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 10:00:00 UTC)" executed successfully 2026-09-16 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 11:00:00 UTC)" (scheduled at 2026-09-16 10:00:00+00:00) 2026-09-16 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-16 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 10:00:01,858 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 10:00:01,861 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 10:00:01,865 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 10:00:01,866 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 10:00:01,933 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 10:00:02,010 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 10:00:02,010 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 11:00:00 UTC)" executed successfully 2026-09-16 11:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 12:00:00 UTC)" (scheduled at 2026-09-16 11:00:00+00:00) 2026-09-16 11:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-16 11:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 11:00:01,464 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 11:00:01,466 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 11:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 11:00:01,470 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 11:00:01,546 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 11:00:01,621 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 11:00:01,622 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 12:00:00 UTC)" executed successfully 2026-09-16 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 13:00:00 UTC)" (scheduled at 2026-09-16 12:00:00+00:00) 2026-09-16 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-16 12:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 12:00:01,374 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 12:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 12:00:01,380 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 12:00:01,380 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 12:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 12:00:01,529 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 12:00:01,529 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 13:00:00 UTC)" executed successfully 2026-09-16 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 14:00:00 UTC)" (scheduled at 2026-09-16 13:00:00+00:00) 2026-09-16 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-16 13:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 13:00:01,279 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 13:00:01,280 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 13:00:01,282 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 13:00:01,282 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 13:00:01,348 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 13:00:01,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 13:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 14:00:00 UTC)" executed successfully 2026-09-16 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 15:00:00 UTC)" (scheduled at 2026-09-16 14:00:00+00:00) 2026-09-16 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-16 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 14:00:01,319 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 14:00:01,320 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 14:00:01,324 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 14:00:01,324 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 14:00:01,384 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 14:00:01,459 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 14:00:01,460 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 15:00:00 UTC)" executed successfully 2026-09-16 15:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 16:00:00 UTC)" (scheduled at 2026-09-16 15:00:00+00:00) 2026-09-16 15:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-16 15:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 15:00:01,532 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 15:00:01,535 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 15:00:01,538 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 15:00:01,539 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 15:00:01,616 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 15:00:01,707 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 15:00:01,707 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 16:00:00 UTC)" executed successfully 2026-09-16 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 17:00:00 UTC)" (scheduled at 2026-09-16 16:00:00+00:00) 2026-09-16 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-16 16:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 16:00:01,374 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 16:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 16:00:01,381 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 16:00:01,381 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 16:00:01,468 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 16:00:01,544 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 16:00:01,544 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 17:00:00 UTC)" executed successfully 2026-09-16 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 18:00:00 UTC)" (scheduled at 2026-09-16 17:00:00+00:00) 2026-09-16 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-16 17:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 17:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 17:00:01,301 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 17:00:01,306 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 17:00:01,306 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 17:00:01,363 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 17:00:01,441 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 17:00:01,441 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 18:00:00 UTC)" executed successfully 2026-09-16 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 19:00:00 UTC)" (scheduled at 2026-09-16 18:00:00+00:00) 2026-09-16 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-16 18:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 18:00:01,584 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 18:00:01,586 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 18:00:01,588 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 18:00:01,588 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 18:00:01,642 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 18:00:01,717 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 18:00:01,717 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 19:00:00 UTC)" executed successfully 2026-09-16 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 20:00:00 UTC)" (scheduled at 2026-09-16 19:00:00+00:00) 2026-09-16 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-16 19:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 19:00:01,308 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 19:00:01,310 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 19:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 19:00:01,315 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 19:00:01,397 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 19:00:01,485 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 19:00:01,485 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 20:00:00 UTC)" executed successfully 2026-09-16 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 21:00:00 UTC)" (scheduled at 2026-09-16 20:00:00+00:00) 2026-09-16 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-16 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 20:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 20:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 20:00:01,224 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 20:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 20:00:01,289 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 20:00:01,369 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 20:00:01,370 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 21:00:00 UTC)" executed successfully 2026-09-16 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 22:00:00 UTC)" (scheduled at 2026-09-16 21:00:00+00:00) 2026-09-16 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-16 21:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 21:00:02,103 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 21:00:02,104 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 21:00:02,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 21:00:02,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 21:00:02,358 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 21:00:02,445 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 21:00:02,445 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 22:00:00 UTC)" executed successfully 2026-09-16 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 23:00:00 UTC)" (scheduled at 2026-09-16 22:00:00+00:00) 2026-09-16 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-16 22:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 22:00:01,361 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 22:00:01,363 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 22:00:01,366 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 22:00:01,367 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 22:00:01,434 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 22:00:01,512 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 22:00:01,513 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-16 23:00:00 UTC)" executed successfully 2026-09-16 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 00:00:00 UTC)" (scheduled at 2026-09-16 23:00:00+00:00) 2026-09-16 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-16 23:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-16 23:00:03,047 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-16 23:00:03,049 INFO [fb-sync.worker] Scraped 50 posts 2026-09-16 23:00:03,051 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-16 23:00:03,051 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-16 23:00:03,126 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-16 23:00:03,202 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-16 23:00:03,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 00:00:00 UTC)" executed successfully 2026-09-17 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 01:00:00 UTC)" (scheduled at 2026-09-17 00:00:00+00:00) 2026-09-17 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-17 00:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 00:00:01,306 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 00:00:01,307 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 00:00:01,311 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 00:00:01,311 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 00:00:01,375 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 00:00:01,464 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 00:00:01,464 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 01:00:00 UTC)" executed successfully 2026-09-17 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 01:00:00 UTC)" (scheduled at 2026-09-17 01:00:00+00:00) 2026-09-17 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-17 01:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 01:00:01,021 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 01:00:01,022 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 01:00:01,025 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 01:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 01:00:01,080 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 01:00:01,160 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 01:00:01,160 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 02:00:00 UTC)" executed successfully 2026-09-17 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 03:00:00 UTC)" (scheduled at 2026-09-17 02:00:00+00:00) 2026-09-17 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-17 02:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 02:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 02:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 02:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 02:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 02:00:01,231 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 02:00:01,285 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 02:00:01,286 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 03:00:00 UTC)" executed successfully 2026-09-17 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 04:00:00 UTC)" (scheduled at 2026-09-17 03:00:00+00:00) 2026-09-17 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-17 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 03:00:01,227 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 03:00:01,229 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 03:00:01,232 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 03:00:01,233 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 03:00:01,292 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 03:00:01,351 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 03:00:01,351 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 04:00:00 UTC)" executed successfully 2026-09-17 04:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 05:00:00 UTC)" (scheduled at 2026-09-17 04:00:00+00:00) 2026-09-17 04:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-17 04:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 04:00:01,542 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 04:00:01,544 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 04:00:01,547 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 04:00:01,548 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 04:00:01,620 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 04:00:01,692 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 04:00:01,692 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 05:00:00 UTC)" executed successfully 2026-09-17 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 06:00:00 UTC)" (scheduled at 2026-09-17 05:00:00+00:00) 2026-09-17 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-17 05:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 05:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 05:00:01,146 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 05:00:01,150 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 05:00:01,150 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 05:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 05:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 05:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 06:00:00 UTC)" executed successfully 2026-09-17 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 07:00:00 UTC)" (scheduled at 2026-09-17 06:00:00+00:00) 2026-09-17 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-17 06:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 06:00:00,970 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 06:00:00,972 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 06:00:00,975 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 06:00:00,975 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 06:00:01,023 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 06:00:01,095 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 06:00:01,096 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 07:00:00 UTC)" executed successfully 2026-09-17 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 08:00:00 UTC)" (scheduled at 2026-09-17 07:00:00+00:00) 2026-09-17 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-17 07:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 07:00:01,491 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 07:00:01,495 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 07:00:01,499 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 07:00:01,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 07:00:01,608 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 07:00:01,707 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 07:00:01,708 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 08:00:00 UTC)" executed successfully 2026-09-17 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 09:00:00 UTC)" (scheduled at 2026-09-17 08:00:00+00:00) 2026-09-17 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-17 08:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 08:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 08:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 08:00:01,224 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 08:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 08:00:01,272 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 08:00:01,310 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 08:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 09:00:00 UTC)" executed successfully 2026-09-17 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 10:00:00 UTC)" (scheduled at 2026-09-17 09:00:00+00:00) 2026-09-17 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-17 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 09:00:02,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 09:00:02,230 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 09:00:02,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 09:00:02,235 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 09:00:02,312 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 09:00:02,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 09:00:02,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 10:00:00 UTC)" executed successfully 2026-09-17 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 11:00:00 UTC)" (scheduled at 2026-09-17 10:00:00+00:00) 2026-09-17 10:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-17 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 10:00:01,557 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 10:00:01,559 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 10:00:01,562 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 10:00:01,562 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 10:00:01,630 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 10:00:01,708 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 10:00:01,708 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 11:00:00 UTC)" executed successfully 2026-09-17 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 12:00:00 UTC)" (scheduled at 2026-09-17 11:00:00+00:00) 2026-09-17 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-17 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 11:00:01,333 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 11:00:01,335 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 11:00:01,339 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 11:00:01,339 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 11:00:01,403 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 11:00:01,472 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 11:00:01,472 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 12:00:00 UTC)" executed successfully 2026-09-17 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 13:00:00 UTC)" (scheduled at 2026-09-17 12:00:00+00:00) 2026-09-17 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-17 12:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 12:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 12:00:01,257 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 12:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 12:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 12:00:01,311 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 12:00:01,394 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 12:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 13:00:00 UTC)" executed successfully 2026-09-17 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 14:00:00 UTC)" (scheduled at 2026-09-17 13:00:00+00:00) 2026-09-17 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-17 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 13:00:02,635 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 13:00:02,637 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 13:00:02,641 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 13:00:02,641 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 13:00:02,713 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 13:00:02,794 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 13:00:02,794 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 14:00:00 UTC)" executed successfully 2026-09-17 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 15:00:00 UTC)" (scheduled at 2026-09-17 14:00:00+00:00) 2026-09-17 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-17 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 14:00:01,334 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 14:00:01,335 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 14:00:01,338 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 14:00:01,338 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 14:00:01,399 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 14:00:01,468 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 14:00:01,469 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 15:00:00 UTC)" executed successfully 2026-09-17 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 16:00:00 UTC)" (scheduled at 2026-09-17 15:00:00+00:00) 2026-09-17 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-17 15:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 15:00:01,430 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 15:00:01,432 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 15:00:01,435 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 15:00:01,435 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 15:00:01,508 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 15:00:01,589 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 15:00:01,589 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 16:00:00 UTC)" executed successfully 2026-09-17 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 17:00:00 UTC)" (scheduled at 2026-09-17 16:00:00+00:00) 2026-09-17 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-17 16:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 16:00:01,122 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 16:00:01,124 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 16:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 16:00:01,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 16:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 16:00:01,224 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 16:00:01,224 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 17:00:00 UTC)" executed successfully 2026-09-17 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 18:00:00 UTC)" (scheduled at 2026-09-17 17:00:00+00:00) 2026-09-17 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-17 17:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 17:00:01,476 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 17:00:01,478 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 17:00:01,484 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 17:00:01,484 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 17:00:01,559 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 17:00:01,635 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 17:00:01,636 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 18:00:00 UTC)" executed successfully 2026-09-17 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 19:00:00 UTC)" (scheduled at 2026-09-17 18:00:00+00:00) 2026-09-17 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-17 18:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 18:00:01,679 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 18:00:01,681 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 18:00:01,684 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 18:00:01,684 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 18:00:01,740 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 18:00:01,816 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 18:00:01,816 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 19:00:00 UTC)" executed successfully 2026-09-17 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 20:00:00 UTC)" (scheduled at 2026-09-17 19:00:00+00:00) 2026-09-17 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-17 19:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 19:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 19:00:01,352 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 19:00:01,356 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 19:00:01,356 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 19:00:01,414 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 19:00:01,496 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 19:00:01,497 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 20:00:00 UTC)" executed successfully 2026-09-17 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 21:00:00 UTC)" (scheduled at 2026-09-17 20:00:00+00:00) 2026-09-17 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-17 20:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 20:00:01,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 20:00:01,356 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 20:00:01,362 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 20:00:01,362 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 20:00:01,413 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 20:00:01,485 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 20:00:01,486 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 21:00:00 UTC)" executed successfully 2026-09-17 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 22:00:00 UTC)" (scheduled at 2026-09-17 21:00:00+00:00) 2026-09-17 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-17 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 21:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 21:00:01,175 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 21:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 21:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 21:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 21:00:01,312 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 21:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 22:00:00 UTC)" executed successfully 2026-09-17 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 23:00:00 UTC)" (scheduled at 2026-09-17 22:00:00+00:00) 2026-09-17 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-17 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 22:00:01,673 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 22:00:01,677 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 22:00:01,682 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 22:00:01,683 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 22:00:01,761 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 22:00:01,854 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 22:00:01,854 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-17 23:00:00 UTC)" executed successfully 2026-09-17 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 00:00:00 UTC)" (scheduled at 2026-09-17 23:00:00+00:00) 2026-09-17 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-17 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-17 23:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-17 23:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-09-17 23:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-17 23:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-17 23:00:01,183 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-17 23:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-17 23:00:01,250 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 00:00:00 UTC)" executed successfully 2026-09-18 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 01:00:00 UTC)" (scheduled at 2026-09-18 00:00:00+00:00) 2026-09-18 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-18 00:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 00:00:01,795 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 00:00:01,797 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 00:00:01,801 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 00:00:01,801 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 00:00:01,882 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 00:00:01,981 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 00:00:01,982 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 01:00:00 UTC)" executed successfully 2026-09-18 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 02:00:00 UTC)" (scheduled at 2026-09-18 01:00:00+00:00) 2026-09-18 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-18 01:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 01:00:01,578 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 01:00:01,580 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 01:00:01,584 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 01:00:01,585 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 01:00:01,652 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 01:00:01,729 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 01:00:01,729 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 02:00:00 UTC)" executed successfully 2026-09-18 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 03:00:00 UTC)" (scheduled at 2026-09-18 02:00:00+00:00) 2026-09-18 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-18 02:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 02:00:01,180 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 02:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 02:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 02:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 02:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 02:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 02:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 03:00:00 UTC)" executed successfully 2026-09-18 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 04:00:00 UTC)" (scheduled at 2026-09-18 03:00:00+00:00) 2026-09-18 03:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-18 03:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 03:00:01,742 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 03:00:01,744 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 03:00:01,749 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 03:00:01,749 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 03:00:01,826 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 03:00:01,907 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 03:00:01,907 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 04:00:00 UTC)" executed successfully 2026-09-18 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 05:00:00 UTC)" (scheduled at 2026-09-18 04:00:00+00:00) 2026-09-18 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-18 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 04:00:01,147 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 04:00:01,148 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 04:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 04:00:01,152 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 04:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 04:00:01,279 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 04:00:01,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 05:00:00 UTC)" executed successfully 2026-09-18 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 06:00:00 UTC)" (scheduled at 2026-09-18 05:00:00+00:00) 2026-09-18 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-18 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 05:00:01,349 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 05:00:01,351 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 05:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 05:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 05:00:01,409 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 05:00:01,494 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 05:00:01,495 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 06:00:00 UTC)" executed successfully 2026-09-18 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 07:00:00 UTC)" (scheduled at 2026-09-18 06:00:00+00:00) 2026-09-18 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-18 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 06:00:01,379 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 06:00:01,381 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 06:00:01,385 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 06:00:01,386 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 06:00:01,440 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 06:00:01,512 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 06:00:01,512 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 07:00:00 UTC)" executed successfully 2026-09-18 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 08:00:00 UTC)" (scheduled at 2026-09-18 07:00:00+00:00) 2026-09-18 07:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-18 07:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 07:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 07:00:01,175 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 07:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 07:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 07:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 07:00:01,298 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 07:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 08:00:00 UTC)" executed successfully 2026-09-18 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 09:00:00 UTC)" (scheduled at 2026-09-18 08:00:00+00:00) 2026-09-18 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-18 08:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 08:00:01,362 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 08:00:01,364 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 08:00:01,365 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 08:00:01,366 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 08:00:01,428 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 08:00:01,496 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 08:00:01,496 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 09:00:00 UTC)" executed successfully 2026-09-18 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 10:00:00 UTC)" (scheduled at 2026-09-18 09:00:00+00:00) 2026-09-18 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-18 09:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 09:00:01,829 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 09:00:01,831 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 09:00:01,834 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 09:00:01,835 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 09:00:01,908 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 09:00:02,009 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 09:00:02,010 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 10:00:00 UTC)" executed successfully 2026-09-18 10:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 11:00:00 UTC)" (scheduled at 2026-09-18 10:00:00+00:00) 2026-09-18 10:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-18 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 10:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 10:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 10:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 10:00:01,067 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 10:00:01,125 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 10:00:01,188 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 10:00:01,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 11:00:00 UTC)" executed successfully 2026-09-18 11:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 12:00:00 UTC)" (scheduled at 2026-09-18 11:00:00+00:00) 2026-09-18 11:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-18 11:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 11:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 11:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 11:00:01,115 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 11:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 11:00:01,169 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 11:00:01,224 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 11:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 12:00:00 UTC)" executed successfully 2026-09-18 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 13:00:00 UTC)" (scheduled at 2026-09-18 12:00:00+00:00) 2026-09-18 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-18 12:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 12:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 12:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 12:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 12:00:01,156 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 12:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 12:00:01,301 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 12:00:01,301 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 13:00:00 UTC)" executed successfully 2026-09-18 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 14:00:00 UTC)" (scheduled at 2026-09-18 13:00:00+00:00) 2026-09-18 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-18 13:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 13:00:01,498 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 13:00:01,501 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 13:00:01,504 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 13:00:01,505 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 13:00:01,578 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 13:00:01,666 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 13:00:01,667 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 14:00:00 UTC)" executed successfully 2026-09-18 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 15:00:00 UTC)" (scheduled at 2026-09-18 14:00:00+00:00) 2026-09-18 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-18 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 14:00:01,082 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 14:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 14:00:01,087 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 14:00:01,088 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 14:00:01,138 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 14:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 14:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 15:00:00 UTC)" executed successfully 2026-09-18 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 16:00:00 UTC)" (scheduled at 2026-09-18 15:00:00+00:00) 2026-09-18 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-18 15:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 15:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 15:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 15:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 15:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 15:00:01,168 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 15:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 15:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 16:00:00 UTC)" executed successfully 2026-09-18 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 17:00:00 UTC)" (scheduled at 2026-09-18 16:00:00+00:00) 2026-09-18 16:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-18 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 16:00:01,593 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 16:00:01,597 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 16:00:01,600 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 16:00:01,601 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 16:00:01,686 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 16:00:01,765 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 16:00:01,765 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 17:00:00 UTC)" executed successfully 2026-09-18 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 18:00:00 UTC)" (scheduled at 2026-09-18 17:00:00+00:00) 2026-09-18 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-18 17:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 17:00:01,523 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 17:00:01,525 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 17:00:01,528 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 17:00:01,528 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 17:00:01,585 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 17:00:01,657 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 17:00:01,657 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 18:00:00 UTC)" executed successfully 2026-09-18 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 19:00:00 UTC)" (scheduled at 2026-09-18 18:00:00+00:00) 2026-09-18 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-18 18:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 18:00:01,220 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 18:00:01,222 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 18:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 18:00:01,228 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 18:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 18:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 18:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 19:00:00 UTC)" executed successfully 2026-09-18 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 20:00:00 UTC)" (scheduled at 2026-09-18 19:00:00+00:00) 2026-09-18 19:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-18 19:00:00,154 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 19:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 19:00:01,214 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 19:00:01,216 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 19:00:01,216 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 19:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 19:00:01,359 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 19:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 20:00:00 UTC)" executed successfully 2026-09-18 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 21:00:00 UTC)" (scheduled at 2026-09-18 20:00:00+00:00) 2026-09-18 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-18 20:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 20:00:01,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 20:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 20:00:01,124 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 20:00:01,125 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 20:00:01,203 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 20:00:01,281 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 20:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 21:00:00 UTC)" executed successfully 2026-09-18 21:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 22:00:00 UTC)" (scheduled at 2026-09-18 21:00:00+00:00) 2026-09-18 21:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-18 21:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 21:00:01,110 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 21:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 21:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 21:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 21:00:01,175 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 21:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 21:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 22:00:00 UTC)" executed successfully 2026-09-18 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 23:00:00 UTC)" (scheduled at 2026-09-18 22:00:00+00:00) 2026-09-18 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-18 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 22:00:01,670 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 22:00:01,672 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 22:00:01,675 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 22:00:01,675 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 22:00:01,735 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 22:00:01,819 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 22:00:01,819 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-18 23:00:00 UTC)" executed successfully 2026-09-18 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 00:00:00 UTC)" (scheduled at 2026-09-18 23:00:00+00:00) 2026-09-18 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-18 23:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-18 23:00:01,132 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-18 23:00:01,134 INFO [fb-sync.worker] Scraped 50 posts 2026-09-18 23:00:01,137 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-18 23:00:01,137 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-18 23:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-18 23:00:01,280 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-18 23:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 00:00:00 UTC)" executed successfully 2026-09-19 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 01:00:00 UTC)" (scheduled at 2026-09-19 00:00:00+00:00) 2026-09-19 00:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-19 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 00:00:01,536 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 00:00:01,538 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 00:00:01,541 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 00:00:01,542 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 00:00:01,600 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 00:00:01,684 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 00:00:01,684 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 01:00:00 UTC)" executed successfully 2026-09-19 01:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 02:00:00 UTC)" (scheduled at 2026-09-19 01:00:00+00:00) 2026-09-19 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-19 01:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 01:00:01,184 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 01:00:01,186 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 01:00:01,190 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 01:00:01,190 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 01:00:01,250 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 01:00:01,314 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 01:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 02:00:00 UTC)" executed successfully 2026-09-19 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 03:00:00 UTC)" (scheduled at 2026-09-19 02:00:00+00:00) 2026-09-19 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-19 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 02:00:01,019 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 02:00:01,021 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 02:00:01,023 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 02:00:01,023 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 02:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 02:00:01,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 02:00:01,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 03:00:00 UTC)" executed successfully 2026-09-19 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 04:00:00 UTC)" (scheduled at 2026-09-19 03:00:00+00:00) 2026-09-19 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-19 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 03:00:01,076 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 03:00:01,077 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 03:00:01,081 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 03:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 03:00:01,130 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 03:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 03:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 04:00:00 UTC)" executed successfully 2026-09-19 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 05:00:00 UTC)" (scheduled at 2026-09-19 04:00:00+00:00) 2026-09-19 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-19 04:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 04:00:00,967 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 04:00:00,968 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 04:00:00,970 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 04:00:00,970 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 04:00:01,028 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 04:00:01,095 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 04:00:01,096 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 05:00:00 UTC)" executed successfully 2026-09-19 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 06:00:00 UTC)" (scheduled at 2026-09-19 05:00:00+00:00) 2026-09-19 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-19 05:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 05:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 05:00:01,056 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 05:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 05:00:01,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 05:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 05:00:01,214 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 05:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 06:00:00 UTC)" executed successfully 2026-09-19 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 07:00:00 UTC)" (scheduled at 2026-09-19 06:00:00+00:00) 2026-09-19 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-19 06:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 06:00:02,081 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 06:00:02,083 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 06:00:02,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 06:00:02,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 06:00:02,145 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 06:00:02,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 06:00:02,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 07:00:00 UTC)" executed successfully 2026-09-19 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 08:00:00 UTC)" (scheduled at 2026-09-19 07:00:00+00:00) 2026-09-19 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-19 07:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 07:00:01,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 07:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 07:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 07:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 07:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 07:00:01,333 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 07:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 08:00:00 UTC)" executed successfully 2026-09-19 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 09:00:00 UTC)" (scheduled at 2026-09-19 08:00:00+00:00) 2026-09-19 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-19 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 08:00:01,444 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 08:00:01,446 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 08:00:01,450 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 08:00:01,450 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 08:00:01,508 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 08:00:01,588 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 08:00:01,589 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 09:00:00 UTC)" executed successfully 2026-09-19 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 10:00:00 UTC)" (scheduled at 2026-09-19 09:00:00+00:00) 2026-09-19 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-19 09:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 09:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 09:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 09:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 09:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 09:00:01,288 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 09:00:01,362 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 09:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 10:00:00 UTC)" executed successfully 2026-09-19 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 11:00:00 UTC)" (scheduled at 2026-09-19 10:00:00+00:00) 2026-09-19 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-19 10:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 10:00:01,487 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 10:00:01,489 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 10:00:01,492 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 10:00:01,493 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 10:00:01,551 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 10:00:01,621 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 10:00:01,621 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 11:00:00 UTC)" executed successfully 2026-09-19 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 12:00:00 UTC)" (scheduled at 2026-09-19 11:00:00+00:00) 2026-09-19 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-19 11:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 11:00:01,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 11:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 11:00:01,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 11:00:01,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 11:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 11:00:01,259 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 11:00:01,259 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 12:00:00 UTC)" executed successfully 2026-09-19 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 13:00:00 UTC)" (scheduled at 2026-09-19 12:00:00+00:00) 2026-09-19 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-19 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 12:00:01,480 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 12:00:01,481 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 12:00:01,484 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 12:00:01,484 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 12:00:01,551 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 12:00:01,819 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 12:00:01,819 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 13:00:00 UTC)" executed successfully 2026-09-19 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 14:00:00 UTC)" (scheduled at 2026-09-19 13:00:00+00:00) 2026-09-19 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-19 13:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 13:00:01,021 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 13:00:01,023 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 13:00:01,027 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 13:00:01,027 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 13:00:01,081 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 13:00:01,154 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 13:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 14:00:00 UTC)" executed successfully 2026-09-19 14:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 15:00:00 UTC)" (scheduled at 2026-09-19 14:00:00+00:00) 2026-09-19 14:00:00,021 INFO [fb-sync] Starting FB sync... 2026-09-19 14:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 14:00:01,756 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 14:00:01,758 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 14:00:01,763 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 14:00:01,763 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 14:00:01,841 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 14:00:01,939 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 14:00:01,939 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 15:00:00 UTC)" executed successfully 2026-09-19 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 16:00:00 UTC)" (scheduled at 2026-09-19 15:00:00+00:00) 2026-09-19 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-19 15:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 15:00:01,456 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 15:00:01,459 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 15:00:01,461 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 15:00:01,462 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 15:00:01,531 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 15:00:01,638 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 15:00:01,638 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 16:00:00 UTC)" executed successfully 2026-09-19 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 17:00:00 UTC)" (scheduled at 2026-09-19 16:00:00+00:00) 2026-09-19 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-19 16:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 16:00:02,248 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 16:00:02,249 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 16:00:02,252 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 16:00:02,253 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 16:00:02,313 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 16:00:02,380 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 16:00:02,381 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 17:00:00 UTC)" executed successfully 2026-09-19 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 18:00:00 UTC)" (scheduled at 2026-09-19 17:00:00+00:00) 2026-09-19 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-19 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 17:00:01,784 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 17:00:01,786 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 17:00:01,789 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 17:00:01,790 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 17:00:01,861 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 17:00:01,944 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 17:00:01,945 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 18:00:00 UTC)" executed successfully 2026-09-19 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 19:00:00 UTC)" (scheduled at 2026-09-19 18:00:00+00:00) 2026-09-19 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-19 18:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 18:00:01,501 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 18:00:01,503 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 18:00:01,507 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 18:00:01,508 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 18:00:01,596 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 18:00:01,688 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 18:00:01,689 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 19:00:00 UTC)" executed successfully 2026-09-19 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 20:00:00 UTC)" (scheduled at 2026-09-19 19:00:00+00:00) 2026-09-19 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-19 19:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 19:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 19:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 19:00:01,285 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 19:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 19:00:01,352 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 19:00:01,404 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 19:00:01,404 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 20:00:00 UTC)" executed successfully 2026-09-19 20:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 21:00:00 UTC)" (scheduled at 2026-09-19 20:00:00+00:00) 2026-09-19 20:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-19 20:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 20:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 20:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 20:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 20:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 20:00:01,219 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 20:00:01,307 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 20:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 21:00:00 UTC)" executed successfully 2026-09-19 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 22:00:00 UTC)" (scheduled at 2026-09-19 21:00:00+00:00) 2026-09-19 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-19 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 21:00:01,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 21:00:01,135 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 21:00:01,138 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 21:00:01,138 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 21:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 21:00:01,222 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 21:00:01,222 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 22:00:00 UTC)" executed successfully 2026-09-19 22:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 23:00:00 UTC)" (scheduled at 2026-09-19 22:00:00+00:00) 2026-09-19 22:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-19 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 22:00:01,132 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 22:00:01,135 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 22:00:01,139 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 22:00:01,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 22:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 22:00:01,302 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 22:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-19 23:00:00 UTC)" executed successfully 2026-09-19 23:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 00:00:00 UTC)" (scheduled at 2026-09-19 23:00:00+00:00) 2026-09-19 23:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-19 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-19 23:00:01,401 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-19 23:00:01,403 INFO [fb-sync.worker] Scraped 50 posts 2026-09-19 23:00:01,406 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-19 23:00:01,407 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-19 23:00:01,509 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-19 23:00:01,612 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-19 23:00:01,612 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 00:00:00 UTC)" executed successfully 2026-09-20 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 01:00:00 UTC)" (scheduled at 2026-09-20 00:00:00+00:00) 2026-09-20 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-20 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 00:00:01,581 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 00:00:01,583 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 00:00:01,587 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 00:00:01,587 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 00:00:01,670 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 00:00:01,778 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 00:00:01,779 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 01:00:00 UTC)" executed successfully 2026-09-20 01:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 02:00:00 UTC)" (scheduled at 2026-09-20 01:00:00+00:00) 2026-09-20 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-20 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 01:00:02,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 01:00:02,139 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 01:00:02,142 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 01:00:02,142 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 01:00:02,218 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 01:00:02,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 01:00:02,301 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 02:00:00 UTC)" executed successfully 2026-09-20 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 03:00:00 UTC)" (scheduled at 2026-09-20 02:00:00+00:00) 2026-09-20 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-20 02:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 02:00:01,033 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 02:00:01,034 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 02:00:01,038 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 02:00:01,038 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 02:00:01,086 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 02:00:01,141 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 02:00:01,141 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 03:00:00 UTC)" executed successfully 2026-09-20 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 04:00:00 UTC)" (scheduled at 2026-09-20 03:00:00+00:00) 2026-09-20 03:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-20 03:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 03:00:00,941 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 03:00:00,942 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 03:00:00,946 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 03:00:00,946 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 03:00:00,997 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 03:00:01,051 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 03:00:01,052 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 04:00:00 UTC)" executed successfully 2026-09-20 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 05:00:00 UTC)" (scheduled at 2026-09-20 04:00:00+00:00) 2026-09-20 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-20 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 04:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 04:00:01,127 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 04:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 04:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 04:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 04:00:01,237 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 04:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 05:00:00 UTC)" executed successfully 2026-09-20 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 06:00:00 UTC)" (scheduled at 2026-09-20 05:00:00+00:00) 2026-09-20 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-20 05:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 05:00:01,105 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 05:00:01,106 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 05:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 05:00:01,112 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 05:00:01,187 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 05:00:01,264 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 05:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 06:00:00 UTC)" executed successfully 2026-09-20 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 07:00:00 UTC)" (scheduled at 2026-09-20 06:00:00+00:00) 2026-09-20 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-20 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 06:00:01,832 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 06:00:01,834 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 06:00:01,838 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 06:00:01,838 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 06:00:01,908 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 06:00:02,019 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 06:00:02,020 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 07:00:00 UTC)" executed successfully 2026-09-20 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 08:00:00 UTC)" (scheduled at 2026-09-20 07:00:00+00:00) 2026-09-20 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-20 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 07:00:01,321 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 07:00:01,323 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 07:00:01,325 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 07:00:01,325 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 07:00:01,383 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 07:00:01,465 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 07:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 08:00:00 UTC)" executed successfully 2026-09-20 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 09:00:00 UTC)" (scheduled at 2026-09-20 08:00:00+00:00) 2026-09-20 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-20 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 08:00:02,823 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 08:00:02,825 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 08:00:02,828 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 08:00:02,828 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 08:00:02,901 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 08:00:02,945 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 08:00:02,945 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 09:00:00 UTC)" executed successfully 2026-09-20 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 10:00:00 UTC)" (scheduled at 2026-09-20 09:00:00+00:00) 2026-09-20 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-20 09:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 09:00:01,126 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 09:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 09:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 09:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 09:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 09:00:01,246 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 09:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 10:00:00 UTC)" executed successfully 2026-09-20 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 11:00:00 UTC)" (scheduled at 2026-09-20 10:00:00+00:00) 2026-09-20 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-20 10:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 10:00:01,325 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 10:00:01,326 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 10:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 10:00:01,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 10:00:01,371 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 10:00:01,445 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 10:00:01,446 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 11:00:00 UTC)" executed successfully 2026-09-20 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 12:00:00 UTC)" (scheduled at 2026-09-20 11:00:00+00:00) 2026-09-20 11:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-20 11:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 11:00:01,252 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 11:00:01,253 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 11:00:01,256 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 11:00:01,256 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 11:00:01,312 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 11:00:01,384 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 11:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 12:00:00 UTC)" executed successfully 2026-09-20 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 13:00:00 UTC)" (scheduled at 2026-09-20 12:00:00+00:00) 2026-09-20 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-20 12:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 12:00:01,262 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 12:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 12:00:01,266 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 12:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 12:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 12:00:01,405 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 12:00:01,405 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 13:00:00 UTC)" executed successfully 2026-09-20 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 14:00:00 UTC)" (scheduled at 2026-09-20 13:00:00+00:00) 2026-09-20 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-20 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 13:00:01,488 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 13:00:01,490 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 13:00:01,493 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 13:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 13:00:01,546 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 13:00:01,612 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 13:00:01,612 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 14:00:00 UTC)" executed successfully 2026-09-20 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 15:00:00 UTC)" (scheduled at 2026-09-20 14:00:00+00:00) 2026-09-20 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-20 14:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 14:00:01,942 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 14:00:01,944 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 14:00:01,948 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 14:00:01,948 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 14:00:02,019 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 14:00:02,099 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 14:00:02,100 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 15:00:00 UTC)" executed successfully 2026-09-20 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 16:00:00 UTC)" (scheduled at 2026-09-20 15:00:00+00:00) 2026-09-20 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-20 15:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 15:00:01,509 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 15:00:01,512 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 15:00:01,516 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 15:00:01,516 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 15:00:01,575 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 15:00:01,660 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 15:00:01,661 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 16:00:00 UTC)" executed successfully 2026-09-20 16:00:00,017 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 17:00:00 UTC)" (scheduled at 2026-09-20 16:00:00+00:00) 2026-09-20 16:00:00,020 INFO [fb-sync] Starting FB sync... 2026-09-20 16:00:00,109 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 16:00:02,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 16:00:02,101 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 16:00:02,104 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 16:00:02,105 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 16:00:02,169 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 16:00:02,242 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 16:00:02,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 17:00:00 UTC)" executed successfully 2026-09-20 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 18:00:00 UTC)" (scheduled at 2026-09-20 17:00:00+00:00) 2026-09-20 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-20 17:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 17:00:01,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 17:00:01,236 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 17:00:01,239 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 17:00:01,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 17:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 17:00:01,338 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 17:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 18:00:00 UTC)" executed successfully 2026-09-20 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 19:00:00 UTC)" (scheduled at 2026-09-20 18:00:00+00:00) 2026-09-20 18:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-20 18:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 18:00:01,657 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 18:00:01,659 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 18:00:01,662 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 18:00:01,662 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 18:00:01,728 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 18:00:01,806 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 18:00:01,807 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 19:00:00 UTC)" executed successfully 2026-09-20 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 20:00:00 UTC)" (scheduled at 2026-09-20 19:00:00+00:00) 2026-09-20 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-20 19:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 19:00:01,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 19:00:01,185 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 19:00:01,189 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 19:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 19:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 19:00:01,347 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 19:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 20:00:00 UTC)" executed successfully 2026-09-20 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 21:00:00 UTC)" (scheduled at 2026-09-20 20:00:00+00:00) 2026-09-20 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-20 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 20:00:01,095 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 20:00:01,096 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 20:00:01,099 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 20:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 20:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 20:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 20:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 21:00:00 UTC)" executed successfully 2026-09-20 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 22:00:00 UTC)" (scheduled at 2026-09-20 21:00:00+00:00) 2026-09-20 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-20 21:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 21:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 21:00:01,117 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 21:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 21:00:01,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 21:00:01,170 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 21:00:01,228 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 21:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 22:00:00 UTC)" executed successfully 2026-09-20 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 23:00:00 UTC)" (scheduled at 2026-09-20 22:00:00+00:00) 2026-09-20 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-20 22:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 22:00:01,146 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 22:00:01,148 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 22:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 22:00:01,152 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 22:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 22:00:01,306 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 22:00:01,306 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-20 23:00:00 UTC)" executed successfully 2026-09-20 23:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 00:00:00 UTC)" (scheduled at 2026-09-20 23:00:00+00:00) 2026-09-20 23:00:00,022 INFO [fb-sync] Starting FB sync... 2026-09-20 23:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-20 23:00:01,265 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-20 23:00:01,267 INFO [fb-sync.worker] Scraped 50 posts 2026-09-20 23:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-20 23:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-20 23:00:01,346 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-20 23:00:01,411 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-20 23:00:01,411 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 00:00:00 UTC)" executed successfully 2026-09-21 00:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 01:00:00 UTC)" (scheduled at 2026-09-21 00:00:00+00:00) 2026-09-21 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-21 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 00:00:02,348 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 00:00:02,350 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 00:00:02,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 00:00:02,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 00:00:02,417 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 00:00:02,489 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 00:00:02,489 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 01:00:00 UTC)" executed successfully 2026-09-21 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 02:00:00 UTC)" (scheduled at 2026-09-21 01:00:00+00:00) 2026-09-21 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-21 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 01:00:01,736 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 01:00:01,738 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 01:00:01,740 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 01:00:01,741 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 01:00:01,816 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 01:00:01,902 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 01:00:01,902 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 02:00:00 UTC)" executed successfully 2026-09-21 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 03:00:00 UTC)" (scheduled at 2026-09-21 02:00:00+00:00) 2026-09-21 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-21 02:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 02:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 02:00:01,352 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 02:00:01,356 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 02:00:01,356 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 02:00:01,433 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 02:00:01,508 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 02:00:01,508 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 03:00:00 UTC)" executed successfully 2026-09-21 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 04:00:00 UTC)" (scheduled at 2026-09-21 03:00:00+00:00) 2026-09-21 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-21 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 03:00:01,133 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 03:00:01,135 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 03:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 03:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 03:00:01,218 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 03:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 03:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 04:00:00 UTC)" executed successfully 2026-09-21 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 05:00:00 UTC)" (scheduled at 2026-09-21 04:00:00+00:00) 2026-09-21 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-21 04:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 04:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 04:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 04:00:01,272 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 04:00:01,273 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 04:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 04:00:01,402 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 04:00:01,402 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 05:00:00 UTC)" executed successfully 2026-09-21 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 06:00:00 UTC)" (scheduled at 2026-09-21 05:00:00+00:00) 2026-09-21 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-21 05:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 05:00:01,614 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 05:00:01,618 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 05:00:01,622 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 05:00:01,622 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 05:00:01,717 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 05:00:01,828 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 05:00:01,829 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 06:00:00 UTC)" executed successfully 2026-09-21 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 07:00:00 UTC)" (scheduled at 2026-09-21 06:00:00+00:00) 2026-09-21 06:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-21 06:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 06:00:01,478 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 06:00:01,480 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 06:00:01,483 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 06:00:01,483 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 06:00:01,545 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 06:00:01,615 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 06:00:01,616 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 07:00:00 UTC)" executed successfully 2026-09-21 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 08:00:00 UTC)" (scheduled at 2026-09-21 07:00:00+00:00) 2026-09-21 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-21 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 07:00:01,478 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 07:00:01,481 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 07:00:01,485 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 07:00:01,485 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 07:00:01,560 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 07:00:01,613 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 07:00:01,614 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 08:00:00 UTC)" executed successfully 2026-09-21 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 09:00:00 UTC)" (scheduled at 2026-09-21 08:00:00+00:00) 2026-09-21 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-21 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 08:00:01,936 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 08:00:01,938 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 08:00:01,941 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 08:00:01,942 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 08:00:02,020 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 08:00:02,102 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 08:00:02,103 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 09:00:00 UTC)" executed successfully 2026-09-21 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 10:00:00 UTC)" (scheduled at 2026-09-21 09:00:00+00:00) 2026-09-21 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-21 09:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 09:00:01,667 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 09:00:01,669 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 09:00:01,672 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 09:00:01,672 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 09:00:01,741 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 09:00:01,823 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 09:00:01,824 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 10:00:00 UTC)" executed successfully 2026-09-21 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 11:00:00 UTC)" (scheduled at 2026-09-21 10:00:00+00:00) 2026-09-21 10:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-21 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 10:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 10:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 10:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 10:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 10:00:01,358 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 10:00:01,435 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 10:00:01,438 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 11:00:00 UTC)" executed successfully 2026-09-21 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 12:00:00 UTC)" (scheduled at 2026-09-21 11:00:00+00:00) 2026-09-21 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-21 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 11:00:02,003 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 11:00:02,005 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 11:00:02,008 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 11:00:02,008 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 11:00:02,069 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 11:00:02,140 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 11:00:02,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 12:00:00 UTC)" executed successfully 2026-09-21 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 13:00:00 UTC)" (scheduled at 2026-09-21 12:00:00+00:00) 2026-09-21 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-21 12:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 12:00:02,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 12:00:02,134 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 12:00:02,139 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 12:00:02,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 12:00:02,219 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 12:00:02,303 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 12:00:02,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 13:00:00 UTC)" executed successfully 2026-09-21 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 14:00:00 UTC)" (scheduled at 2026-09-21 13:00:00+00:00) 2026-09-21 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-21 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 13:00:02,053 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 13:00:02,056 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 13:00:02,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 13:00:02,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 13:00:02,128 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 13:00:02,214 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 13:00:02,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 14:00:00 UTC)" executed successfully 2026-09-21 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 15:00:00 UTC)" (scheduled at 2026-09-21 14:00:00+00:00) 2026-09-21 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-21 14:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 14:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 14:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 14:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 14:00:01,132 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 14:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 14:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 14:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 15:00:00 UTC)" executed successfully 2026-09-21 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 16:00:00 UTC)" (scheduled at 2026-09-21 15:00:00+00:00) 2026-09-21 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-21 15:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 15:00:02,417 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 15:00:02,419 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 15:00:02,424 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 15:00:02,425 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 15:00:02,514 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 15:00:02,611 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 15:00:02,611 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 16:00:00 UTC)" executed successfully 2026-09-21 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 17:00:00 UTC)" (scheduled at 2026-09-21 16:00:00+00:00) 2026-09-21 16:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-21 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 16:00:01,716 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 16:00:01,719 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 16:00:01,724 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 16:00:01,724 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 16:00:01,807 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 16:00:01,919 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 16:00:01,920 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 17:00:00 UTC)" executed successfully 2026-09-21 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 18:00:00 UTC)" (scheduled at 2026-09-21 17:00:00+00:00) 2026-09-21 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-21 17:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 17:00:02,794 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 17:00:02,796 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 17:00:02,798 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 17:00:02,799 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 17:00:02,852 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 17:00:02,919 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 17:00:02,919 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 18:00:00 UTC)" executed successfully 2026-09-21 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 19:00:00 UTC)" (scheduled at 2026-09-21 18:00:00+00:00) 2026-09-21 18:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-21 18:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 18:00:01,253 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 18:00:01,255 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 18:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 18:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 18:00:01,358 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 18:00:01,446 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 18:00:01,446 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 19:00:00 UTC)" executed successfully 2026-09-21 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 20:00:00 UTC)" (scheduled at 2026-09-21 19:00:00+00:00) 2026-09-21 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-21 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 19:00:01,320 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 19:00:01,322 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 19:00:01,325 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 19:00:01,325 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 19:00:01,382 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 19:00:01,442 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 19:00:01,442 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 20:00:00 UTC)" executed successfully 2026-09-21 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 21:00:00 UTC)" (scheduled at 2026-09-21 20:00:00+00:00) 2026-09-21 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-21 20:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 20:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 20:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 20:00:01,172 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 20:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 20:00:01,240 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 20:00:01,306 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 20:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 21:00:00 UTC)" executed successfully 2026-09-21 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 22:00:00 UTC)" (scheduled at 2026-09-21 21:00:00+00:00) 2026-09-21 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-21 21:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 21:00:01,106 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 21:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 21:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 21:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 21:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 21:00:01,243 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 21:00:01,243 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 22:00:00 UTC)" executed successfully 2026-09-21 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 23:00:00 UTC)" (scheduled at 2026-09-21 22:00:00+00:00) 2026-09-21 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-21 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 22:00:01,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 22:00:01,065 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 22:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 22:00:01,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 22:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 22:00:01,189 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 22:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-21 23:00:00 UTC)" executed successfully 2026-09-21 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 00:00:00 UTC)" (scheduled at 2026-09-21 23:00:00+00:00) 2026-09-21 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-21 23:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-21 23:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-21 23:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-09-21 23:00:01,100 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-21 23:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-21 23:00:01,167 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-21 23:00:01,224 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-21 23:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 00:00:00 UTC)" executed successfully 2026-09-22 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 01:00:00 UTC)" (scheduled at 2026-09-22 00:00:00+00:00) 2026-09-22 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-22 00:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 00:00:01,674 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 00:00:01,676 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 00:00:01,679 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 00:00:01,680 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 00:00:01,764 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 00:00:01,868 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 00:00:01,868 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 01:00:00 UTC)" executed successfully 2026-09-22 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 02:00:00 UTC)" (scheduled at 2026-09-22 01:00:00+00:00) 2026-09-22 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-22 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 01:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 01:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 01:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 01:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 01:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 01:00:01,371 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 01:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 02:00:00 UTC)" executed successfully 2026-09-22 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 03:00:00 UTC)" (scheduled at 2026-09-22 02:00:00+00:00) 2026-09-22 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-22 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 02:00:01,176 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 02:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 02:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 02:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 02:00:01,244 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 02:00:01,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 02:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 03:00:00 UTC)" executed successfully 2026-09-22 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 04:00:00 UTC)" (scheduled at 2026-09-22 03:00:00+00:00) 2026-09-22 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-22 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 03:00:01,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 03:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 03:00:01,094 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 03:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 03:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 03:00:01,196 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 03:00:01,196 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 04:00:00 UTC)" executed successfully 2026-09-22 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 05:00:00 UTC)" (scheduled at 2026-09-22 04:00:00+00:00) 2026-09-22 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-22 04:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 04:00:01,381 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 04:00:01,383 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 04:00:01,387 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 04:00:01,388 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 04:00:01,456 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 04:00:01,530 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 04:00:01,530 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 05:00:00 UTC)" executed successfully 2026-09-22 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 06:00:00 UTC)" (scheduled at 2026-09-22 05:00:00+00:00) 2026-09-22 05:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-22 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 05:00:01,328 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 05:00:01,330 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 05:00:01,333 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 05:00:01,333 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 05:00:01,392 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 05:00:01,456 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 05:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 06:00:00 UTC)" executed successfully 2026-09-22 06:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 07:00:00 UTC)" (scheduled at 2026-09-22 06:00:00+00:00) 2026-09-22 06:00:00,019 INFO [fb-sync] Starting FB sync... 2026-09-22 06:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 06:00:01,144 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 06:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 06:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 06:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 06:00:01,219 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 06:00:01,301 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 06:00:01,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 07:00:00 UTC)" executed successfully 2026-09-22 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 08:00:00 UTC)" (scheduled at 2026-09-22 07:00:00+00:00) 2026-09-22 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-22 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 07:00:02,275 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 07:00:02,276 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 07:00:02,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 07:00:02,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 07:00:02,337 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 07:00:02,400 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 07:00:02,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 08:00:00 UTC)" executed successfully 2026-09-22 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 09:00:00 UTC)" (scheduled at 2026-09-22 08:00:00+00:00) 2026-09-22 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-22 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 08:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 08:00:01,351 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 08:00:01,355 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 08:00:01,356 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 08:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 08:00:01,520 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 08:00:01,520 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 09:00:00 UTC)" executed successfully 2026-09-22 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 10:00:00 UTC)" (scheduled at 2026-09-22 09:00:00+00:00) 2026-09-22 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-22 09:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 09:00:01,437 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 09:00:01,439 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 09:00:01,442 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 09:00:01,443 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 09:00:01,543 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 09:00:01,626 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 09:00:01,627 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 10:00:00 UTC)" executed successfully 2026-09-22 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 11:00:00 UTC)" (scheduled at 2026-09-22 10:00:00+00:00) 2026-09-22 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-22 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 10:00:02,465 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 10:00:02,467 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 10:00:02,471 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 10:00:02,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 10:00:02,528 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 10:00:02,577 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 10:00:02,577 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 11:00:00 UTC)" executed successfully 2026-09-22 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 12:00:00 UTC)" (scheduled at 2026-09-22 11:00:00+00:00) 2026-09-22 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-22 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 11:00:01,358 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 11:00:01,364 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 11:00:01,369 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 11:00:01,369 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 11:00:01,445 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 11:00:01,529 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 11:00:01,529 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 12:00:00 UTC)" executed successfully 2026-09-22 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 13:00:00 UTC)" (scheduled at 2026-09-22 12:00:00+00:00) 2026-09-22 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-22 12:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 12:00:01,288 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 12:00:01,290 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 12:00:01,293 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 12:00:01,294 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 12:00:01,358 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 12:00:01,434 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 12:00:01,435 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 13:00:00 UTC)" executed successfully 2026-09-22 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 14:00:00 UTC)" (scheduled at 2026-09-22 13:00:00+00:00) 2026-09-22 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-22 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 13:00:01,211 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 13:00:01,213 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 13:00:01,216 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 13:00:01,217 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 13:00:01,278 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 13:00:01,335 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 13:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 14:00:00 UTC)" executed successfully 2026-09-22 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 15:00:00 UTC)" (scheduled at 2026-09-22 14:00:00+00:00) 2026-09-22 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-22 14:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 14:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 14:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 14:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 14:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 14:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 14:00:01,304 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 14:00:01,304 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 15:00:00 UTC)" executed successfully 2026-09-22 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 16:00:00 UTC)" (scheduled at 2026-09-22 15:00:00+00:00) 2026-09-22 15:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-22 15:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 15:00:01,046 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 15:00:01,048 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 15:00:01,051 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 15:00:01,051 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 15:00:01,105 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 15:00:01,190 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 15:00:01,191 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 16:00:00 UTC)" executed successfully 2026-09-22 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 17:00:00 UTC)" (scheduled at 2026-09-22 16:00:00+00:00) 2026-09-22 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-22 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 16:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 16:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 16:00:01,228 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 16:00:01,228 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 16:00:01,311 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 16:00:01,408 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 16:00:01,408 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 17:00:00 UTC)" executed successfully 2026-09-22 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 18:00:00 UTC)" (scheduled at 2026-09-22 17:00:00+00:00) 2026-09-22 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-22 17:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 17:00:01,578 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 17:00:01,579 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 17:00:01,582 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 17:00:01,582 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 17:00:01,657 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 17:00:01,782 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 17:00:01,782 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 18:00:00 UTC)" executed successfully 2026-09-22 18:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 19:00:00 UTC)" (scheduled at 2026-09-22 18:00:00+00:00) 2026-09-22 18:00:00,003 INFO [fb-sync] Starting FB sync... 2026-09-22 18:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 18:00:01,418 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 18:00:01,419 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 18:00:01,423 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 18:00:01,424 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 18:00:01,467 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 18:00:01,518 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 18:00:01,518 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 19:00:00 UTC)" executed successfully 2026-09-22 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 20:00:00 UTC)" (scheduled at 2026-09-22 19:00:00+00:00) 2026-09-22 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-22 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 19:00:01,707 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 19:00:01,709 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 19:00:01,714 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 19:00:01,715 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 19:00:01,797 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 19:00:01,868 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 19:00:01,868 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 20:00:00 UTC)" executed successfully 2026-09-22 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 21:00:00 UTC)" (scheduled at 2026-09-22 20:00:00+00:00) 2026-09-22 20:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-22 20:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 20:00:01,040 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 20:00:01,041 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 20:00:01,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 20:00:01,044 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 20:00:01,099 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 20:00:01,190 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 20:00:01,191 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 21:00:00 UTC)" executed successfully 2026-09-22 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 22:00:00 UTC)" (scheduled at 2026-09-22 21:00:00+00:00) 2026-09-22 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-22 21:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 21:00:01,583 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 21:00:01,586 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 21:00:01,589 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 21:00:01,590 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 21:00:01,664 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 21:00:01,756 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 21:00:01,756 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 22:00:00 UTC)" executed successfully 2026-09-22 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 23:00:00 UTC)" (scheduled at 2026-09-22 22:00:00+00:00) 2026-09-22 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-22 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 22:00:01,217 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 22:00:01,219 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 22:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 22:00:01,223 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 22:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 22:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 22:00:01,346 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-22 23:00:00 UTC)" executed successfully 2026-09-22 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 00:00:00 UTC)" (scheduled at 2026-09-22 23:00:00+00:00) 2026-09-22 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-22 23:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-22 23:00:00,993 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-22 23:00:00,995 INFO [fb-sync.worker] Scraped 50 posts 2026-09-22 23:00:00,999 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-22 23:00:01,000 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-22 23:00:01,081 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-22 23:00:01,149 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-22 23:00:01,149 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 00:00:00 UTC)" executed successfully 2026-09-23 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 01:00:00 UTC)" (scheduled at 2026-09-23 00:00:00+00:00) 2026-09-23 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-23 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 00:00:01,564 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 00:00:01,565 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 00:00:01,568 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 00:00:01,568 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 00:00:01,664 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 00:00:01,732 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 00:00:01,732 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 01:00:00 UTC)" executed successfully 2026-09-23 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 02:00:00 UTC)" (scheduled at 2026-09-23 01:00:00+00:00) 2026-09-23 01:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-23 01:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 01:00:00,975 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 01:00:00,976 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 01:00:00,979 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 01:00:00,979 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 01:00:01,037 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 01:00:01,127 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 01:00:01,127 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 02:00:00 UTC)" executed successfully 2026-09-23 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 03:00:00 UTC)" (scheduled at 2026-09-23 02:00:00+00:00) 2026-09-23 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-23 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 02:00:00,997 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 02:00:00,998 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 02:00:01,001 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 02:00:01,001 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 02:00:01,060 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 02:00:01,120 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 02:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 03:00:00 UTC)" executed successfully 2026-09-23 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 04:00:00 UTC)" (scheduled at 2026-09-23 03:00:00+00:00) 2026-09-23 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-23 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 03:00:02,420 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 03:00:02,422 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 03:00:02,427 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 03:00:02,427 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 03:00:02,504 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 03:00:02,612 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 03:00:02,612 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 04:00:00 UTC)" executed successfully 2026-09-23 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 05:00:00 UTC)" (scheduled at 2026-09-23 04:00:00+00:00) 2026-09-23 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-23 04:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 04:00:01,044 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 04:00:01,046 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 04:00:01,049 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 04:00:01,050 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 04:00:01,095 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 04:00:01,173 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 04:00:01,173 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 05:00:00 UTC)" executed successfully 2026-09-23 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 06:00:00 UTC)" (scheduled at 2026-09-23 05:00:00+00:00) 2026-09-23 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-23 05:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 05:00:01,455 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 05:00:01,456 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 05:00:01,458 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 05:00:01,459 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 05:00:01,518 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 05:00:01,584 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 05:00:01,585 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 06:00:00 UTC)" executed successfully 2026-09-23 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 07:00:00 UTC)" (scheduled at 2026-09-23 06:00:00+00:00) 2026-09-23 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-23 06:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 06:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 06:00:01,199 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 06:00:01,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 06:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 06:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 06:00:01,317 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 06:00:01,317 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 07:00:00 UTC)" executed successfully 2026-09-23 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 08:00:00 UTC)" (scheduled at 2026-09-23 07:00:00+00:00) 2026-09-23 07:00:00,021 INFO [fb-sync] Starting FB sync... 2026-09-23 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 07:00:01,178 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 07:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 07:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 07:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 07:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 07:00:01,347 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 07:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 08:00:00 UTC)" executed successfully 2026-09-23 08:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 09:00:00 UTC)" (scheduled at 2026-09-23 08:00:00+00:00) 2026-09-23 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-23 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 08:00:01,241 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 08:00:01,243 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 08:00:01,246 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 08:00:01,246 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 08:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 08:00:01,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 08:00:01,376 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 09:00:00 UTC)" executed successfully 2026-09-23 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 10:00:00 UTC)" (scheduled at 2026-09-23 09:00:00+00:00) 2026-09-23 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-23 09:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 09:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 09:00:01,192 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 09:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 09:00:01,194 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 09:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 09:00:01,339 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 09:00:01,340 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 10:00:00 UTC)" executed successfully 2026-09-23 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 11:00:00 UTC)" (scheduled at 2026-09-23 10:00:00+00:00) 2026-09-23 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-23 10:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 10:00:02,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 10:00:02,153 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 10:00:02,156 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 10:00:02,156 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 10:00:02,221 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 10:00:02,292 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 10:00:02,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 11:00:00 UTC)" executed successfully 2026-09-23 11:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 12:00:00 UTC)" (scheduled at 2026-09-23 11:00:00+00:00) 2026-09-23 11:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-23 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 11:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 11:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 11:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 11:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 11:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 11:00:01,297 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 11:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 12:00:00 UTC)" executed successfully 2026-09-23 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 13:00:00 UTC)" (scheduled at 2026-09-23 12:00:00+00:00) 2026-09-23 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-23 12:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 12:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 12:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 12:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 12:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 12:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 12:00:01,260 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 12:00:01,260 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 13:00:00 UTC)" executed successfully 2026-09-23 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 14:00:00 UTC)" (scheduled at 2026-09-23 13:00:00+00:00) 2026-09-23 13:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-23 13:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 13:00:01,692 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 13:00:01,694 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 13:00:01,697 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 13:00:01,697 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 13:00:01,759 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 13:00:01,821 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 13:00:01,822 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 14:00:00 UTC)" executed successfully 2026-09-23 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 15:00:00 UTC)" (scheduled at 2026-09-23 14:00:00+00:00) 2026-09-23 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-23 14:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 14:00:01,452 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 14:00:01,454 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 14:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 14:00:01,458 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 14:00:01,538 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 14:00:01,618 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 14:00:01,619 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 15:00:00 UTC)" executed successfully 2026-09-23 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 16:00:00 UTC)" (scheduled at 2026-09-23 15:00:00+00:00) 2026-09-23 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-23 15:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 15:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 15:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 15:00:01,273 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 15:00:01,273 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 15:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 15:00:01,444 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 15:00:01,444 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 16:00:00 UTC)" executed successfully 2026-09-23 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 17:00:00 UTC)" (scheduled at 2026-09-23 16:00:00+00:00) 2026-09-23 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-23 16:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 16:00:01,788 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 16:00:01,790 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 16:00:01,793 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 16:00:01,794 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 16:00:01,856 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 16:00:01,909 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 16:00:01,910 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 17:00:00 UTC)" executed successfully 2026-09-23 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 18:00:00 UTC)" (scheduled at 2026-09-23 17:00:00+00:00) 2026-09-23 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-23 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 17:00:01,270 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 17:00:01,271 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 17:00:01,275 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 17:00:01,275 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 17:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 17:00:01,404 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 17:00:01,404 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 18:00:00 UTC)" executed successfully 2026-09-23 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 19:00:00 UTC)" (scheduled at 2026-09-23 18:00:00+00:00) 2026-09-23 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-23 18:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 18:00:01,526 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 18:00:01,529 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 18:00:01,532 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 18:00:01,532 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 18:00:01,620 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 18:00:01,709 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 18:00:01,709 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 19:00:00 UTC)" executed successfully 2026-09-23 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 20:00:00 UTC)" (scheduled at 2026-09-23 19:00:00+00:00) 2026-09-23 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-23 19:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 19:00:01,838 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 19:00:01,840 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 19:00:01,844 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 19:00:01,845 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 19:00:01,914 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 19:00:02,001 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 19:00:02,001 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 20:00:00 UTC)" executed successfully 2026-09-23 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 21:00:00 UTC)" (scheduled at 2026-09-23 20:00:00+00:00) 2026-09-23 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-23 20:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 20:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 20:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 20:00:01,181 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 20:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 20:00:01,244 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 20:00:01,313 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 20:00:01,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 21:00:00 UTC)" executed successfully 2026-09-23 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 22:00:00 UTC)" (scheduled at 2026-09-23 21:00:00+00:00) 2026-09-23 21:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-23 21:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 21:00:01,225 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 21:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 21:00:01,232 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 21:00:01,232 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 21:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 21:00:01,415 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 21:00:01,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 22:00:00 UTC)" executed successfully 2026-09-23 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 23:00:00 UTC)" (scheduled at 2026-09-23 22:00:00+00:00) 2026-09-23 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-23 22:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 22:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 22:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 22:00:01,135 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 22:00:01,135 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 22:00:01,205 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 22:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 22:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-23 23:00:00 UTC)" executed successfully 2026-09-23 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 00:00:00 UTC)" (scheduled at 2026-09-23 23:00:00+00:00) 2026-09-23 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-23 23:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-23 23:00:01,730 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-23 23:00:01,732 INFO [fb-sync.worker] Scraped 50 posts 2026-09-23 23:00:01,734 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-23 23:00:01,734 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-23 23:00:01,780 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-23 23:00:01,848 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-23 23:00:01,848 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 00:00:00 UTC)" executed successfully 2026-09-24 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 01:00:00 UTC)" (scheduled at 2026-09-24 00:00:00+00:00) 2026-09-24 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-24 00:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 00:00:01,079 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 00:00:01,081 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 00:00:01,085 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 00:00:01,085 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 00:00:01,158 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 00:00:01,240 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 00:00:01,240 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 01:00:00 UTC)" executed successfully 2026-09-24 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 02:00:00 UTC)" (scheduled at 2026-09-24 01:00:00+00:00) 2026-09-24 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-24 01:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 01:00:01,186 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 01:00:01,187 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 01:00:01,191 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 01:00:01,191 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 01:00:01,255 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 01:00:01,325 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 01:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 02:00:00 UTC)" executed successfully 2026-09-24 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 03:00:00 UTC)" (scheduled at 2026-09-24 02:00:00+00:00) 2026-09-24 02:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-24 02:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 02:00:01,016 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 02:00:01,018 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 02:00:01,021 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 02:00:01,021 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 02:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 02:00:01,145 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 02:00:01,145 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 03:00:00 UTC)" executed successfully 2026-09-24 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 04:00:00 UTC)" (scheduled at 2026-09-24 03:00:00+00:00) 2026-09-24 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-24 03:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 03:00:01,487 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 03:00:01,488 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 03:00:01,492 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 03:00:01,492 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 03:00:01,559 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 03:00:01,635 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 03:00:01,635 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 04:00:00 UTC)" executed successfully 2026-09-24 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 05:00:00 UTC)" (scheduled at 2026-09-24 04:00:00+00:00) 2026-09-24 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-24 04:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 04:00:02,003 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 04:00:02,006 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 04:00:02,010 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 04:00:02,010 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 04:00:02,101 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 04:00:02,180 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 04:00:02,180 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 05:00:00 UTC)" executed successfully 2026-09-24 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 06:00:00 UTC)" (scheduled at 2026-09-24 05:00:00+00:00) 2026-09-24 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-24 05:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 05:00:01,452 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 05:00:01,454 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 05:00:01,458 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 05:00:01,459 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 05:00:01,527 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 05:00:01,607 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 05:00:01,608 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 06:00:00 UTC)" executed successfully 2026-09-24 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 07:00:00 UTC)" (scheduled at 2026-09-24 06:00:00+00:00) 2026-09-24 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-24 06:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 06:00:01,380 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 06:00:01,382 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 06:00:01,385 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 06:00:01,385 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 06:00:01,443 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 06:00:01,503 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 06:00:01,504 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 07:00:00 UTC)" executed successfully 2026-09-24 07:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 08:00:00 UTC)" (scheduled at 2026-09-24 07:00:00+00:00) 2026-09-24 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-24 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 07:00:01,260 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 07:00:01,262 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 07:00:01,266 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 07:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 07:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 07:00:01,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 07:00:01,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 08:00:00 UTC)" executed successfully 2026-09-24 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 09:00:00 UTC)" (scheduled at 2026-09-24 08:00:00+00:00) 2026-09-24 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-24 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 08:00:01,182 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 08:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 08:00:01,188 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 08:00:01,188 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 08:00:01,258 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 08:00:01,339 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 08:00:01,340 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 09:00:00 UTC)" executed successfully 2026-09-24 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 10:00:00 UTC)" (scheduled at 2026-09-24 09:00:00+00:00) 2026-09-24 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-24 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 09:00:01,212 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 09:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 09:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 09:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 09:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 09:00:01,396 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 09:00:01,396 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 10:00:00 UTC)" executed successfully 2026-09-24 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 11:00:00 UTC)" (scheduled at 2026-09-24 10:00:00+00:00) 2026-09-24 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-24 10:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 10:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 10:00:01,195 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 10:00:01,198 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 10:00:01,198 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 10:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 10:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 10:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 11:00:00 UTC)" executed successfully 2026-09-24 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 12:00:00 UTC)" (scheduled at 2026-09-24 11:00:00+00:00) 2026-09-24 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-24 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 11:00:01,756 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 11:00:01,758 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 11:00:01,762 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 11:00:01,763 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 11:00:01,838 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 11:00:01,924 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 11:00:01,924 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 12:00:00 UTC)" executed successfully 2026-09-24 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 13:00:00 UTC)" (scheduled at 2026-09-24 12:00:00+00:00) 2026-09-24 12:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-24 12:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 12:00:01,370 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 12:00:01,372 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 12:00:01,375 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 12:00:01,376 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 12:00:01,439 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 12:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 12:00:01,511 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 13:00:00 UTC)" executed successfully 2026-09-24 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 14:00:00 UTC)" (scheduled at 2026-09-24 13:00:00+00:00) 2026-09-24 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-24 13:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 13:00:02,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 13:00:02,127 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 13:00:02,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 13:00:02,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 13:00:02,214 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 13:00:02,291 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 13:00:02,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 14:00:00 UTC)" executed successfully 2026-09-24 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 15:00:00 UTC)" (scheduled at 2026-09-24 14:00:00+00:00) 2026-09-24 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-24 14:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 14:00:01,800 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 14:00:01,802 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 14:00:01,806 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 14:00:01,807 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 14:00:01,892 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 14:00:01,988 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 14:00:01,989 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 15:00:00 UTC)" executed successfully 2026-09-24 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 16:00:00 UTC)" (scheduled at 2026-09-24 15:00:00+00:00) 2026-09-24 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-24 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 15:00:01,400 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 15:00:01,402 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 15:00:01,406 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 15:00:01,406 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 15:00:01,479 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 15:00:01,555 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 15:00:01,556 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 16:00:00 UTC)" executed successfully 2026-09-24 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 17:00:00 UTC)" (scheduled at 2026-09-24 16:00:00+00:00) 2026-09-24 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-24 16:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 16:00:02,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 16:00:02,230 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 16:00:02,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 16:00:02,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 16:00:02,304 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 16:00:02,382 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 16:00:02,383 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 17:00:00 UTC)" executed successfully 2026-09-24 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 18:00:00 UTC)" (scheduled at 2026-09-24 17:00:00+00:00) 2026-09-24 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-24 17:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 17:00:01,666 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 17:00:01,668 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 17:00:01,673 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 17:00:01,673 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 17:00:01,767 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 17:00:01,850 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 17:00:01,851 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 18:00:00 UTC)" executed successfully 2026-09-24 18:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 19:00:00 UTC)" (scheduled at 2026-09-24 18:00:00+00:00) 2026-09-24 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-24 18:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 18:00:01,352 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 18:00:01,354 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 18:00:01,358 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 18:00:01,358 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 18:00:01,428 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 18:00:01,494 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 18:00:01,495 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 19:00:00 UTC)" executed successfully 2026-09-24 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 20:00:00 UTC)" (scheduled at 2026-09-24 19:00:00+00:00) 2026-09-24 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-24 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 19:00:02,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 19:00:02,089 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 19:00:02,094 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 19:00:02,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 19:00:02,191 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 19:00:02,294 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 19:00:02,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 20:00:00 UTC)" executed successfully 2026-09-24 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 21:00:00 UTC)" (scheduled at 2026-09-24 20:00:00+00:00) 2026-09-24 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-24 20:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 20:00:01,672 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 20:00:01,675 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 20:00:01,678 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 20:00:01,679 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 20:00:01,756 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 20:00:01,850 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 20:00:01,850 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 21:00:00 UTC)" executed successfully 2026-09-24 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 22:00:00 UTC)" (scheduled at 2026-09-24 21:00:00+00:00) 2026-09-24 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-24 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 21:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 21:00:01,422 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 21:00:01,425 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 21:00:01,426 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 21:00:01,493 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 21:00:01,582 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 21:00:01,582 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 22:00:00 UTC)" executed successfully 2026-09-24 22:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 23:00:00 UTC)" (scheduled at 2026-09-24 22:00:00+00:00) 2026-09-24 22:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-24 22:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 22:00:01,141 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 22:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 22:00:01,145 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 22:00:01,146 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 22:00:01,214 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 22:00:01,285 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 22:00:01,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-24 23:00:00 UTC)" executed successfully 2026-09-24 23:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 00:00:00 UTC)" (scheduled at 2026-09-24 23:00:00+00:00) 2026-09-24 23:00:00,004 INFO [fb-sync] Starting FB sync... 2026-09-24 23:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-24 23:00:01,046 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-24 23:00:01,048 INFO [fb-sync.worker] Scraped 50 posts 2026-09-24 23:00:01,051 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-24 23:00:01,051 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-24 23:00:01,105 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-24 23:00:01,181 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-24 23:00:01,182 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 00:00:00 UTC)" executed successfully 2026-09-25 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 01:00:00 UTC)" (scheduled at 2026-09-25 00:00:00+00:00) 2026-09-25 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-25 00:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 00:00:01,046 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 00:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 00:00:01,054 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 00:00:01,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 00:00:01,148 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 00:00:01,237 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 00:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 01:00:00 UTC)" executed successfully 2026-09-25 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 02:00:00 UTC)" (scheduled at 2026-09-25 01:00:00+00:00) 2026-09-25 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-25 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 01:00:01,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 01:00:01,089 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 01:00:01,093 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 01:00:01,093 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 01:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 01:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 01:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 02:00:00 UTC)" executed successfully 2026-09-25 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 03:00:00 UTC)" (scheduled at 2026-09-25 02:00:00+00:00) 2026-09-25 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-25 02:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 02:00:01,270 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 02:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 02:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 02:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 02:00:01,327 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 02:00:01,377 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 02:00:01,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 03:00:00 UTC)" executed successfully 2026-09-25 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 04:00:00 UTC)" (scheduled at 2026-09-25 03:00:00+00:00) 2026-09-25 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-25 03:00:00,120 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 03:00:01,258 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 03:00:01,260 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 03:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 03:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 03:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 03:00:01,615 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 03:00:01,615 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 04:00:00 UTC)" executed successfully 2026-09-25 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 05:00:00 UTC)" (scheduled at 2026-09-25 04:00:00+00:00) 2026-09-25 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-25 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 04:00:01,488 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 04:00:01,490 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 04:00:01,494 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 04:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 04:00:01,578 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 04:00:01,666 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 04:00:01,667 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 05:00:00 UTC)" executed successfully 2026-09-25 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 06:00:00 UTC)" (scheduled at 2026-09-25 05:00:00+00:00) 2026-09-25 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-25 05:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 05:00:01,064 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 05:00:01,066 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 05:00:01,069 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 05:00:01,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 05:00:01,136 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 05:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 05:00:01,211 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 06:00:00 UTC)" executed successfully 2026-09-25 06:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 07:00:00 UTC)" (scheduled at 2026-09-25 06:00:00+00:00) 2026-09-25 06:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-25 06:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 06:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 06:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 06:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 06:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 06:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 06:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 06:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 07:00:00 UTC)" executed successfully 2026-09-25 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 08:00:00 UTC)" (scheduled at 2026-09-25 07:00:00+00:00) 2026-09-25 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-25 07:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 07:00:01,175 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 07:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 07:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 07:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 07:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 07:00:01,357 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 07:00:01,357 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 08:00:00 UTC)" executed successfully 2026-09-25 08:00:00,017 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 09:00:00 UTC)" (scheduled at 2026-09-25 08:00:00+00:00) 2026-09-25 08:00:00,019 INFO [fb-sync] Starting FB sync... 2026-09-25 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 08:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 08:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 08:00:01,229 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 08:00:01,229 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 08:00:01,301 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 08:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 08:00:01,373 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 09:00:00 UTC)" executed successfully 2026-09-25 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 10:00:00 UTC)" (scheduled at 2026-09-25 09:00:00+00:00) 2026-09-25 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-25 09:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 09:00:01,225 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 09:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 09:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 09:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 09:00:01,296 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 09:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 09:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 10:00:00 UTC)" executed successfully 2026-09-25 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 11:00:00 UTC)" (scheduled at 2026-09-25 10:00:00+00:00) 2026-09-25 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-25 10:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 10:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 10:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 10:00:01,024 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 10:00:01,024 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 10:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 10:00:01,198 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 10:00:01,199 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 11:00:00 UTC)" executed successfully 2026-09-25 11:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 12:00:00 UTC)" (scheduled at 2026-09-25 11:00:00+00:00) 2026-09-25 11:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-25 11:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 11:00:01,351 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 11:00:01,353 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 11:00:01,357 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 11:00:01,357 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 11:00:01,415 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 11:00:01,490 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 11:00:01,491 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 12:00:00 UTC)" executed successfully 2026-09-25 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 13:00:00 UTC)" (scheduled at 2026-09-25 12:00:00+00:00) 2026-09-25 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-25 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 12:00:02,650 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 12:00:02,652 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 12:00:02,656 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 12:00:02,656 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 12:00:02,736 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 12:00:02,816 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 12:00:02,816 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 13:00:00 UTC)" executed successfully 2026-09-25 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 14:00:00 UTC)" (scheduled at 2026-09-25 13:00:00+00:00) 2026-09-25 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-25 13:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 13:00:01,705 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 13:00:01,706 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 13:00:01,710 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 13:00:01,710 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 13:00:01,779 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 13:00:01,862 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 13:00:01,862 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 14:00:00 UTC)" executed successfully 2026-09-25 14:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 15:00:00 UTC)" (scheduled at 2026-09-25 14:00:00+00:00) 2026-09-25 14:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-25 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 14:00:02,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 14:00:02,169 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 14:00:02,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 14:00:02,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 14:00:02,256 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 14:00:02,332 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 14:00:02,332 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 15:00:00 UTC)" executed successfully 2026-09-25 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 16:00:00 UTC)" (scheduled at 2026-09-25 15:00:00+00:00) 2026-09-25 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-25 15:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 15:00:01,334 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 15:00:01,335 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 15:00:01,339 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 15:00:01,340 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 15:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 15:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 15:00:01,512 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 16:00:00 UTC)" executed successfully 2026-09-25 16:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 17:00:00 UTC)" (scheduled at 2026-09-25 16:00:00+00:00) 2026-09-25 16:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-25 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 16:00:02,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 16:00:02,301 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 16:00:02,304 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 16:00:02,305 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 16:00:02,375 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 16:00:02,451 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 16:00:02,452 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 17:00:00 UTC)" executed successfully 2026-09-25 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 18:00:00 UTC)" (scheduled at 2026-09-25 17:00:00+00:00) 2026-09-25 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-25 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 17:00:01,670 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 17:00:01,671 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 17:00:01,674 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 17:00:01,675 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 17:00:01,741 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 17:00:01,854 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 17:00:01,855 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 18:00:00 UTC)" executed successfully 2026-09-25 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 19:00:00 UTC)" (scheduled at 2026-09-25 18:00:00+00:00) 2026-09-25 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-25 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 18:00:01,287 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 18:00:01,289 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 18:00:01,292 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 18:00:01,292 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 18:00:01,372 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 18:00:01,466 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 18:00:01,466 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 19:00:00 UTC)" executed successfully 2026-09-25 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 20:00:00 UTC)" (scheduled at 2026-09-25 19:00:00+00:00) 2026-09-25 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-25 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 19:00:01,227 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 19:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 19:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 19:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 19:00:01,278 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 19:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 19:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 20:00:00 UTC)" executed successfully 2026-09-25 20:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 21:00:00 UTC)" (scheduled at 2026-09-25 20:00:00+00:00) 2026-09-25 20:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-25 20:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 20:00:01,103 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 20:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 20:00:01,109 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 20:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 20:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 20:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 20:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 21:00:00 UTC)" executed successfully 2026-09-25 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 22:00:00 UTC)" (scheduled at 2026-09-25 21:00:00+00:00) 2026-09-25 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-25 21:00:00,108 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 21:00:02,185 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 21:00:02,187 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 21:00:02,190 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 21:00:02,190 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 21:00:02,258 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 21:00:02,322 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 21:00:02,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 22:00:00 UTC)" executed successfully 2026-09-25 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 23:00:00 UTC)" (scheduled at 2026-09-25 22:00:00+00:00) 2026-09-25 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-25 22:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 22:00:05,080 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 22:00:05,082 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 22:00:05,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 22:00:05,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 22:00:05,145 INFO [fb-sync] Sync done: 0 new posts in 5s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 22:00:05,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 22:00:05,217 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-25 23:00:00 UTC)" executed successfully 2026-09-25 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 00:00:00 UTC)" (scheduled at 2026-09-25 23:00:00+00:00) 2026-09-25 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-25 23:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-25 23:00:01,489 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-25 23:00:01,491 INFO [fb-sync.worker] Scraped 50 posts 2026-09-25 23:00:01,493 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-25 23:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-25 23:00:01,543 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-25 23:00:01,601 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-25 23:00:01,601 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 00:00:00 UTC)" executed successfully 2026-09-26 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 01:00:00 UTC)" (scheduled at 2026-09-26 00:00:00+00:00) 2026-09-26 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-26 00:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 00:00:01,437 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 00:00:01,440 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 00:00:01,443 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 00:00:01,444 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 00:00:01,513 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 00:00:01,588 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 00:00:01,589 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 01:00:00 UTC)" executed successfully 2026-09-26 01:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 02:00:00 UTC)" (scheduled at 2026-09-26 01:00:00+00:00) 2026-09-26 01:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-26 01:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 01:00:01,289 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 01:00:01,291 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 01:00:01,295 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 01:00:01,295 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 01:00:01,345 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 01:00:01,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 01:00:01,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 02:00:00 UTC)" executed successfully 2026-09-26 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 03:00:00 UTC)" (scheduled at 2026-09-26 02:00:00+00:00) 2026-09-26 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-26 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 02:00:01,277 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 02:00:01,279 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 02:00:01,283 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 02:00:01,284 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 02:00:01,372 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 02:00:01,470 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 02:00:01,471 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 03:00:00 UTC)" executed successfully 2026-09-26 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 04:00:00 UTC)" (scheduled at 2026-09-26 03:00:00+00:00) 2026-09-26 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-26 03:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 03:00:01,324 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 03:00:01,325 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 03:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 03:00:01,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 03:00:01,392 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 03:00:01,468 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 03:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 04:00:00 UTC)" executed successfully 2026-09-26 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 05:00:00 UTC)" (scheduled at 2026-09-26 04:00:00+00:00) 2026-09-26 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-26 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 04:00:01,333 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 04:00:01,334 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 04:00:01,337 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 04:00:01,338 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 04:00:01,389 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 04:00:01,456 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 04:00:01,456 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 05:00:00 UTC)" executed successfully 2026-09-26 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 06:00:00 UTC)" (scheduled at 2026-09-26 05:00:00+00:00) 2026-09-26 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-26 05:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 05:00:03,053 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 05:00:03,055 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 05:00:03,058 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 05:00:03,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 05:00:03,125 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 05:00:03,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 05:00:03,184 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 06:00:00 UTC)" executed successfully 2026-09-26 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 07:00:00 UTC)" (scheduled at 2026-09-26 06:00:00+00:00) 2026-09-26 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-26 06:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 06:00:01,243 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 06:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 06:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 06:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 06:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 06:00:01,393 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 06:00:01,393 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 07:00:00 UTC)" executed successfully 2026-09-26 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 08:00:00 UTC)" (scheduled at 2026-09-26 07:00:00+00:00) 2026-09-26 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-26 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 07:00:01,462 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 07:00:01,466 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 07:00:01,469 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 07:00:01,470 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 07:00:01,565 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 07:00:01,663 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 07:00:01,664 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 08:00:00 UTC)" executed successfully 2026-09-26 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 09:00:00 UTC)" (scheduled at 2026-09-26 08:00:00+00:00) 2026-09-26 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-26 08:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 08:00:02,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 08:00:02,050 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 08:00:02,053 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 08:00:02,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 08:00:02,154 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 08:00:02,236 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 08:00:02,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 09:00:00 UTC)" executed successfully 2026-09-26 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 10:00:00 UTC)" (scheduled at 2026-09-26 09:00:00+00:00) 2026-09-26 09:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-26 09:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 09:00:02,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 09:00:02,053 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 09:00:02,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 09:00:02,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 09:00:02,122 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 09:00:02,202 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 09:00:02,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 10:00:00 UTC)" executed successfully 2026-09-26 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 11:00:00 UTC)" (scheduled at 2026-09-26 10:00:00+00:00) 2026-09-26 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-26 10:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 10:00:01,551 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 10:00:01,553 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 10:00:01,557 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 10:00:01,557 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 10:00:01,636 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 10:00:01,722 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 10:00:01,722 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 11:00:00 UTC)" executed successfully 2026-09-26 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 12:00:00 UTC)" (scheduled at 2026-09-26 11:00:00+00:00) 2026-09-26 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-26 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 11:00:01,717 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 11:00:01,719 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 11:00:01,721 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 11:00:01,722 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 11:00:01,793 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 11:00:01,877 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 11:00:01,878 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 12:00:00 UTC)" executed successfully 2026-09-26 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 13:00:00 UTC)" (scheduled at 2026-09-26 12:00:00+00:00) 2026-09-26 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-26 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 12:00:03,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 12:00:03,136 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 12:00:03,139 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 12:00:03,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 12:00:03,187 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 12:00:03,253 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 12:00:03,254 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 13:00:00 UTC)" executed successfully 2026-09-26 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 14:00:00 UTC)" (scheduled at 2026-09-26 13:00:00+00:00) 2026-09-26 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-26 13:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 13:00:01,881 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 13:00:01,883 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 13:00:01,886 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 13:00:01,887 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 13:00:01,952 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 13:00:02,027 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 13:00:02,027 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 14:00:00 UTC)" executed successfully 2026-09-26 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 15:00:00 UTC)" (scheduled at 2026-09-26 14:00:00+00:00) 2026-09-26 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-26 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 14:00:02,261 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 14:00:02,263 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 14:00:02,267 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 14:00:02,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 14:00:02,349 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 14:00:02,422 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 14:00:02,422 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 15:00:00 UTC)" executed successfully 2026-09-26 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 16:00:00 UTC)" (scheduled at 2026-09-26 15:00:00+00:00) 2026-09-26 15:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-26 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 15:00:01,320 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 15:00:01,322 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 15:00:01,327 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 15:00:01,327 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 15:00:01,423 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 15:00:01,520 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 15:00:01,520 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 16:00:00 UTC)" executed successfully 2026-09-26 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 17:00:00 UTC)" (scheduled at 2026-09-26 16:00:00+00:00) 2026-09-26 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-26 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 16:00:01,621 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 16:00:01,623 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 16:00:01,627 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 16:00:01,627 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 16:00:01,695 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 16:00:01,771 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 16:00:01,771 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 17:00:00 UTC)" executed successfully 2026-09-26 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 18:00:00 UTC)" (scheduled at 2026-09-26 17:00:00+00:00) 2026-09-26 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-26 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 17:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 17:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 17:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 17:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 17:00:01,255 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 17:00:01,325 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 17:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 18:00:00 UTC)" executed successfully 2026-09-26 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 19:00:00 UTC)" (scheduled at 2026-09-26 18:00:00+00:00) 2026-09-26 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-26 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 18:00:01,438 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 18:00:01,441 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 18:00:01,445 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 18:00:01,445 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 18:00:01,517 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 18:00:01,610 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 18:00:01,611 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 19:00:00 UTC)" executed successfully 2026-09-26 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 20:00:00 UTC)" (scheduled at 2026-09-26 19:00:00+00:00) 2026-09-26 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-26 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 19:00:01,188 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 19:00:01,189 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 19:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 19:00:01,194 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 19:00:01,280 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 19:00:01,377 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 19:00:01,378 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 20:00:00 UTC)" executed successfully 2026-09-26 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 21:00:00 UTC)" (scheduled at 2026-09-26 20:00:00+00:00) 2026-09-26 20:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-26 20:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 20:00:01,080 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 20:00:01,082 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 20:00:01,085 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 20:00:01,085 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 20:00:01,192 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 20:00:01,278 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 20:00:01,278 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 21:00:00 UTC)" executed successfully 2026-09-26 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 22:00:00 UTC)" (scheduled at 2026-09-26 21:00:00+00:00) 2026-09-26 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-26 21:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 21:00:01,323 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 21:00:01,326 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 21:00:01,330 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 21:00:01,330 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 21:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 21:00:01,475 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 21:00:01,476 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 22:00:00 UTC)" executed successfully 2026-09-26 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 23:00:00 UTC)" (scheduled at 2026-09-26 22:00:00+00:00) 2026-09-26 22:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-26 22:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 22:00:01,014 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 22:00:01,016 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 22:00:01,019 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 22:00:01,020 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 22:00:01,086 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 22:00:01,156 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 22:00:01,156 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-26 23:00:00 UTC)" executed successfully 2026-09-26 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 00:00:00 UTC)" (scheduled at 2026-09-26 23:00:00+00:00) 2026-09-26 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-26 23:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-26 23:00:02,143 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-26 23:00:02,145 INFO [fb-sync.worker] Scraped 50 posts 2026-09-26 23:00:02,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-26 23:00:02,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-26 23:00:02,210 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-26 23:00:02,317 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-26 23:00:02,318 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 00:00:00 UTC)" executed successfully 2026-09-27 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 01:00:00 UTC)" (scheduled at 2026-09-27 00:00:00+00:00) 2026-09-27 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-27 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 00:00:01,103 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 00:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 00:00:01,109 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 00:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 00:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 00:00:01,309 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 00:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 01:00:00 UTC)" executed successfully 2026-09-27 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 02:00:00 UTC)" (scheduled at 2026-09-27 01:00:00+00:00) 2026-09-27 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-27 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 01:00:00,980 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 01:00:00,982 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 01:00:00,992 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 01:00:00,993 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 01:00:01,065 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 01:00:01,121 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 01:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 02:00:00 UTC)" executed successfully 2026-09-27 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 03:00:00 UTC)" (scheduled at 2026-09-27 02:00:00+00:00) 2026-09-27 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-27 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 02:00:01,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 02:00:01,053 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 02:00:01,056 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 02:00:01,057 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 02:00:01,128 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 02:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 02:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 03:00:00 UTC)" executed successfully 2026-09-27 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 04:00:00 UTC)" (scheduled at 2026-09-27 03:00:00+00:00) 2026-09-27 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-27 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 03:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 03:00:01,040 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 03:00:01,043 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 03:00:01,044 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 03:00:01,119 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 03:00:01,197 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 03:00:01,197 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 04:00:00 UTC)" executed successfully 2026-09-27 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 05:00:00 UTC)" (scheduled at 2026-09-27 04:00:00+00:00) 2026-09-27 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-27 04:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 04:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 04:00:01,246 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 04:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 04:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 04:00:01,301 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 04:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 04:00:01,389 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 05:00:00 UTC)" executed successfully 2026-09-27 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 06:00:00 UTC)" (scheduled at 2026-09-27 05:00:00+00:00) 2026-09-27 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 05:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 05:00:01,473 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 05:00:01,474 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 05:00:01,478 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 05:00:01,478 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 05:00:01,558 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 05:00:01,643 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 05:00:01,644 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 06:00:00 UTC)" executed successfully 2026-09-27 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 07:00:00 UTC)" (scheduled at 2026-09-27 06:00:00+00:00) 2026-09-27 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 06:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 06:00:01,480 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 06:00:01,483 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 06:00:01,486 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 06:00:01,487 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 06:00:01,584 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 06:00:01,676 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 06:00:01,677 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 07:00:00 UTC)" executed successfully 2026-09-27 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 08:00:00 UTC)" (scheduled at 2026-09-27 07:00:00+00:00) 2026-09-27 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-27 07:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 07:00:01,257 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 07:00:01,260 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 07:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 07:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 07:00:01,333 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 07:00:01,413 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 07:00:01,413 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 08:00:00 UTC)" executed successfully 2026-09-27 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 09:00:00 UTC)" (scheduled at 2026-09-27 08:00:00+00:00) 2026-09-27 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 08:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 08:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 08:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 08:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 08:00:01,168 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 08:00:01,242 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 08:00:01,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 09:00:00 UTC)" executed successfully 2026-09-27 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 10:00:00 UTC)" (scheduled at 2026-09-27 09:00:00+00:00) 2026-09-27 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 09:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 09:00:02,451 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 09:00:02,453 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 09:00:02,456 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 09:00:02,457 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 09:00:02,520 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 09:00:02,599 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 09:00:02,599 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 10:00:00 UTC)" executed successfully 2026-09-27 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 11:00:00 UTC)" (scheduled at 2026-09-27 10:00:00+00:00) 2026-09-27 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 10:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 10:00:01,472 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 10:00:01,473 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 10:00:01,477 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 10:00:01,477 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 10:00:01,561 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 10:00:01,642 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 10:00:01,643 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 11:00:00 UTC)" executed successfully 2026-09-27 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 12:00:00 UTC)" (scheduled at 2026-09-27 11:00:00+00:00) 2026-09-27 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-27 11:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 11:00:01,883 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 11:00:01,884 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 11:00:01,887 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 11:00:01,887 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 11:00:01,950 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 11:00:02,038 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 11:00:02,039 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 12:00:00 UTC)" executed successfully 2026-09-27 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 13:00:00 UTC)" (scheduled at 2026-09-27 12:00:00+00:00) 2026-09-27 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-27 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 12:00:01,781 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 12:00:01,784 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 12:00:01,787 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 12:00:01,787 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 12:00:01,865 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 12:00:01,950 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 12:00:01,950 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 13:00:00 UTC)" executed successfully 2026-09-27 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 14:00:00 UTC)" (scheduled at 2026-09-27 13:00:00+00:00) 2026-09-27 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-27 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 13:00:01,408 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 13:00:01,409 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 13:00:01,412 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 13:00:01,413 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 13:00:01,473 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 13:00:01,562 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 13:00:01,562 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 14:00:00 UTC)" executed successfully 2026-09-27 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 15:00:00 UTC)" (scheduled at 2026-09-27 14:00:00+00:00) 2026-09-27 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-27 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 14:00:01,784 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 14:00:01,786 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 14:00:01,789 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 14:00:01,789 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 14:00:01,850 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 14:00:01,918 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 14:00:01,919 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 15:00:00 UTC)" executed successfully 2026-09-27 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 16:00:00 UTC)" (scheduled at 2026-09-27 15:00:00+00:00) 2026-09-27 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-27 15:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 15:00:01,074 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 15:00:01,076 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 15:00:01,080 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 15:00:01,080 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 15:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 15:00:01,208 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 15:00:01,209 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 16:00:00 UTC)" executed successfully 2026-09-27 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 17:00:00 UTC)" (scheduled at 2026-09-27 16:00:00+00:00) 2026-09-27 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-27 16:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 16:00:01,735 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 16:00:01,738 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 16:00:01,743 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 16:00:01,744 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 16:00:01,818 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 16:00:01,905 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 16:00:01,905 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 17:00:00 UTC)" executed successfully 2026-09-27 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 18:00:00 UTC)" (scheduled at 2026-09-27 17:00:00+00:00) 2026-09-27 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-27 17:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 17:00:01,434 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 17:00:01,436 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 17:00:01,440 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 17:00:01,440 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 17:00:01,508 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 17:00:01,584 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 17:00:01,584 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 18:00:00 UTC)" executed successfully 2026-09-27 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 19:00:00 UTC)" (scheduled at 2026-09-27 18:00:00+00:00) 2026-09-27 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-27 18:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 18:00:02,230 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 18:00:02,232 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 18:00:02,236 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 18:00:02,236 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 18:00:02,315 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 18:00:02,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 18:00:02,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 19:00:00 UTC)" executed successfully 2026-09-27 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 20:00:00 UTC)" (scheduled at 2026-09-27 19:00:00+00:00) 2026-09-27 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-27 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 19:00:01,169 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 19:00:01,171 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 19:00:01,174 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 19:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 19:00:01,237 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 19:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 19:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 20:00:00 UTC)" executed successfully 2026-09-27 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 21:00:00 UTC)" (scheduled at 2026-09-27 20:00:00+00:00) 2026-09-27 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-27 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 20:00:01,037 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 20:00:01,039 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 20:00:01,042 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 20:00:01,042 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 20:00:01,091 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 20:00:01,140 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 20:00:01,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 21:00:00 UTC)" executed successfully 2026-09-27 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 22:00:00 UTC)" (scheduled at 2026-09-27 21:00:00+00:00) 2026-09-27 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-27 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 21:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 21:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 21:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 21:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 21:00:01,272 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 21:00:01,331 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 21:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 22:00:00 UTC)" executed successfully 2026-09-27 22:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 23:00:00 UTC)" (scheduled at 2026-09-27 22:00:00+00:00) 2026-09-27 22:00:00,017 INFO [fb-sync] Starting FB sync... 2026-09-27 22:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 22:00:01,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 22:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 22:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 22:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 22:00:01,243 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 22:00:01,324 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 22:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-27 23:00:00 UTC)" executed successfully 2026-09-27 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 00:00:00 UTC)" (scheduled at 2026-09-27 23:00:00+00:00) 2026-09-27 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-27 23:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-27 23:00:01,507 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-27 23:00:01,508 INFO [fb-sync.worker] Scraped 50 posts 2026-09-27 23:00:01,511 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-27 23:00:01,512 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-27 23:00:01,580 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-27 23:00:01,681 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-27 23:00:01,682 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 00:00:00 UTC)" executed successfully 2026-09-28 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 01:00:00 UTC)" (scheduled at 2026-09-28 00:00:00+00:00) 2026-09-28 00:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-28 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 00:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 00:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 00:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 00:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 00:00:01,251 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 00:00:01,327 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 00:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 01:00:00 UTC)" executed successfully 2026-09-28 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 02:00:00 UTC)" (scheduled at 2026-09-28 01:00:00+00:00) 2026-09-28 01:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-28 01:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 01:00:01,274 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 01:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 01:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 01:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 01:00:01,336 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 01:00:01,413 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 01:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 02:00:00 UTC)" executed successfully 2026-09-28 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 03:00:00 UTC)" (scheduled at 2026-09-28 02:00:00+00:00) 2026-09-28 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-28 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 02:00:01,598 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 02:00:01,600 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 02:00:01,611 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 02:00:01,612 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 02:00:01,684 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 02:00:01,775 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 02:00:01,775 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 03:00:00 UTC)" executed successfully 2026-09-28 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 04:00:00 UTC)" (scheduled at 2026-09-28 03:00:00+00:00) 2026-09-28 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-28 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 03:00:01,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 03:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 03:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 03:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 03:00:01,220 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 03:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 03:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 04:00:00 UTC)" executed successfully 2026-09-28 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 05:00:00 UTC)" (scheduled at 2026-09-28 04:00:00+00:00) 2026-09-28 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-28 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 04:00:03,736 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 04:00:03,738 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 04:00:03,741 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 04:00:03,741 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 04:00:03,802 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 04:00:03,873 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 04:00:03,873 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 05:00:00 UTC)" executed successfully 2026-09-28 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 06:00:00 UTC)" (scheduled at 2026-09-28 05:00:00+00:00) 2026-09-28 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-28 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 05:00:02,610 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 05:00:02,612 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 05:00:02,615 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 05:00:02,616 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 05:00:02,673 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 05:00:02,744 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 05:00:02,745 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 06:00:00 UTC)" executed successfully 2026-09-28 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 07:00:00 UTC)" (scheduled at 2026-09-28 06:00:00+00:00) 2026-09-28 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-28 06:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 06:00:01,286 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 06:00:01,288 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 06:00:01,291 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 06:00:01,292 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 06:00:01,358 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 06:00:01,431 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 06:00:01,432 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 07:00:00 UTC)" executed successfully 2026-09-28 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 08:00:00 UTC)" (scheduled at 2026-09-28 07:00:00+00:00) 2026-09-28 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-28 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 07:00:01,316 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 07:00:01,318 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 07:00:01,321 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 07:00:01,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 07:00:01,389 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 07:00:01,460 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 07:00:01,460 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 08:00:00 UTC)" executed successfully 2026-09-28 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 09:00:00 UTC)" (scheduled at 2026-09-28 08:00:00+00:00) 2026-09-28 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-28 08:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 08:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 08:00:01,167 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 08:00:01,172 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 08:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 08:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 08:00:01,314 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 08:00:01,315 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 09:00:00 UTC)" executed successfully 2026-09-28 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 10:00:00 UTC)" (scheduled at 2026-09-28 09:00:00+00:00) 2026-09-28 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-28 09:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 09:00:00,993 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 09:00:00,995 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 09:00:00,998 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 09:00:00,998 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 09:00:01,057 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 09:00:01,128 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 09:00:01,129 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 10:00:00 UTC)" executed successfully 2026-09-28 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 11:00:00 UTC)" (scheduled at 2026-09-28 10:00:00+00:00) 2026-09-28 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-28 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 10:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 10:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 10:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 10:00:01,228 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 10:00:01,288 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 10:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 10:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 11:00:00 UTC)" executed successfully 2026-09-28 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 12:00:00 UTC)" (scheduled at 2026-09-28 11:00:00+00:00) 2026-09-28 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-28 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 11:00:01,463 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 11:00:01,465 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 11:00:01,469 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 11:00:01,469 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 11:00:01,535 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 11:00:01,621 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 11:00:01,621 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 12:00:00 UTC)" executed successfully 2026-09-28 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 13:00:00 UTC)" (scheduled at 2026-09-28 12:00:00+00:00) 2026-09-28 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-28 12:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 12:00:01,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 12:00:01,347 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 12:00:01,350 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 12:00:01,350 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 12:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 12:00:01,560 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 12:00:01,561 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 13:00:00 UTC)" executed successfully 2026-09-28 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 14:00:00 UTC)" (scheduled at 2026-09-28 13:00:00+00:00) 2026-09-28 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-28 13:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 13:00:01,236 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 13:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 13:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 13:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 13:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 13:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 13:00:01,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 14:00:00 UTC)" executed successfully 2026-09-28 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 15:00:00 UTC)" (scheduled at 2026-09-28 14:00:00+00:00) 2026-09-28 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-28 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 14:00:01,507 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 14:00:01,508 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 14:00:01,510 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 14:00:01,510 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 14:00:01,575 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 14:00:01,663 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 14:00:01,664 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 15:00:00 UTC)" executed successfully 2026-09-28 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 16:00:00 UTC)" (scheduled at 2026-09-28 15:00:00+00:00) 2026-09-28 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-28 15:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 15:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 15:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 15:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 15:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 15:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 15:00:01,470 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 15:00:01,470 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 16:00:00 UTC)" executed successfully 2026-09-28 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 17:00:00 UTC)" (scheduled at 2026-09-28 16:00:00+00:00) 2026-09-28 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-28 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 16:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 16:00:01,421 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 16:00:01,425 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 16:00:01,425 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 16:00:01,489 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 16:00:01,557 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 16:00:01,557 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 17:00:00 UTC)" executed successfully 2026-09-28 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 18:00:00 UTC)" (scheduled at 2026-09-28 17:00:00+00:00) 2026-09-28 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-28 17:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 17:00:01,342 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 17:00:01,343 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 17:00:01,345 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 17:00:01,346 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 17:00:01,429 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 17:00:01,507 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 17:00:01,507 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 18:00:00 UTC)" executed successfully 2026-09-28 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 19:00:00 UTC)" (scheduled at 2026-09-28 18:00:00+00:00) 2026-09-28 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-28 18:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 18:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 18:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 18:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 18:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 18:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 18:00:01,312 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 18:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 19:00:00 UTC)" executed successfully 2026-09-28 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 20:00:00 UTC)" (scheduled at 2026-09-28 19:00:00+00:00) 2026-09-28 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-28 19:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 19:00:02,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 19:00:02,206 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 19:00:02,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 19:00:02,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 19:00:02,290 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 19:00:02,387 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 19:00:02,388 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 20:00:00 UTC)" executed successfully 2026-09-28 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 21:00:00 UTC)" (scheduled at 2026-09-28 20:00:00+00:00) 2026-09-28 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-28 20:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 20:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 20:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 20:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 20:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 20:00:01,230 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 20:00:01,303 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 20:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 21:00:00 UTC)" executed successfully 2026-09-28 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 22:00:00 UTC)" (scheduled at 2026-09-28 21:00:00+00:00) 2026-09-28 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-28 21:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 21:00:01,814 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 21:00:01,816 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 21:00:01,821 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 21:00:01,822 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 21:00:01,913 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 21:00:02,007 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 21:00:02,007 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 22:00:00 UTC)" executed successfully 2026-09-28 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 23:00:00 UTC)" (scheduled at 2026-09-28 22:00:00+00:00) 2026-09-28 22:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-28 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 22:00:01,199 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 22:00:01,202 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 22:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 22:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 22:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 22:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 22:00:01,356 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-28 23:00:00 UTC)" executed successfully 2026-09-28 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 00:00:00 UTC)" (scheduled at 2026-09-28 23:00:00+00:00) 2026-09-28 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-28 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-28 23:00:01,643 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-28 23:00:01,645 INFO [fb-sync.worker] Scraped 50 posts 2026-09-28 23:00:01,649 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-28 23:00:01,650 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-28 23:00:01,749 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-28 23:00:01,843 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-28 23:00:01,843 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 00:00:00 UTC)" executed successfully 2026-09-29 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 01:00:00 UTC)" (scheduled at 2026-09-29 00:00:00+00:00) 2026-09-29 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-29 00:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 00:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 00:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 00:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 00:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 00:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 00:00:01,419 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 00:00:01,419 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 01:00:00 UTC)" executed successfully 2026-09-29 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 02:00:00 UTC)" (scheduled at 2026-09-29 01:00:00+00:00) 2026-09-29 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-29 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 01:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 01:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 01:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 01:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 01:00:01,201 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 01:00:01,271 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 01:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 02:00:00 UTC)" executed successfully 2026-09-29 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 03:00:00 UTC)" (scheduled at 2026-09-29 02:00:00+00:00) 2026-09-29 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-29 02:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 02:00:01,601 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 02:00:01,603 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 02:00:01,607 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 02:00:01,607 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 02:00:01,670 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 02:00:01,758 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 02:00:01,758 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 03:00:00 UTC)" executed successfully 2026-09-29 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 04:00:00 UTC)" (scheduled at 2026-09-29 03:00:00+00:00) 2026-09-29 03:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-29 03:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 03:00:01,223 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 03:00:01,225 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 03:00:01,229 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 03:00:01,229 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 03:00:01,305 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 03:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 03:00:01,388 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 04:00:00 UTC)" executed successfully 2026-09-29 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 05:00:00 UTC)" (scheduled at 2026-09-29 04:00:00+00:00) 2026-09-29 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-29 04:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 04:00:01,289 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 04:00:01,292 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 04:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 04:00:01,297 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 04:00:01,383 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 04:00:01,487 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 04:00:01,488 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 05:00:00 UTC)" executed successfully 2026-09-29 05:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 06:00:00 UTC)" (scheduled at 2026-09-29 05:00:00+00:00) 2026-09-29 05:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-29 05:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 05:00:01,374 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 05:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 05:00:01,379 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 05:00:01,379 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 05:00:01,442 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 05:00:01,515 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 05:00:01,515 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 06:00:00 UTC)" executed successfully 2026-09-29 06:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 07:00:00 UTC)" (scheduled at 2026-09-29 06:00:00+00:00) 2026-09-29 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-29 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 06:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 06:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 06:00:01,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 06:00:01,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 06:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 06:00:01,291 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 06:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 07:00:00 UTC)" executed successfully 2026-09-29 07:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 08:00:00 UTC)" (scheduled at 2026-09-29 07:00:00+00:00) 2026-09-29 07:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-29 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 07:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 07:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 07:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 07:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 07:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 07:00:01,328 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 07:00:01,328 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 08:00:00 UTC)" executed successfully 2026-09-29 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 09:00:00 UTC)" (scheduled at 2026-09-29 08:00:00+00:00) 2026-09-29 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-29 08:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 08:00:01,370 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 08:00:01,372 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 08:00:01,376 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 08:00:01,376 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 08:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 08:00:01,538 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 08:00:01,539 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 09:00:00 UTC)" executed successfully 2026-09-29 09:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 10:00:00 UTC)" (scheduled at 2026-09-29 09:00:00+00:00) 2026-09-29 09:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-29 09:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 09:00:01,849 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 09:00:01,852 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 09:00:01,856 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 09:00:01,857 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 09:00:01,984 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 09:00:02,077 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 09:00:02,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 10:00:00 UTC)" executed successfully 2026-09-29 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 11:00:00 UTC)" (scheduled at 2026-09-29 10:00:00+00:00) 2026-09-29 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-29 10:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 10:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 10:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 10:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 10:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 10:00:01,319 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 10:00:01,386 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 10:00:01,386 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 11:00:00 UTC)" executed successfully 2026-09-29 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 12:00:00 UTC)" (scheduled at 2026-09-29 11:00:00+00:00) 2026-09-29 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-29 11:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 11:00:01,325 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 11:00:01,327 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 11:00:01,332 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 11:00:01,332 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 11:00:01,416 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 11:00:01,504 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 11:00:01,504 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 12:00:00 UTC)" executed successfully 2026-09-29 12:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 13:00:00 UTC)" (scheduled at 2026-09-29 12:00:00+00:00) 2026-09-29 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-29 12:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 12:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 12:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 12:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 12:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 12:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 12:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 12:00:01,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 13:00:00 UTC)" executed successfully 2026-09-29 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 14:00:00 UTC)" (scheduled at 2026-09-29 13:00:00+00:00) 2026-09-29 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-29 13:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 13:00:01,445 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 13:00:01,447 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 13:00:01,451 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 13:00:01,452 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 13:00:01,513 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 13:00:01,591 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 13:00:01,591 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 14:00:00 UTC)" executed successfully 2026-09-29 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 15:00:00 UTC)" (scheduled at 2026-09-29 14:00:00+00:00) 2026-09-29 14:00:00,007 INFO [fb-sync] Starting FB sync... 2026-09-29 14:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 14:00:01,386 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 14:00:01,388 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 14:00:01,392 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 14:00:01,392 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 14:00:01,469 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 14:00:01,554 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 14:00:01,554 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 15:00:00 UTC)" executed successfully 2026-09-29 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 16:00:00 UTC)" (scheduled at 2026-09-29 15:00:00+00:00) 2026-09-29 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-29 15:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 15:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 15:00:01,242 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 15:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 15:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 15:00:01,319 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 15:00:01,413 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 15:00:01,413 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 16:00:00 UTC)" executed successfully 2026-09-29 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 17:00:00 UTC)" (scheduled at 2026-09-29 16:00:00+00:00) 2026-09-29 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-29 16:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 16:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 16:00:01,297 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 16:00:01,301 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 16:00:01,302 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 16:00:01,388 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 16:00:01,487 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 16:00:01,487 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 17:00:00 UTC)" executed successfully 2026-09-29 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 18:00:00 UTC)" (scheduled at 2026-09-29 17:00:00+00:00) 2026-09-29 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-29 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 17:00:01,383 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 17:00:01,385 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 17:00:01,387 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 17:00:01,388 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 17:00:01,464 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 17:00:01,574 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 17:00:01,574 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 18:00:00 UTC)" executed successfully 2026-09-29 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 19:00:00 UTC)" (scheduled at 2026-09-29 18:00:00+00:00) 2026-09-29 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-29 18:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 18:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 18:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 18:00:01,153 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 18:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 18:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 18:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 18:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 19:00:00 UTC)" executed successfully 2026-09-29 19:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 20:00:00 UTC)" (scheduled at 2026-09-29 19:00:00+00:00) 2026-09-29 19:00:00,020 INFO [fb-sync] Starting FB sync... 2026-09-29 19:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 19:00:01,183 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 19:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 19:00:01,187 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 19:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 19:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 19:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 19:00:01,353 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 20:00:00 UTC)" executed successfully 2026-09-29 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 21:00:00 UTC)" (scheduled at 2026-09-29 20:00:00+00:00) 2026-09-29 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-29 20:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 20:00:01,616 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 20:00:01,618 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 20:00:01,623 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 20:00:01,623 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 20:00:01,691 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 20:00:01,772 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 20:00:01,772 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 21:00:00 UTC)" executed successfully 2026-09-29 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 22:00:00 UTC)" (scheduled at 2026-09-29 21:00:00+00:00) 2026-09-29 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-29 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 21:00:01,147 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 21:00:01,149 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 21:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 21:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 21:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 21:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 21:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 22:00:00 UTC)" executed successfully 2026-09-29 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 23:00:00 UTC)" (scheduled at 2026-09-29 22:00:00+00:00) 2026-09-29 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-29 22:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 22:00:01,290 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 22:00:01,292 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 22:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 22:00:01,296 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 22:00:01,369 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 22:00:01,452 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 22:00:01,452 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-29 23:00:00 UTC)" executed successfully 2026-09-29 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 00:00:00 UTC)" (scheduled at 2026-09-29 23:00:00+00:00) 2026-09-29 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-29 23:00:00,103 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-29 23:00:02,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-29 23:00:02,202 INFO [fb-sync.worker] Scraped 50 posts 2026-09-29 23:00:02,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-29 23:00:02,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-29 23:00:02,263 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-29 23:00:02,330 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-29 23:00:02,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 00:00:00 UTC)" executed successfully 2026-09-30 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 01:00:00 UTC)" (scheduled at 2026-09-30 00:00:00+00:00) 2026-09-30 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-30 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 00:00:01,507 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 00:00:01,510 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 00:00:01,513 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 00:00:01,514 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 00:00:01,580 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 00:00:01,645 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 00:00:01,646 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 01:00:00 UTC)" executed successfully 2026-09-30 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 02:00:00 UTC)" (scheduled at 2026-09-30 01:00:00+00:00) 2026-09-30 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-30 01:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 01:00:02,045 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 01:00:02,048 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 01:00:02,051 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 01:00:02,052 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 01:00:02,118 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 01:00:02,194 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 01:00:02,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 02:00:00 UTC)" executed successfully 2026-09-30 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 03:00:00 UTC)" (scheduled at 2026-09-30 02:00:00+00:00) 2026-09-30 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-30 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 02:00:01,332 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 02:00:01,333 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 02:00:01,336 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 02:00:01,336 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 02:00:01,384 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 02:00:01,439 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 02:00:01,439 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 03:00:00 UTC)" executed successfully 2026-09-30 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 04:00:00 UTC)" (scheduled at 2026-09-30 03:00:00+00:00) 2026-09-30 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-30 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 03:00:01,500 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 03:00:01,503 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 03:00:01,507 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 03:00:01,508 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 03:00:01,591 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 03:00:01,687 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 03:00:01,687 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 04:00:00 UTC)" executed successfully 2026-09-30 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 05:00:00 UTC)" (scheduled at 2026-09-30 04:00:00+00:00) 2026-09-30 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-09-30 04:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 04:00:01,457 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 04:00:01,459 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 04:00:01,463 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 04:00:01,463 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 04:00:01,536 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 04:00:01,618 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 04:00:01,619 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 05:00:00 UTC)" executed successfully 2026-09-30 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 06:00:00 UTC)" (scheduled at 2026-09-30 05:00:00+00:00) 2026-09-30 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-30 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 05:00:01,810 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 05:00:01,812 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 05:00:01,814 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 05:00:01,815 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 05:00:01,894 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 05:00:01,976 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 05:00:01,976 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 06:00:00 UTC)" executed successfully 2026-09-30 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 07:00:00 UTC)" (scheduled at 2026-09-30 06:00:00+00:00) 2026-09-30 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-30 06:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 06:00:01,220 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 06:00:01,222 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 06:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 06:00:01,224 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 06:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 06:00:01,384 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 06:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 07:00:00 UTC)" executed successfully 2026-09-30 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 08:00:00 UTC)" (scheduled at 2026-09-30 07:00:00+00:00) 2026-09-30 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-30 07:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 07:00:01,405 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 07:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 07:00:01,410 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 07:00:01,411 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 07:00:01,480 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 07:00:01,569 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 07:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 08:00:00 UTC)" executed successfully 2026-09-30 08:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 09:00:00 UTC)" (scheduled at 2026-09-30 08:00:00+00:00) 2026-09-30 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-09-30 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 08:00:01,512 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 08:00:01,513 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 08:00:01,517 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 08:00:01,517 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 08:00:01,583 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 08:00:01,654 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 08:00:01,654 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 09:00:00 UTC)" executed successfully 2026-09-30 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 10:00:00 UTC)" (scheduled at 2026-09-30 09:00:00+00:00) 2026-09-30 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-30 09:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 09:00:01,368 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 09:00:01,369 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 09:00:01,371 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 09:00:01,371 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 09:00:01,434 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 09:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 09:00:01,512 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 10:00:00 UTC)" executed successfully 2026-09-30 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 11:00:00 UTC)" (scheduled at 2026-09-30 10:00:00+00:00) 2026-09-30 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-30 10:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 10:00:01,377 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 10:00:01,379 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 10:00:01,381 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 10:00:01,382 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 10:00:01,439 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 10:00:01,494 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 10:00:01,494 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 11:00:00 UTC)" executed successfully 2026-09-30 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 12:00:00 UTC)" (scheduled at 2026-09-30 11:00:00+00:00) 2026-09-30 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-09-30 11:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 11:00:01,453 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 11:00:01,455 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 11:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 11:00:01,458 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 11:00:01,530 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 11:00:01,591 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 11:00:01,592 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 12:00:00 UTC)" executed successfully 2026-09-30 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 13:00:00 UTC)" (scheduled at 2026-09-30 12:00:00+00:00) 2026-09-30 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-09-30 12:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 12:00:01,558 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 12:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 12:00:01,564 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 12:00:01,565 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 12:00:01,640 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 12:00:01,733 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 12:00:01,733 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 13:00:00 UTC)" executed successfully 2026-09-30 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 14:00:00 UTC)" (scheduled at 2026-09-30 13:00:00+00:00) 2026-09-30 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-30 13:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 13:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 13:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 13:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 13:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 13:00:01,254 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 13:00:01,342 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 13:00:01,343 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 14:00:00 UTC)" executed successfully 2026-09-30 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 15:00:00 UTC)" (scheduled at 2026-09-30 14:00:00+00:00) 2026-09-30 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-09-30 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 14:00:01,390 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 14:00:01,393 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 14:00:01,398 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 14:00:01,399 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 14:00:01,476 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 14:00:01,543 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 14:00:01,544 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 15:00:00 UTC)" executed successfully 2026-09-30 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 16:00:00 UTC)" (scheduled at 2026-09-30 15:00:00+00:00) 2026-09-30 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-30 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 15:00:01,597 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 15:00:01,599 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 15:00:01,604 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 15:00:01,604 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 15:00:01,682 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 15:00:01,768 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 15:00:01,769 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 16:00:00 UTC)" executed successfully 2026-09-30 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 17:00:00 UTC)" (scheduled at 2026-09-30 16:00:00+00:00) 2026-09-30 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-09-30 16:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 16:00:01,346 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 16:00:01,348 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 16:00:01,351 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 16:00:01,352 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 16:00:01,414 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 16:00:01,491 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 16:00:01,491 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 17:00:00 UTC)" executed successfully 2026-09-30 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 18:00:00 UTC)" (scheduled at 2026-09-30 17:00:00+00:00) 2026-09-30 17:00:00,016 INFO [fb-sync] Starting FB sync... 2026-09-30 17:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 17:00:01,370 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 17:00:01,372 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 17:00:01,374 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 17:00:01,374 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 17:00:01,453 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 17:00:01,545 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 17:00:01,545 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 18:00:00 UTC)" executed successfully 2026-09-30 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 19:00:00 UTC)" (scheduled at 2026-09-30 18:00:00+00:00) 2026-09-30 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-09-30 18:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 18:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 18:00:01,125 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 18:00:01,128 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 18:00:01,129 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 18:00:01,182 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 18:00:01,255 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 18:00:01,255 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 19:00:00 UTC)" executed successfully 2026-09-30 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 20:00:00 UTC)" (scheduled at 2026-09-30 19:00:00+00:00) 2026-09-30 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-30 19:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 19:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 19:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 19:00:01,176 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 19:00:01,177 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 19:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 19:00:01,326 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 19:00:01,326 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 20:00:00 UTC)" executed successfully 2026-09-30 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 21:00:00 UTC)" (scheduled at 2026-09-30 20:00:00+00:00) 2026-09-30 20:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-30 20:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 20:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 20:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 20:00:01,156 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 20:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 20:00:01,228 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 20:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 20:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 21:00:00 UTC)" executed successfully 2026-09-30 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 22:00:00 UTC)" (scheduled at 2026-09-30 21:00:00+00:00) 2026-09-30 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-09-30 21:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 21:00:03,277 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 21:00:03,278 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 21:00:03,282 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 21:00:03,282 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 21:00:03,341 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 21:00:03,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 21:00:03,411 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 22:00:00 UTC)" executed successfully 2026-09-30 22:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 23:00:00 UTC)" (scheduled at 2026-09-30 22:00:00+00:00) 2026-09-30 22:00:00,015 INFO [fb-sync] Starting FB sync... 2026-09-30 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 22:00:01,558 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 22:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 22:00:01,564 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 22:00:01,564 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 22:00:01,630 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 22:00:01,713 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 22:00:01,713 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-09-30 23:00:00 UTC)" executed successfully 2026-09-30 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 00:00:00 UTC)" (scheduled at 2026-09-30 23:00:00+00:00) 2026-09-30 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-09-30 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-09-30 23:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-09-30 23:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-09-30 23:00:01,285 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-09-30 23:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-09-30 23:00:01,353 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-09-30 23:00:01,440 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-09-30 23:00:01,440 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 00:00:00 UTC)" executed successfully 2026-10-01 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 01:00:00 UTC)" (scheduled at 2026-10-01 00:00:00+00:00) 2026-10-01 00:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-01 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 00:00:01,467 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 00:00:01,469 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 00:00:01,473 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 00:00:01,474 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 00:00:01,550 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 00:00:01,650 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 00:00:01,650 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 01:00:00 UTC)" executed successfully 2026-10-01 01:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 02:00:00 UTC)" (scheduled at 2026-10-01 01:00:00+00:00) 2026-10-01 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-01 01:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 01:00:01,349 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 01:00:01,350 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 01:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 01:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 01:00:01,419 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 01:00:01,493 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 01:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 02:00:00 UTC)" executed successfully 2026-10-01 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 03:00:00 UTC)" (scheduled at 2026-10-01 02:00:00+00:00) 2026-10-01 02:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-01 02:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 02:00:02,613 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 02:00:02,615 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 02:00:02,617 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 02:00:02,617 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 02:00:02,702 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 02:00:02,770 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 02:00:02,770 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 03:00:00 UTC)" executed successfully 2026-10-01 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 04:00:00 UTC)" (scheduled at 2026-10-01 03:00:00+00:00) 2026-10-01 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 03:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 03:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 03:00:01,176 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 03:00:01,176 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 03:00:01,239 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 03:00:01,311 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 03:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 04:00:00 UTC)" executed successfully 2026-10-01 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 05:00:00 UTC)" (scheduled at 2026-10-01 04:00:00+00:00) 2026-10-01 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 04:00:01,583 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 04:00:01,585 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 04:00:01,589 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 04:00:01,589 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 04:00:01,657 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 04:00:01,735 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 04:00:01,736 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 05:00:00 UTC)" executed successfully 2026-10-01 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 06:00:00 UTC)" (scheduled at 2026-10-01 05:00:00+00:00) 2026-10-01 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-01 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 05:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 05:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 05:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 05:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 05:00:01,278 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 05:00:01,341 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 05:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 06:00:00 UTC)" executed successfully 2026-10-01 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 07:00:00 UTC)" (scheduled at 2026-10-01 06:00:00+00:00) 2026-10-01 06:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-01 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 06:00:01,623 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 06:00:01,625 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 06:00:01,628 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 06:00:01,629 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 06:00:01,734 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 06:00:01,817 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 06:00:01,818 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 07:00:00 UTC)" executed successfully 2026-10-01 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 08:00:00 UTC)" (scheduled at 2026-10-01 07:00:00+00:00) 2026-10-01 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 07:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 07:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 07:00:01,286 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 07:00:01,287 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 07:00:01,364 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 07:00:01,457 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 07:00:01,458 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 08:00:00 UTC)" executed successfully 2026-10-01 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 09:00:00 UTC)" (scheduled at 2026-10-01 08:00:00+00:00) 2026-10-01 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-01 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 08:00:01,554 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 08:00:01,556 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 08:00:01,561 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 08:00:01,561 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 08:00:01,641 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 08:00:01,725 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 08:00:01,725 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 09:00:00 UTC)" executed successfully 2026-10-01 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 10:00:00 UTC)" (scheduled at 2026-10-01 09:00:00+00:00) 2026-10-01 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 09:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 09:00:01,105 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 09:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 09:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 09:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 09:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 09:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 09:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 10:00:00 UTC)" executed successfully 2026-10-01 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 11:00:00 UTC)" (scheduled at 2026-10-01 10:00:00+00:00) 2026-10-01 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 10:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 10:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 10:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 10:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 10:00:01,209 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 10:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 10:00:01,366 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 10:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 11:00:00 UTC)" executed successfully 2026-10-01 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 12:00:00 UTC)" (scheduled at 2026-10-01 11:00:00+00:00) 2026-10-01 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-01 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 11:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 11:00:01,297 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 11:00:01,301 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 11:00:01,301 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 11:00:01,376 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 11:00:01,455 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 11:00:01,456 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 12:00:00 UTC)" executed successfully 2026-10-01 12:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 13:00:00 UTC)" (scheduled at 2026-10-01 12:00:00+00:00) 2026-10-01 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-01 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 12:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 12:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 12:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 12:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 12:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 12:00:01,344 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 12:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 13:00:00 UTC)" executed successfully 2026-10-01 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 14:00:00 UTC)" (scheduled at 2026-10-01 13:00:00+00:00) 2026-10-01 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-01 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 13:00:01,261 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 13:00:01,263 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 13:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 13:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 13:00:01,304 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 13:00:01,342 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 13:00:01,342 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 14:00:00 UTC)" executed successfully 2026-10-01 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 15:00:00 UTC)" (scheduled at 2026-10-01 14:00:00+00:00) 2026-10-01 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-01 14:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 14:00:01,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 14:00:01,365 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 14:00:01,367 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 14:00:01,368 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 14:00:01,403 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 14:00:01,441 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 14:00:01,441 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 15:00:00 UTC)" executed successfully 2026-10-01 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 16:00:00 UTC)" (scheduled at 2026-10-01 15:00:00+00:00) 2026-10-01 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-01 15:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 15:00:03,716 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 15:00:03,717 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 15:00:03,720 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 15:00:03,720 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 15:00:03,755 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 15:00:03,792 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 15:00:03,792 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 16:00:00 UTC)" executed successfully 2026-10-01 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 17:00:00 UTC)" (scheduled at 2026-10-01 16:00:00+00:00) 2026-10-01 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-01 16:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 16:00:02,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 16:00:02,065 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 16:00:02,068 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 16:00:02,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 16:00:02,121 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 16:00:02,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 16:00:02,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 17:00:00 UTC)" executed successfully 2026-10-01 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 18:00:00 UTC)" (scheduled at 2026-10-01 17:00:00+00:00) 2026-10-01 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-01 17:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 17:00:01,394 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 17:00:01,395 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 17:00:01,398 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 17:00:01,398 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 17:00:01,453 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 17:00:01,493 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 17:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 18:00:00 UTC)" executed successfully 2026-10-01 18:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 19:00:00 UTC)" (scheduled at 2026-10-01 18:00:00+00:00) 2026-10-01 18:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-01 18:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 18:00:01,525 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 18:00:01,527 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 18:00:01,530 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 18:00:01,530 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 18:00:01,596 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 18:00:01,682 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 18:00:01,683 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 19:00:00 UTC)" executed successfully 2026-10-01 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 20:00:00 UTC)" (scheduled at 2026-10-01 19:00:00+00:00) 2026-10-01 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-01 19:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 19:00:01,116 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 19:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 19:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 19:00:01,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 19:00:01,156 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 19:00:01,192 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 19:00:01,192 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 20:00:00 UTC)" executed successfully 2026-10-01 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 21:00:00 UTC)" (scheduled at 2026-10-01 20:00:00+00:00) 2026-10-01 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-01 20:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 20:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 20:00:01,155 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 20:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 20:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 20:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 20:00:01,231 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 20:00:01,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 21:00:00 UTC)" executed successfully 2026-10-01 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 22:00:00 UTC)" (scheduled at 2026-10-01 21:00:00+00:00) 2026-10-01 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-01 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 21:00:02,064 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 21:00:02,065 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 21:00:02,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 21:00:02,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 21:00:02,120 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 21:00:02,159 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 21:00:02,159 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 22:00:00 UTC)" executed successfully 2026-10-01 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 23:00:00 UTC)" (scheduled at 2026-10-01 22:00:00+00:00) 2026-10-01 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-01 22:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 22:00:01,421 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 22:00:01,422 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 22:00:01,424 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 22:00:01,425 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 22:00:01,469 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 22:00:01,513 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 22:00:01,513 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-01 23:00:00 UTC)" executed successfully 2026-10-01 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 00:00:00 UTC)" (scheduled at 2026-10-01 23:00:00+00:00) 2026-10-01 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-01 23:00:00,060 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-01 23:00:01,244 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-01 23:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-10-01 23:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-01 23:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-01 23:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-01 23:00:01,322 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-01 23:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 00:00:00 UTC)" executed successfully 2026-10-02 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 01:00:00 UTC)" (scheduled at 2026-10-02 00:00:00+00:00) 2026-10-02 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-02 00:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 00:00:01,217 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 00:00:01,219 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 00:00:01,221 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 00:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 00:00:01,271 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 00:00:01,318 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 00:00:01,318 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 01:00:00 UTC)" executed successfully 2026-10-02 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 02:00:00 UTC)" (scheduled at 2026-10-02 01:00:00+00:00) 2026-10-02 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-02 01:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 01:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 01:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 01:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 01:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 01:00:01,242 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 01:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 01:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 02:00:00 UTC)" executed successfully 2026-10-02 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 03:00:00 UTC)" (scheduled at 2026-10-02 02:00:00+00:00) 2026-10-02 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-02 02:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 02:00:02,764 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 02:00:02,766 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 02:00:02,769 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 02:00:02,769 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 02:00:02,823 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 02:00:02,883 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 02:00:02,884 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 03:00:00 UTC)" executed successfully 2026-10-02 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 04:00:00 UTC)" (scheduled at 2026-10-02 03:00:00+00:00) 2026-10-02 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-02 03:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 03:00:01,141 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 03:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 03:00:01,145 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 03:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 03:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 03:00:01,233 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 03:00:01,233 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 04:00:00 UTC)" executed successfully 2026-10-02 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 05:00:00 UTC)" (scheduled at 2026-10-02 04:00:00+00:00) 2026-10-02 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-02 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 04:00:01,611 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 04:00:01,613 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 04:00:01,616 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 04:00:01,616 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 04:00:01,674 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 04:00:01,733 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 04:00:01,733 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 05:00:00 UTC)" executed successfully 2026-10-02 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 06:00:00 UTC)" (scheduled at 2026-10-02 05:00:00+00:00) 2026-10-02 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-02 05:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 05:00:01,568 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 05:00:01,570 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 05:00:01,571 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 05:00:01,572 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 05:00:01,620 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 05:00:01,664 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 05:00:01,664 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 06:00:00 UTC)" executed successfully 2026-10-02 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 07:00:00 UTC)" (scheduled at 2026-10-02 06:00:00+00:00) 2026-10-02 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-02 06:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 06:00:01,942 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 06:00:01,952 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 06:00:01,966 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 06:00:01,966 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 06:00:02,028 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 06:00:02,098 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 06:00:02,098 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 07:00:00 UTC)" executed successfully 2026-10-02 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 08:00:00 UTC)" (scheduled at 2026-10-02 07:00:00+00:00) 2026-10-02 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-02 07:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 07:00:01,310 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 07:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 07:00:01,315 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 07:00:01,316 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 07:00:01,375 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 07:00:01,444 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 07:00:01,444 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 08:00:00 UTC)" executed successfully 2026-10-02 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 09:00:00 UTC)" (scheduled at 2026-10-02 08:00:00+00:00) 2026-10-02 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-02 08:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 08:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 08:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 08:00:01,174 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 08:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 08:00:01,220 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 08:00:01,265 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 08:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 09:00:00 UTC)" executed successfully 2026-10-02 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 10:00:00 UTC)" (scheduled at 2026-10-02 09:00:00+00:00) 2026-10-02 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-02 09:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 09:00:01,519 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 09:00:01,521 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 09:00:01,524 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 09:00:01,524 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 09:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 09:00:01,624 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 09:00:01,624 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 10:00:00 UTC)" executed successfully 2026-10-02 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 11:00:00 UTC)" (scheduled at 2026-10-02 10:00:00+00:00) 2026-10-02 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-02 10:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 10:00:01,340 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 10:00:01,342 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 10:00:01,345 INFO [fb-sync.worker] New articles: 3 | skips: {'duplicate_exact': 47} 2026-10-02 10:00:01,346 INFO [fb-sync.worker] Publishing [1/3] Velká Británie couvla od povinného klimatického reporti... 2026-10-02 10:00:01,379 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1822 content_type=home.BlogPostPage path=/home/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:01,562 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1822 revision_id=3634 2026-10-02 10:00:01,644 INFO [home.signals] Starting auto-translation for blog post: Velká Británie couvla od povinného klimatického reportingu (ID: 1822) 2026-10-02 10:00:01,650 INFO [home.signals] Creating new en translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:04,847 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:05,982 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:06,176 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1823 content_type=home.BlogPostPage path=/home-1/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:06,198 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1823 revision_id=3635 2026-10-02 10:00:06,204 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1823 from=1822 2026-10-02 10:00:06,387 INFO [wagtail] Page edited: "The United Kingdom backed away from mandatory climate reporting" id=1823 revision_id=3636 2026-10-02 10:00:06,438 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'The United Kingdom backed away from mandatory climate reporting' id=1823 2026-10-02 10:00:06,454 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:06,555 INFO [home.signals] Skipping auto-translation for non-Czech page: The United Kingdom backed away from mandatory climate reporting (en) 2026-10-02 10:00:06,568 INFO [wagtail] Published: "The United Kingdom backed away from mandatory climate reporting" pk=1823 revision_id=3636 2026-10-02 10:00:06,580 INFO [home.signals] ✓ Successfully processed en: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:06,584 INFO [home.signals] Creating new de translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:09,969 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:11,328 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:11,470 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1824 content_type=home.BlogPostPage path=/startseite/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:11,482 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1824 revision_id=3637 2026-10-02 10:00:11,487 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1824 from=1822 2026-10-02 10:00:11,638 INFO [wagtail] Page edited: "Großbritannien hat sich vom verpflichtenden Klimareporting zurückgezogen" id=1824 revision_id=3638 2026-10-02 10:00:11,679 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Großbritannien hat sich vom verpflichtenden Klimareporting zurückgezogen' id=1824 2026-10-02 10:00:11,688 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:11,783 INFO [home.signals] Skipping auto-translation for non-Czech page: Großbritannien hat sich vom verpflichtenden Klimareporting zurückgezogen (de) 2026-10-02 10:00:11,796 INFO [wagtail] Published: "Großbritannien hat sich vom verpflichtenden Klimareporting zurückgezogen" pk=1824 revision_id=3638 2026-10-02 10:00:11,807 INFO [home.signals] ✓ Successfully processed de: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:11,814 INFO [home.signals] Creating new sk translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:15,114 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:16,488 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:16,668 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1825 content_type=home.BlogPostPage path=/domov/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:16,694 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1825 revision_id=3639 2026-10-02 10:00:16,702 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1825 from=1822 2026-10-02 10:00:16,853 INFO [wagtail] Page edited: "Veľká Británia ustúpila od povinného klimatického reportingu" id=1825 revision_id=3640 2026-10-02 10:00:16,907 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Veľká Británia ustúpila od povinného klimatického reportingu' id=1825 2026-10-02 10:00:16,923 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:17,052 INFO [home.signals] Skipping auto-translation for non-Czech page: Veľká Británia ustúpila od povinného klimatického reportingu (sk) 2026-10-02 10:00:17,067 INFO [wagtail] Published: "Veľká Británia ustúpila od povinného klimatického reportingu" pk=1825 revision_id=3640 2026-10-02 10:00:17,077 INFO [home.signals] ✓ Successfully processed sk: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:17,081 INFO [home.signals] Creating new zh-Hans translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:20,398 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:21,771 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:21,967 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1826 content_type=home.BlogPostPage path=/zh-hans/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:21,991 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1826 revision_id=3641 2026-10-02 10:00:22,007 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1826 from=1822 2026-10-02 10:00:22,110 INFO [wagtail] Page edited: "英国放弃了强制性气候报告" id=1826 revision_id=3642 2026-10-02 10:00:22,135 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '英国放弃了强制性气候报告' id=1826 2026-10-02 10:00:22,262 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:22,335 INFO [home.signals] Skipping auto-translation for non-Czech page: 英国放弃了强制性气候报告 (zh-Hans) 2026-10-02 10:00:22,353 INFO [wagtail] Published: "英国放弃了强制性气候报告" pk=1826 revision_id=3642 2026-10-02 10:00:22,365 INFO [home.signals] ✓ Successfully processed zh-Hans: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:22,369 INFO [home.signals] Creating new tr translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:25,500 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:26,762 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:26,956 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1827 content_type=home.BlogPostPage path=/anasayfa/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:26,975 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1827 revision_id=3643 2026-10-02 10:00:26,988 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1827 from=1822 2026-10-02 10:00:27,134 INFO [wagtail] Page edited: "Birleşik Krallık, zorunlu iklim raporlamasından geri çekildi" id=1827 revision_id=3644 2026-10-02 10:00:27,184 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Birleşik Krallık, zorunlu iklim raporlamasından geri çekildi' id=1827 2026-10-02 10:00:27,202 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:27,373 INFO [home.signals] Skipping auto-translation for non-Czech page: Birleşik Krallık, zorunlu iklim raporlamasından geri çekildi (tr) 2026-10-02 10:00:27,392 INFO [wagtail] Published: "Birleşik Krallık, zorunlu iklim raporlamasından geri çekildi" pk=1827 revision_id=3644 2026-10-02 10:00:27,405 INFO [home.signals] ✓ Successfully processed tr: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:27,409 INFO [home.signals] Creating new vi translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:31,473 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:32,917 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:33,109 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1828 content_type=home.BlogPostPage path=/trang-chu/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:33,132 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1828 revision_id=3645 2026-10-02 10:00:33,141 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1828 from=1822 2026-10-02 10:00:33,322 INFO [wagtail] Page edited: "Anh Quốc đã lùi lại khỏi báo cáo khí hậu bắt buộc" id=1828 revision_id=3646 2026-10-02 10:00:33,370 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Anh Quốc đã lùi lại khỏi báo cáo khí hậu bắt buộc' id=1828 2026-10-02 10:00:33,449 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:33,568 INFO [home.signals] Skipping auto-translation for non-Czech page: Anh Quốc đã lùi lại khỏi báo cáo khí hậu bắt buộc (vi) 2026-10-02 10:00:33,582 INFO [wagtail] Published: "Anh Quốc đã lùi lại khỏi báo cáo khí hậu bắt buộc" pk=1828 revision_id=3646 2026-10-02 10:00:33,599 INFO [home.signals] ✓ Successfully processed vi: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:33,606 INFO [home.signals] Creating new hi translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:37,628 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:39,053 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:39,211 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1829 content_type=home.BlogPostPage path=/hi/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:39,231 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1829 revision_id=3647 2026-10-02 10:00:39,239 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1829 from=1822 2026-10-02 10:00:39,418 INFO [wagtail] Page edited: "यूनाइटेड किंगडम ने अनिवार्य जलवायु रिपोर्टिंग से पीछे हट गया" id=1829 revision_id=3648 2026-10-02 10:00:39,475 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'यूनाइटेड किंगडम ने अनिवार्य जलवायु रिपोर्टिंग से पीछे हट गया' id=1829 2026-10-02 10:00:39,489 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:39,588 INFO [home.signals] Skipping auto-translation for non-Czech page: यूनाइटेड किंगडम ने अनिवार्य जलवायु रिपोर्टिंग से पीछे हट गया (hi) 2026-10-02 10:00:39,605 INFO [wagtail] Published: "यूनाइटेड किंगडम ने अनिवार्य जलवायु रिपोर्टिंग से पीछे हट गया" pk=1829 revision_id=3648 2026-10-02 10:00:39,619 INFO [home.signals] ✓ Successfully processed hi: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:39,624 INFO [home.signals] Creating new fr translation for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:43,205 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:44,573 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:44,792 INFO [wagtail] Page created: "Velká Británie couvla od povinného klimatického reportingu" id=1830 content_type=home.BlogPostPage path=/home-fr/blog/velka-britanie-couvla-od-povinneho-klimatickeho-reportingu/ 2026-10-02 10:00:44,815 INFO [wagtail] Page edited: "Velká Británie couvla od povinného klimatického reportingu" id=1830 revision_id=3649 2026-10-02 10:00:44,825 INFO [wagtail] Page copied: "Velká Británie couvla od povinného klimatického reportingu" id=1830 from=1822 2026-10-02 10:00:44,988 INFO [wagtail] Page edited: "Le Royaume-Uni s'est retiré du reporting climatique obligatoire" id=1830 revision_id=3650 2026-10-02 10:00:45,027 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Le Royaume-Uni s'est retiré du reporting climatique obligatoire' id=1830 2026-10-02 10:00:45,037 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:45,151 INFO [home.signals] Skipping auto-translation for non-Czech page: Le Royaume-Uni s'est retiré du reporting climatique obligatoire (fr) 2026-10-02 10:00:45,167 INFO [wagtail] Published: "Le Royaume-Uni s'est retiré du reporting climatique obligatoire" pk=1830 revision_id=3650 2026-10-02 10:00:45,180 INFO [home.signals] ✓ Successfully processed fr: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:45,180 INFO [home.signals] Completed auto-translation workflow for: Velká Británie couvla od povinného klimatického reportingu 2026-10-02 10:00:45,206 INFO [wagtail] Published: "Velká Británie couvla od povinného klimatického reportingu" pk=1822 revision_id=3634 2026-10-02 10:00:50,207 INFO [fb-sync.worker] Publishing [2/3] Zákaz greenwashingu v EU je od 27. září vymahatelný. Be... 2026-10-02 10:00:50,237 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1831 content_type=home.BlogPostPage path=/home/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:00:50,341 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1831 revision_id=3651 2026-10-02 10:00:50,409 INFO [home.signals] Starting auto-translation for blog post: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. (ID: 1831) 2026-10-02 10:00:50,413 INFO [home.signals] Creating new en translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:00:53,623 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:53,771 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1832 content_type=home.BlogPostPage path=/home-1/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:00:53,794 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1832 revision_id=3652 2026-10-02 10:00:53,802 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1832 from=1831 2026-10-02 10:00:53,977 INFO [wagtail] Page edited: "The ban on greenwashing in the EU is enforceable from September 27. No transition period." id=1832 revision_id=3653 2026-10-02 10:00:54,014 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'The ban on greenwashing in the EU is enforceable from September 27. No transition period.' id=1832 2026-10-02 10:00:54,021 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:54,134 INFO [home.signals] Skipping auto-translation for non-Czech page: The ban on greenwashing in the EU is enforceable from September 27. No transition period. (en) 2026-10-02 10:00:54,149 INFO [wagtail] Published: "The ban on greenwashing in the EU is enforceable from September 27. No transition period." pk=1832 revision_id=3653 2026-10-02 10:00:54,164 INFO [home.signals] ✓ Successfully processed en: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:00:54,171 INFO [home.signals] Creating new de translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:00:57,796 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:00:57,910 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1833 content_type=home.BlogPostPage path=/startseite/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:00:57,927 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1833 revision_id=3654 2026-10-02 10:00:57,934 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1833 from=1831 2026-10-02 10:00:58,102 INFO [wagtail] Page edited: "Das Verbot von Greenwashing in der EU ist ab dem 27. September durchsetzbar. Ohne Übergangsfrist." id=1833 revision_id=3655 2026-10-02 10:00:58,154 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Das Verbot von Greenwashing in der EU ist ab dem 27. September durchsetzbar. Ohne Übergangsfrist.' id=1833 2026-10-02 10:00:58,168 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:00:58,247 INFO [home.signals] Skipping auto-translation for non-Czech page: Das Verbot von Greenwashing in der EU ist ab dem 27. September durchsetzbar. Ohne Übergangsfrist. (de) 2026-10-02 10:00:58,258 INFO [wagtail] Published: "Das Verbot von Greenwashing in der EU ist ab dem 27. September durchsetzbar. Ohne Übergangsfrist." pk=1833 revision_id=3655 2026-10-02 10:00:58,265 INFO [home.signals] ✓ Successfully processed de: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:00:58,268 INFO [home.signals] Creating new sk translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:02,050 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:02,189 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1834 content_type=home.BlogPostPage path=/domov/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:02,206 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1834 revision_id=3656 2026-10-02 10:01:02,212 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1834 from=1831 2026-10-02 10:01:02,357 INFO [wagtail] Page edited: "Zákaz greenwashingu v EÚ je od 27. septembra vymahatelný. Bez prechodného obdobia." id=1834 revision_id=3657 2026-10-02 10:01:02,395 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Zákaz greenwashingu v EÚ je od 27. septembra vymahatelný. Bez prechodného obdobia.' id=1834 2026-10-02 10:01:02,410 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:01:02,544 INFO [home.signals] Skipping auto-translation for non-Czech page: Zákaz greenwashingu v EÚ je od 27. septembra vymahatelný. Bez prechodného obdobia. (sk) 2026-10-02 10:01:02,564 INFO [wagtail] Published: "Zákaz greenwashingu v EÚ je od 27. septembra vymahatelný. Bez prechodného obdobia." pk=1834 revision_id=3657 2026-10-02 10:01:02,576 INFO [home.signals] ✓ Successfully processed sk: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:02,583 INFO [home.signals] Creating new zh-Hans translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:05,992 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:06,093 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1835 content_type=home.BlogPostPage path=/zh-hans/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:06,105 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1835 revision_id=3658 2026-10-02 10:01:06,109 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1835 from=1831 2026-10-02 10:01:06,200 INFO [wagtail] Page edited: "欧盟对绿色洗牌的禁令自9月27日起可执行。没有过渡期。" id=1835 revision_id=3659 2026-10-02 10:01:06,301 INFO [home.signals] Skipping auto-translation for non-Czech page: 欧盟对绿色洗牌的禁令自9月27日起可执行。没有过渡期。 (zh-Hans) 2026-10-02 10:01:06,314 INFO [wagtail] Published: "欧盟对绿色洗牌的禁令自9月27日起可执行。没有过渡期。" pk=1835 revision_id=3659 2026-10-02 10:01:06,327 INFO [home.signals] ✓ Successfully processed zh-Hans: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:06,331 INFO [home.signals] Creating new tr translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:10,059 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:10,211 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1836 content_type=home.BlogPostPage path=/anasayfa/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:10,230 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1836 revision_id=3660 2026-10-02 10:01:10,238 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1836 from=1831 2026-10-02 10:01:10,374 INFO [wagtail] Page edited: "AB'de yeşil yıkama yasağı 27 Eylül'den itibaren uygulanabilir. Geçiş süresi yok." id=1836 revision_id=3661 2026-10-02 10:01:10,420 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'AB'de yeşil yıkama yasağı 27 Eylül'den itibaren uygulanabilir. Geçiş süresi yok.' id=1836 2026-10-02 10:01:10,428 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:01:10,542 INFO [home.signals] Skipping auto-translation for non-Czech page: AB'de yeşil yıkama yasağı 27 Eylül'den itibaren uygulanabilir. Geçiş süresi yok. (tr) 2026-10-02 10:01:10,562 INFO [wagtail] Published: "AB'de yeşil yıkama yasağı 27 Eylül'den itibaren uygulanabilir. Geçiş süresi yok." pk=1836 revision_id=3661 2026-10-02 10:01:10,575 INFO [home.signals] ✓ Successfully processed tr: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:10,580 INFO [home.signals] Creating new vi translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:14,415 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:14,541 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1837 content_type=home.BlogPostPage path=/trang-chu/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:14,557 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1837 revision_id=3662 2026-10-02 10:01:14,563 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1837 from=1831 2026-10-02 10:01:14,709 INFO [wagtail] Page edited: "Cấm greenwashing ở EU sẽ có hiệu lực từ ngày 27 tháng 9. Không có thời gian chuyển tiếp." id=1837 revision_id=3663 2026-10-02 10:01:14,761 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Cấm greenwashing ở EU sẽ có hiệu lực từ ngày 27 tháng 9. Không có thời gian chuyển tiếp.' id=1837 2026-10-02 10:01:14,775 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:01:14,895 INFO [home.signals] Skipping auto-translation for non-Czech page: Cấm greenwashing ở EU sẽ có hiệu lực từ ngày 27 tháng 9. Không có thời gian chuyển tiếp. (vi) 2026-10-02 10:01:14,913 INFO [wagtail] Published: "Cấm greenwashing ở EU sẽ có hiệu lực từ ngày 27 tháng 9. Không có thời gian chuyển tiếp." pk=1837 revision_id=3663 2026-10-02 10:01:14,924 INFO [home.signals] ✓ Successfully processed vi: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:14,929 INFO [home.signals] Creating new hi translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:18,787 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:18,902 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1838 content_type=home.BlogPostPage path=/hi/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:18,922 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1838 revision_id=3664 2026-10-02 10:01:18,931 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1838 from=1831 2026-10-02 10:01:19,058 INFO [wagtail] Page edited: "EU में ग्रीनवॉशिंग पर प्रतिबंध 27 सितंबर से लागू है। कोई संक्रमणकालीन अवधि नहीं।" id=1838 revision_id=3665 2026-10-02 10:01:19,087 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'EU में ग्रीनवॉशिंग पर प्रतिबंध 27 सितंबर से लागू है। कोई संक्रमणकालीन अवधि नहीं।' id=1838 2026-10-02 10:01:19,093 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:01:19,195 INFO [home.signals] Skipping auto-translation for non-Czech page: EU में ग्रीनवॉशिंग पर प्रतिबंध 27 सितंबर से लागू है। कोई संक्रमणकालीन अवधि नहीं। (hi) 2026-10-02 10:01:19,214 INFO [wagtail] Published: "EU में ग्रीनवॉशिंग पर प्रतिबंध 27 सितंबर से लागू है। कोई संक्रमणकालीन अवधि नहीं।" pk=1838 revision_id=3665 2026-10-02 10:01:19,228 INFO [home.signals] ✓ Successfully processed hi: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:19,234 INFO [home.signals] Creating new fr translation for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:22,519 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:22,637 INFO [wagtail] Page created: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1839 content_type=home.BlogPostPage path=/home-fr/blog/zakaz-greenwashingu-v-eu-je-od-27-zari-vymahatelny-bez-prechodneho-obdobi/ 2026-10-02 10:01:22,652 INFO [wagtail] Page edited: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1839 revision_id=3666 2026-10-02 10:01:22,658 INFO [wagtail] Page copied: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." id=1839 from=1831 2026-10-02 10:01:22,800 INFO [wagtail] Page edited: "L'interdiction du greenwashing dans l'UE est applicable à partir du 27 septembre. Sans période de transition." id=1839 revision_id=3667 2026-10-02 10:01:22,841 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'L'interdiction du greenwashing dans l'UE est applicable à partir du 27 septembre. Sans période de transition.' id=1839 2026-10-02 10:01:22,854 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 10:01:22,980 INFO [home.signals] Skipping auto-translation for non-Czech page: L'interdiction du greenwashing dans l'UE est applicable à partir du 27 septembre. Sans période de transition. (fr) 2026-10-02 10:01:22,997 INFO [wagtail] Published: "L'interdiction du greenwashing dans l'UE est applicable à partir du 27 septembre. Sans période de transition." pk=1839 revision_id=3667 2026-10-02 10:01:23,011 INFO [home.signals] ✓ Successfully processed fr: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:23,011 INFO [home.signals] Completed auto-translation workflow for: Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období. 2026-10-02 10:01:23,029 INFO [wagtail] Published: "Zákaz greenwashingu v EU je od 27. září vymahatelný. Bez přechodného období." pk=1831 revision_id=3651 2026-10-02 10:01:28,030 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 10:01:30,412 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:30,415 INFO [fb-sync.free_images] Photo queries: ['Financial Conduct Authority building', 'London Stock Exchange exterior', 'FTSE 350 office tower', 'British corporate headquarters'] 2026-10-02 10:01:37,064 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:39,209 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:41,401 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:43,968 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:46,171 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:46,175 INFO [fb-sync.free_images] Image chosen: pexels "Stunning view of the Royal Exchange building in London durin" (Pexels Licence) 2026-10-02 10:01:46,999 INFO [fb-sync.worker] Image added ID=1822: stock:pexels (Pexels Licence) 2026-10-02 10:01:48,910 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:48,912 INFO [fb-sync.free_images] Photo queries: ['EU parliament building exterior', 'supermarket shelf packaging', 'bank building exterior', 'wind turbine field'] 2026-10-02 10:01:54,802 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:01:57,685 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:02:00,056 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:02:03,522 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:02:05,450 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 10:02:05,452 INFO [fb-sync.free_images] Image chosen: pexels "Wind turbines on a field under a cloudy sky, capturing clean" (Pexels Licence) 2026-10-02 10:02:06,105 INFO [fb-sync.worker] Image added ID=1831: stock:pexels (Pexels Licence) 2026-10-02 10:02:07,178 INFO [fb-sync] Sync done: 2 new posts in 127s (source=graph_api, scraped=50, skips={'duplicate_exact': 47, 'empty_body': 1}) 2026-10-02 10:02:07,223 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 10:02:07,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 11:00:00 UTC)" executed successfully 2026-10-02 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 12:00:00 UTC)" (scheduled at 2026-10-02 11:00:00+00:00) 2026-10-02 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-02 11:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 11:00:01,644 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 11:00:01,646 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 11:00:01,648 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 11:00:01,648 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 11:00:01,705 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 11:00:01,772 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 11:00:01,772 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 12:00:00 UTC)" executed successfully 2026-10-02 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 13:00:00 UTC)" (scheduled at 2026-10-02 12:00:00+00:00) 2026-10-02 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-02 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 12:00:04,527 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 12:00:04,527 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 12:00:04,531 INFO [fb-sync.worker] New articles: 2 | skips: {'duplicate_exact': 48} 2026-10-02 12:00:04,531 INFO [fb-sync.worker] Publishing [1/2] Starbucks couvá od zelených cílů.... 2026-10-02 12:00:04,564 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1840 content_type=home.BlogPostPage path=/home/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:04,695 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1840 revision_id=3668 2026-10-02 12:00:04,792 INFO [home.signals] Starting auto-translation for blog post: Starbucks couvá od zelených cílů. (ID: 1840) 2026-10-02 12:00:04,797 INFO [home.signals] Creating new en translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:07,705 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:08,673 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:08,855 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1841 content_type=home.BlogPostPage path=/home-1/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:08,875 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1841 revision_id=3669 2026-10-02 12:00:08,887 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1841 from=1840 2026-10-02 12:00:09,044 INFO [wagtail] Page edited: "Starbucks backs away from green goals." id=1841 revision_id=3670 2026-10-02 12:00:09,104 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks backs away from green goals.' id=1841 2026-10-02 12:00:09,117 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:09,252 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks backs away from green goals. (en) 2026-10-02 12:00:09,279 INFO [wagtail] Published: "Starbucks backs away from green goals." pk=1841 revision_id=3670 2026-10-02 12:00:09,289 INFO [home.signals] ✓ Successfully processed en: Starbucks couvá od zelených cílů. 2026-10-02 12:00:09,291 INFO [home.signals] Creating new de translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:12,581 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:13,620 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:13,796 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1842 content_type=home.BlogPostPage path=/startseite/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:13,821 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1842 revision_id=3671 2026-10-02 12:00:13,832 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1842 from=1840 2026-10-02 12:00:13,994 INFO [wagtail] Page edited: "Starbucks weicht von den grünen Zielen zurück." id=1842 revision_id=3672 2026-10-02 12:00:14,038 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks weicht von den grünen Zielen zurück.' id=1842 2026-10-02 12:00:14,048 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:14,172 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks weicht von den grünen Zielen zurück. (de) 2026-10-02 12:00:14,190 INFO [wagtail] Published: "Starbucks weicht von den grünen Zielen zurück." pk=1842 revision_id=3672 2026-10-02 12:00:14,201 INFO [home.signals] ✓ Successfully processed de: Starbucks couvá od zelených cílů. 2026-10-02 12:00:14,205 INFO [home.signals] Creating new sk translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:18,482 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:19,529 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:19,778 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1843 content_type=home.BlogPostPage path=/domov/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:19,807 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1843 revision_id=3673 2026-10-02 12:00:19,816 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1843 from=1840 2026-10-02 12:00:19,988 INFO [wagtail] Page edited: "Starbucks couvá od zelených cieľov." id=1843 revision_id=3674 2026-10-02 12:00:20,035 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks couvá od zelených cieľov.' id=1843 2026-10-02 12:00:20,047 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:20,176 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks couvá od zelených cieľov. (sk) 2026-10-02 12:00:20,193 INFO [wagtail] Published: "Starbucks couvá od zelených cieľov." pk=1843 revision_id=3674 2026-10-02 12:00:20,206 INFO [home.signals] ✓ Successfully processed sk: Starbucks couvá od zelených cílů. 2026-10-02 12:00:20,210 INFO [home.signals] Creating new zh-Hans translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:23,359 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:24,564 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:24,733 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1844 content_type=home.BlogPostPage path=/zh-hans/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:24,752 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1844 revision_id=3675 2026-10-02 12:00:24,758 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1844 from=1840 2026-10-02 12:00:24,928 INFO [wagtail] Page edited: "星巴克正在背离绿色目标。" id=1844 revision_id=3676 2026-10-02 12:00:24,972 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '星巴克正在背离绿色目标。' id=1844 2026-10-02 12:00:24,984 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:25,128 INFO [home.signals] Skipping auto-translation for non-Czech page: 星巴克正在背离绿色目标。 (zh-Hans) 2026-10-02 12:00:25,152 INFO [wagtail] Published: "星巴克正在背离绿色目标。" pk=1844 revision_id=3676 2026-10-02 12:00:25,168 INFO [home.signals] ✓ Successfully processed zh-Hans: Starbucks couvá od zelených cílů. 2026-10-02 12:00:25,174 INFO [home.signals] Creating new tr translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:29,673 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:30,711 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:30,898 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1845 content_type=home.BlogPostPage path=/anasayfa/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:30,919 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1845 revision_id=3677 2026-10-02 12:00:30,928 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1845 from=1840 2026-10-02 12:00:31,102 INFO [wagtail] Page edited: "Starbucks yeşil hedeflerden geri çekiliyor." id=1845 revision_id=3678 2026-10-02 12:00:31,143 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks yeşil hedeflerden geri çekiliyor.' id=1845 2026-10-02 12:00:31,163 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:31,298 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks yeşil hedeflerden geri çekiliyor. (tr) 2026-10-02 12:00:31,316 INFO [wagtail] Published: "Starbucks yeşil hedeflerden geri çekiliyor." pk=1845 revision_id=3678 2026-10-02 12:00:31,331 INFO [home.signals] ✓ Successfully processed tr: Starbucks couvá od zelených cílů. 2026-10-02 12:00:31,336 INFO [home.signals] Creating new vi translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:34,674 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:35,701 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:35,883 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1846 content_type=home.BlogPostPage path=/trang-chu/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:35,903 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1846 revision_id=3679 2026-10-02 12:00:35,910 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1846 from=1840 2026-10-02 12:00:36,074 INFO [wagtail] Page edited: "Starbucks đang lùi lại khỏi các mục tiêu xanh." id=1846 revision_id=3680 2026-10-02 12:00:36,125 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks đang lùi lại khỏi các mục tiêu xanh.' id=1846 2026-10-02 12:00:36,135 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:36,278 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks đang lùi lại khỏi các mục tiêu xanh. (vi) 2026-10-02 12:00:36,305 INFO [wagtail] Published: "Starbucks đang lùi lại khỏi các mục tiêu xanh." pk=1846 revision_id=3680 2026-10-02 12:00:36,320 INFO [home.signals] ✓ Successfully processed vi: Starbucks couvá od zelených cílů. 2026-10-02 12:00:36,326 INFO [home.signals] Creating new hi translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:39,911 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:40,952 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:41,148 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1847 content_type=home.BlogPostPage path=/hi/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:41,168 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1847 revision_id=3681 2026-10-02 12:00:41,178 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1847 from=1840 2026-10-02 12:00:41,356 INFO [wagtail] Page edited: "स्टारबक्स हरित लक्ष्यों से पीछे हट रहा है।" id=1847 revision_id=3682 2026-10-02 12:00:41,403 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'स्टारबक्स हरित लक्ष्यों से पीछे हट रहा है।' id=1847 2026-10-02 12:00:41,415 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:41,563 INFO [home.signals] Skipping auto-translation for non-Czech page: स्टारबक्स हरित लक्ष्यों से पीछे हट रहा है। (hi) 2026-10-02 12:00:41,578 INFO [wagtail] Published: "स्टारबक्स हरित लक्ष्यों से पीछे हट रहा है।" pk=1847 revision_id=3682 2026-10-02 12:00:41,590 INFO [home.signals] ✓ Successfully processed hi: Starbucks couvá od zelených cílů. 2026-10-02 12:00:41,596 INFO [home.signals] Creating new fr translation for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:44,959 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:45,902 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:46,103 INFO [wagtail] Page created: "Starbucks couvá od zelených cílů." id=1848 content_type=home.BlogPostPage path=/home-fr/blog/starbucks-couva-od-zelenych-cilu/ 2026-10-02 12:00:46,121 INFO [wagtail] Page edited: "Starbucks couvá od zelených cílů." id=1848 revision_id=3683 2026-10-02 12:00:46,128 INFO [wagtail] Page copied: "Starbucks couvá od zelených cílů." id=1848 from=1840 2026-10-02 12:00:46,290 INFO [wagtail] Page edited: "Starbucks recule face aux objectifs verts." id=1848 revision_id=3684 2026-10-02 12:00:46,345 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Starbucks recule face aux objectifs verts.' id=1848 2026-10-02 12:00:46,363 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-02 12:00:46,509 INFO [home.signals] Skipping auto-translation for non-Czech page: Starbucks recule face aux objectifs verts. (fr) 2026-10-02 12:00:46,535 INFO [wagtail] Published: "Starbucks recule face aux objectifs verts." pk=1848 revision_id=3684 2026-10-02 12:00:46,556 INFO [home.signals] ✓ Successfully processed fr: Starbucks couvá od zelených cílů. 2026-10-02 12:00:46,557 INFO [home.signals] Completed auto-translation workflow for: Starbucks couvá od zelených cílů. 2026-10-02 12:00:46,578 INFO [wagtail] Published: "Starbucks couvá od zelených cílů." pk=1840 revision_id=3668 2026-10-02 12:00:51,579 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 12:00:53,940 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:00:53,943 INFO [fb-sync.free_images] Photo queries: ['coffee cup with lid', 'coffee bean roasting machine', 'coffee waste compost bin', 'coffee plantation workers'] 2026-10-02 12:00:59,782 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:01:01,935 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:01:04,203 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:01:06,664 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:01:09,615 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-02 12:01:09,618 INFO [fb-sync.free_images] Image chosen: pexels "Close-up of two people holding takeaway coffee cups with lid" (Pexels Licence) 2026-10-02 12:01:10,247 INFO [fb-sync.worker] Image added ID=1840: stock:pexels (Pexels Licence) 2026-10-02 12:01:11,297 INFO [fb-sync] Sync done: 1 new posts in 71s (source=graph_api, scraped=50, skips={'duplicate_exact': 48, 'empty_body': 1}) 2026-10-02 12:01:11,339 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 12:01:11,339 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 13:00:00 UTC)" executed successfully 2026-10-02 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 14:00:00 UTC)" (scheduled at 2026-10-02 13:00:00+00:00) 2026-10-02 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-02 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 13:00:01,910 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 13:00:01,913 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 13:00:01,917 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 13:00:01,918 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 13:00:01,984 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 13:00:02,064 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 13:00:02,064 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 14:00:00 UTC)" executed successfully 2026-10-02 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 15:00:00 UTC)" (scheduled at 2026-10-02 14:00:00+00:00) 2026-10-02 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-02 14:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 14:00:01,354 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 14:00:01,355 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 14:00:01,358 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 14:00:01,359 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 14:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 14:00:01,507 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 14:00:01,508 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 15:00:00 UTC)" executed successfully 2026-10-02 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 16:00:00 UTC)" (scheduled at 2026-10-02 15:00:00+00:00) 2026-10-02 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-02 15:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 15:00:01,247 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 15:00:01,248 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 15:00:01,250 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 15:00:01,250 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 15:00:01,327 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 15:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 15:00:01,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 16:00:00 UTC)" executed successfully 2026-10-02 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 17:00:00 UTC)" (scheduled at 2026-10-02 16:00:00+00:00) 2026-10-02 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-02 16:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 16:00:01,530 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 16:00:01,532 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 16:00:01,536 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 16:00:01,536 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 16:00:01,604 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 16:00:01,880 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 16:00:01,880 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 17:00:00 UTC)" executed successfully 2026-10-02 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 18:00:00 UTC)" (scheduled at 2026-10-02 17:00:00+00:00) 2026-10-02 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-02 17:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 17:00:01,798 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 17:00:01,800 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 17:00:01,802 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 17:00:01,803 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 17:00:01,867 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 17:00:01,925 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 17:00:01,925 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 18:00:00 UTC)" executed successfully 2026-10-02 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 19:00:00 UTC)" (scheduled at 2026-10-02 18:00:00+00:00) 2026-10-02 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-02 18:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 18:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 18:00:01,240 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 18:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 18:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 18:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 18:00:01,337 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 18:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 19:00:00 UTC)" executed successfully 2026-10-02 19:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 20:00:00 UTC)" (scheduled at 2026-10-02 19:00:00+00:00) 2026-10-02 19:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-02 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 19:00:01,080 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 19:00:01,081 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 19:00:01,084 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 19:00:01,084 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 19:00:01,129 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 19:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 19:00:01,175 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 20:00:00 UTC)" executed successfully 2026-10-02 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 21:00:00 UTC)" (scheduled at 2026-10-02 20:00:00+00:00) 2026-10-02 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-02 20:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 20:00:01,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 20:00:01,053 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 20:00:01,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 20:00:01,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 20:00:01,102 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 20:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 20:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 21:00:00 UTC)" executed successfully 2026-10-02 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 22:00:00 UTC)" (scheduled at 2026-10-02 21:00:00+00:00) 2026-10-02 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-02 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 21:00:01,408 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 21:00:01,410 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 21:00:01,413 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 21:00:01,413 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 21:00:01,480 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 21:00:01,554 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 21:00:01,555 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 22:00:00 UTC)" executed successfully 2026-10-02 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 23:00:00 UTC)" (scheduled at 2026-10-02 22:00:00+00:00) 2026-10-02 22:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-02 22:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 22:00:01,841 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 22:00:01,843 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 22:00:01,846 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 22:00:01,846 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 22:00:01,915 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 22:00:01,982 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 22:00:01,982 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-02 23:00:00 UTC)" executed successfully 2026-10-02 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 00:00:00 UTC)" (scheduled at 2026-10-02 23:00:00+00:00) 2026-10-02 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-02 23:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-02 23:00:01,123 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-02 23:00:01,124 INFO [fb-sync.worker] Scraped 50 posts 2026-10-02 23:00:01,126 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-02 23:00:01,126 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-02 23:00:01,171 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-02 23:00:01,228 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-02 23:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 00:00:00 UTC)" executed successfully 2026-10-03 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 01:00:00 UTC)" (scheduled at 2026-10-03 00:00:00+00:00) 2026-10-03 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 00:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 00:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 00:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 00:00:01,023 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 00:00:01,023 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 00:00:01,077 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 00:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 00:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 01:00:00 UTC)" executed successfully 2026-10-03 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 02:00:00 UTC)" (scheduled at 2026-10-03 01:00:00+00:00) 2026-10-03 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-03 01:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 01:00:01,489 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 01:00:01,491 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 01:00:01,494 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 01:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 01:00:01,545 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 01:00:01,600 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 01:00:01,600 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 02:00:00 UTC)" executed successfully 2026-10-03 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 03:00:00 UTC)" (scheduled at 2026-10-03 02:00:00+00:00) 2026-10-03 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-03 02:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 02:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 02:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 02:00:01,006 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 02:00:01,007 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 02:00:01,049 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 02:00:01,094 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 02:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 03:00:00 UTC)" executed successfully 2026-10-03 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 04:00:00 UTC)" (scheduled at 2026-10-03 03:00:00+00:00) 2026-10-03 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 03:00:01,106 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 03:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 03:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 03:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 03:00:01,165 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 03:00:01,215 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 03:00:01,215 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 04:00:00 UTC)" executed successfully 2026-10-03 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 05:00:00 UTC)" (scheduled at 2026-10-03 04:00:00+00:00) 2026-10-03 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-03 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 04:00:01,034 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 04:00:01,035 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 04:00:01,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 04:00:01,037 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 04:00:01,087 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 04:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 04:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 05:00:00 UTC)" executed successfully 2026-10-03 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 06:00:00 UTC)" (scheduled at 2026-10-03 05:00:00+00:00) 2026-10-03 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-03 05:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 05:00:01,105 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 05:00:01,107 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 05:00:01,109 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 05:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 05:00:01,150 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 05:00:01,200 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 05:00:01,201 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 06:00:00 UTC)" executed successfully 2026-10-03 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 07:00:00 UTC)" (scheduled at 2026-10-03 06:00:00+00:00) 2026-10-03 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 06:00:01,360 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 06:00:01,362 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 06:00:01,364 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 06:00:01,364 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 06:00:01,413 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 06:00:01,472 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 06:00:01,473 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 07:00:00 UTC)" executed successfully 2026-10-03 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 08:00:00 UTC)" (scheduled at 2026-10-03 07:00:00+00:00) 2026-10-03 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-03 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 07:00:01,176 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 07:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 07:00:01,180 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 07:00:01,181 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 07:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 07:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 07:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 08:00:00 UTC)" executed successfully 2026-10-03 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 09:00:00 UTC)" (scheduled at 2026-10-03 08:00:00+00:00) 2026-10-03 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-03 08:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 08:00:02,071 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 08:00:02,075 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 08:00:02,079 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 08:00:02,080 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 08:00:02,137 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 08:00:02,191 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 08:00:02,192 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 09:00:00 UTC)" executed successfully 2026-10-03 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 10:00:00 UTC)" (scheduled at 2026-10-03 09:00:00+00:00) 2026-10-03 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-03 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 09:00:01,198 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 09:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 09:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 09:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 09:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 09:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 09:00:01,296 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 10:00:00 UTC)" executed successfully 2026-10-03 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 11:00:00 UTC)" (scheduled at 2026-10-03 10:00:00+00:00) 2026-10-03 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-03 10:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 10:00:01,878 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 10:00:01,881 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 10:00:01,884 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 10:00:01,885 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 10:00:01,960 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 10:00:02,044 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 10:00:02,045 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 11:00:00 UTC)" executed successfully 2026-10-03 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 12:00:00 UTC)" (scheduled at 2026-10-03 11:00:00+00:00) 2026-10-03 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 11:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 11:00:01,800 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 11:00:01,803 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 11:00:01,806 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 11:00:01,806 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 11:00:01,870 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 11:00:01,923 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 11:00:01,924 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 12:00:00 UTC)" executed successfully 2026-10-03 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 13:00:00 UTC)" (scheduled at 2026-10-03 12:00:00+00:00) 2026-10-03 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 12:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 12:00:03,896 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 12:00:03,898 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 12:00:03,901 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 12:00:03,901 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 12:00:03,949 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 12:00:04,003 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 12:00:04,004 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 13:00:00 UTC)" executed successfully 2026-10-03 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 14:00:00 UTC)" (scheduled at 2026-10-03 13:00:00+00:00) 2026-10-03 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-03 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 13:00:01,375 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 13:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 13:00:01,378 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 13:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 13:00:01,423 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 13:00:01,473 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 13:00:01,473 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 14:00:00 UTC)" executed successfully 2026-10-03 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 15:00:00 UTC)" (scheduled at 2026-10-03 14:00:00+00:00) 2026-10-03 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 14:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 14:00:02,321 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 14:00:02,325 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 14:00:02,328 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 14:00:02,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 14:00:02,397 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 14:00:02,450 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 14:00:02,451 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 15:00:00 UTC)" executed successfully 2026-10-03 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 16:00:00 UTC)" (scheduled at 2026-10-03 15:00:00+00:00) 2026-10-03 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-03 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 15:00:01,650 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 15:00:01,652 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 15:00:01,655 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 15:00:01,656 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 15:00:01,735 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 15:00:01,816 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 15:00:01,817 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 16:00:00 UTC)" executed successfully 2026-10-03 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 17:00:00 UTC)" (scheduled at 2026-10-03 16:00:00+00:00) 2026-10-03 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-03 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 16:00:01,894 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 16:00:01,897 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 16:00:01,900 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 16:00:01,900 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 16:00:01,977 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 16:00:02,047 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 16:00:02,047 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 17:00:00 UTC)" executed successfully 2026-10-03 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 18:00:00 UTC)" (scheduled at 2026-10-03 17:00:00+00:00) 2026-10-03 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-03 17:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 17:00:01,375 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 17:00:01,377 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 17:00:01,380 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 17:00:01,381 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 17:00:01,465 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 17:00:01,512 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 17:00:01,513 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 18:00:00 UTC)" executed successfully 2026-10-03 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 19:00:00 UTC)" (scheduled at 2026-10-03 18:00:00+00:00) 2026-10-03 18:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-03 18:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 18:00:01,215 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 18:00:01,217 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 18:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 18:00:01,220 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 18:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 18:00:01,337 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 18:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 19:00:00 UTC)" executed successfully 2026-10-03 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 20:00:00 UTC)" (scheduled at 2026-10-03 19:00:00+00:00) 2026-10-03 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 19:00:01,869 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 19:00:01,872 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 19:00:01,874 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 19:00:01,875 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 19:00:01,933 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 19:00:01,988 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 19:00:01,988 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 20:00:00 UTC)" executed successfully 2026-10-03 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 21:00:00 UTC)" (scheduled at 2026-10-03 20:00:00+00:00) 2026-10-03 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 20:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 20:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 20:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 20:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 20:00:01,355 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 20:00:01,420 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 20:00:01,421 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 21:00:00 UTC)" executed successfully 2026-10-03 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 22:00:00 UTC)" (scheduled at 2026-10-03 21:00:00+00:00) 2026-10-03 21:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-03 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 21:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 21:00:01,093 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 21:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 21:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 21:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 21:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 21:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 22:00:00 UTC)" executed successfully 2026-10-03 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 23:00:00 UTC)" (scheduled at 2026-10-03 22:00:00+00:00) 2026-10-03 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-03 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 22:00:01,096 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 22:00:01,098 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 22:00:01,100 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 22:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 22:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 22:00:01,188 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 22:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-03 23:00:00 UTC)" executed successfully 2026-10-03 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 00:00:00 UTC)" (scheduled at 2026-10-03 23:00:00+00:00) 2026-10-03 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-03 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-03 23:00:01,165 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-03 23:00:01,166 INFO [fb-sync.worker] Scraped 50 posts 2026-10-03 23:00:01,168 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-03 23:00:01,169 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-03 23:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-03 23:00:01,258 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-03 23:00:01,259 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 00:00:00 UTC)" executed successfully 2026-10-04 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 01:00:00 UTC)" (scheduled at 2026-10-04 00:00:00+00:00) 2026-10-04 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-04 00:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 00:00:01,682 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 00:00:01,685 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 00:00:01,688 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 00:00:01,689 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 00:00:01,770 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 00:00:01,826 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 00:00:01,827 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 01:00:00 UTC)" executed successfully 2026-10-04 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 02:00:00 UTC)" (scheduled at 2026-10-04 01:00:00+00:00) 2026-10-04 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-04 01:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 01:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 01:00:01,211 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 01:00:01,214 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 01:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 01:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 01:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 01:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 02:00:00 UTC)" executed successfully 2026-10-04 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 03:00:00 UTC)" (scheduled at 2026-10-04 02:00:00+00:00) 2026-10-04 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 02:00:01,492 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 02:00:01,493 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 02:00:01,496 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 02:00:01,497 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 02:00:01,569 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 02:00:01,644 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 02:00:01,644 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 03:00:00 UTC)" executed successfully 2026-10-04 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 04:00:00 UTC)" (scheduled at 2026-10-04 03:00:00+00:00) 2026-10-04 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 03:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 03:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 03:00:01,156 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 03:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 03:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 03:00:01,248 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 03:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 04:00:00 UTC)" executed successfully 2026-10-04 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 05:00:00 UTC)" (scheduled at 2026-10-04 04:00:00+00:00) 2026-10-04 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-04 04:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 04:00:01,240 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 04:00:01,242 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 04:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 04:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 04:00:01,293 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 04:00:01,341 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 04:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 05:00:00 UTC)" executed successfully 2026-10-04 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 06:00:00 UTC)" (scheduled at 2026-10-04 05:00:00+00:00) 2026-10-04 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-04 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 05:00:01,743 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 05:00:01,745 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 05:00:01,748 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 05:00:01,749 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 05:00:01,814 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 05:00:01,890 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 05:00:01,890 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 06:00:00 UTC)" executed successfully 2026-10-04 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 07:00:00 UTC)" (scheduled at 2026-10-04 06:00:00+00:00) 2026-10-04 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-04 06:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 06:00:01,847 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 06:00:01,849 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 06:00:01,852 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 06:00:01,852 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 06:00:01,907 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 06:00:01,966 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 06:00:01,966 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 07:00:00 UTC)" executed successfully 2026-10-04 07:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 08:00:00 UTC)" (scheduled at 2026-10-04 07:00:00+00:00) 2026-10-04 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-04 07:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 07:00:01,515 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 07:00:01,515 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 07:00:01,517 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 07:00:01,517 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 07:00:01,570 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 07:00:01,629 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 07:00:01,630 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 08:00:00 UTC)" executed successfully 2026-10-04 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 09:00:00 UTC)" (scheduled at 2026-10-04 08:00:00+00:00) 2026-10-04 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-04 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 08:00:01,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 08:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 08:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 08:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 08:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 08:00:01,267 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 08:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 09:00:00 UTC)" executed successfully 2026-10-04 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 10:00:00 UTC)" (scheduled at 2026-10-04 09:00:00+00:00) 2026-10-04 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-04 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 09:00:01,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 09:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 09:00:01,382 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 09:00:01,383 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 09:00:01,433 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 09:00:01,480 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 09:00:01,480 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 10:00:00 UTC)" executed successfully 2026-10-04 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 11:00:00 UTC)" (scheduled at 2026-10-04 10:00:00+00:00) 2026-10-04 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 10:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 10:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 10:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 10:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 10:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 10:00:01,235 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 10:00:01,235 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 11:00:00 UTC)" executed successfully 2026-10-04 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 12:00:00 UTC)" (scheduled at 2026-10-04 11:00:00+00:00) 2026-10-04 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-04 11:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 11:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 11:00:01,171 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 11:00:01,174 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 11:00:01,175 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 11:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 11:00:01,326 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 11:00:01,326 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 12:00:00 UTC)" executed successfully 2026-10-04 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 13:00:00 UTC)" (scheduled at 2026-10-04 12:00:00+00:00) 2026-10-04 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-04 12:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 12:00:01,085 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 12:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 12:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 12:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 12:00:01,133 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 12:00:01,178 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 12:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 13:00:00 UTC)" executed successfully 2026-10-04 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 14:00:00 UTC)" (scheduled at 2026-10-04 13:00:00+00:00) 2026-10-04 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 13:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 13:00:01,300 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 13:00:01,302 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 13:00:01,304 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 13:00:01,305 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 13:00:01,359 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 13:00:01,413 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 13:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 14:00:00 UTC)" executed successfully 2026-10-04 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 15:00:00 UTC)" (scheduled at 2026-10-04 14:00:00+00:00) 2026-10-04 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-04 14:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 14:00:01,339 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 14:00:01,341 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 14:00:01,344 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 14:00:01,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 14:00:01,391 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 14:00:01,443 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 14:00:01,444 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 15:00:00 UTC)" executed successfully 2026-10-04 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 16:00:00 UTC)" (scheduled at 2026-10-04 15:00:00+00:00) 2026-10-04 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 15:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 15:00:01,243 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 15:00:01,246 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 15:00:01,248 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 15:00:01,248 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 15:00:01,321 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 15:00:01,401 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 15:00:01,401 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 16:00:00 UTC)" executed successfully 2026-10-04 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 17:00:00 UTC)" (scheduled at 2026-10-04 16:00:00+00:00) 2026-10-04 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 16:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 16:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 16:00:01,209 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 16:00:01,215 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 16:00:01,215 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 16:00:01,270 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 16:00:01,345 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 16:00:01,345 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 17:00:00 UTC)" executed successfully 2026-10-04 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 18:00:00 UTC)" (scheduled at 2026-10-04 17:00:00+00:00) 2026-10-04 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-04 17:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 17:00:01,372 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 17:00:01,375 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 17:00:01,379 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 17:00:01,380 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 17:00:01,457 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 17:00:01,536 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 17:00:01,536 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 18:00:00 UTC)" executed successfully 2026-10-04 18:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 19:00:00 UTC)" (scheduled at 2026-10-04 18:00:00+00:00) 2026-10-04 18:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-04 18:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 18:00:01,221 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 18:00:01,223 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 18:00:01,225 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 18:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 18:00:01,271 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 18:00:01,321 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 18:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 19:00:00 UTC)" executed successfully 2026-10-04 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 20:00:00 UTC)" (scheduled at 2026-10-04 19:00:00+00:00) 2026-10-04 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-04 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 19:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 19:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 19:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 19:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 19:00:01,326 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 19:00:01,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 19:00:01,376 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 20:00:00 UTC)" executed successfully 2026-10-04 20:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 21:00:00 UTC)" (scheduled at 2026-10-04 20:00:00+00:00) 2026-10-04 20:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-04 20:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 20:00:01,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 20:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 20:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 20:00:01,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 20:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 20:00:01,233 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 20:00:01,234 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 21:00:00 UTC)" executed successfully 2026-10-04 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 22:00:00 UTC)" (scheduled at 2026-10-04 21:00:00+00:00) 2026-10-04 21:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-04 21:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 21:00:01,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 21:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 21:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 21:00:01,171 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 21:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 21:00:01,256 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 21:00:01,256 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 22:00:00 UTC)" executed successfully 2026-10-04 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 23:00:00 UTC)" (scheduled at 2026-10-04 22:00:00+00:00) 2026-10-04 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-04 22:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 22:00:01,558 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 22:00:01,561 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 22:00:01,564 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 22:00:01,564 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 22:00:01,638 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 22:00:01,717 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 22:00:01,718 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-04 23:00:00 UTC)" executed successfully 2026-10-04 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 00:00:00 UTC)" (scheduled at 2026-10-04 23:00:00+00:00) 2026-10-04 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-04 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-04 23:00:01,569 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-04 23:00:01,571 INFO [fb-sync.worker] Scraped 50 posts 2026-10-04 23:00:01,573 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-04 23:00:01,573 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-04 23:00:01,626 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-04 23:00:01,699 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-04 23:00:01,699 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 00:00:00 UTC)" executed successfully 2026-10-05 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 01:00:00 UTC)" (scheduled at 2026-10-05 00:00:00+00:00) 2026-10-05 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-05 00:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 00:00:01,624 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 00:00:01,626 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 00:00:01,629 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 00:00:01,629 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 00:00:01,691 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 00:00:01,752 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 00:00:01,753 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 01:00:00 UTC)" executed successfully 2026-10-05 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 02:00:00 UTC)" (scheduled at 2026-10-05 01:00:00+00:00) 2026-10-05 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-05 01:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 01:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 01:00:01,126 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 01:00:01,128 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 01:00:01,128 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 01:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 01:00:01,237 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 01:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 02:00:00 UTC)" executed successfully 2026-10-05 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 03:00:00 UTC)" (scheduled at 2026-10-05 02:00:00+00:00) 2026-10-05 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-05 02:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 02:00:01,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 02:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 02:00:01,105 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 02:00:01,105 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 02:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 02:00:01,189 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 02:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 03:00:00 UTC)" executed successfully 2026-10-05 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 04:00:00 UTC)" (scheduled at 2026-10-05 03:00:00+00:00) 2026-10-05 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 03:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 03:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 03:00:01,190 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 03:00:01,194 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 03:00:01,194 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 03:00:01,258 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 03:00:01,321 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 03:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 04:00:00 UTC)" executed successfully 2026-10-05 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 05:00:00 UTC)" (scheduled at 2026-10-05 04:00:00+00:00) 2026-10-05 04:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-05 04:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 04:00:01,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 04:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 04:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 04:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 04:00:01,222 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 04:00:01,294 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 04:00:01,294 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 05:00:00 UTC)" executed successfully 2026-10-05 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 06:00:00 UTC)" (scheduled at 2026-10-05 05:00:00+00:00) 2026-10-05 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-05 05:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 05:00:01,326 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 05:00:01,328 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 05:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 05:00:01,330 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 05:00:01,387 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 05:00:01,448 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 05:00:01,448 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 06:00:00 UTC)" executed successfully 2026-10-05 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 07:00:00 UTC)" (scheduled at 2026-10-05 06:00:00+00:00) 2026-10-05 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 06:00:01,439 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 06:00:01,440 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 06:00:01,443 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 06:00:01,443 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 06:00:01,491 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 06:00:01,542 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 06:00:01,542 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 07:00:00 UTC)" executed successfully 2026-10-05 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 08:00:00 UTC)" (scheduled at 2026-10-05 07:00:00+00:00) 2026-10-05 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-05 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 07:00:01,135 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 07:00:01,137 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 07:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 07:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 07:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 07:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 07:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 08:00:00 UTC)" executed successfully 2026-10-05 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 09:00:00 UTC)" (scheduled at 2026-10-05 08:00:00+00:00) 2026-10-05 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-05 08:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 08:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 08:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 08:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 08:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 08:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 08:00:01,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 08:00:01,320 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 09:00:00 UTC)" executed successfully 2026-10-05 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 10:00:00 UTC)" (scheduled at 2026-10-05 09:00:00+00:00) 2026-10-05 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-05 09:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 09:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 09:00:01,194 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 09:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 09:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 09:00:01,250 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 09:00:01,295 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 09:00:01,296 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 10:00:00 UTC)" executed successfully 2026-10-05 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 11:00:00 UTC)" (scheduled at 2026-10-05 10:00:00+00:00) 2026-10-05 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-05 10:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 10:00:01,520 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 10:00:01,522 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 10:00:01,525 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 10:00:01,525 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 10:00:01,591 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 10:00:01,642 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 10:00:01,643 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 11:00:00 UTC)" executed successfully 2026-10-05 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 12:00:00 UTC)" (scheduled at 2026-10-05 11:00:00+00:00) 2026-10-05 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-05 11:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 11:00:01,367 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 11:00:01,369 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 11:00:01,371 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 11:00:01,372 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 11:00:01,421 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 11:00:01,474 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 11:00:01,474 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 12:00:00 UTC)" executed successfully 2026-10-05 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 13:00:00 UTC)" (scheduled at 2026-10-05 12:00:00+00:00) 2026-10-05 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-05 12:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 12:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 12:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 12:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 12:00:01,171 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 12:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 12:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 12:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 13:00:00 UTC)" executed successfully 2026-10-05 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 14:00:00 UTC)" (scheduled at 2026-10-05 13:00:00+00:00) 2026-10-05 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-05 13:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 13:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 13:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 13:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 13:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 13:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 13:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 13:00:01,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 14:00:00 UTC)" executed successfully 2026-10-05 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 15:00:00 UTC)" (scheduled at 2026-10-05 14:00:00+00:00) 2026-10-05 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 14:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 14:00:01,405 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 14:00:01,407 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 14:00:01,409 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 14:00:01,409 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 14:00:01,457 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 14:00:01,514 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 14:00:01,515 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 15:00:00 UTC)" executed successfully 2026-10-05 15:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 16:00:00 UTC)" (scheduled at 2026-10-05 15:00:00+00:00) 2026-10-05 15:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-05 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 15:00:01,885 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 15:00:01,888 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 15:00:01,890 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 15:00:01,890 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 15:00:01,969 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 15:00:02,057 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 15:00:02,058 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 16:00:00 UTC)" executed successfully 2026-10-05 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 17:00:00 UTC)" (scheduled at 2026-10-05 16:00:00+00:00) 2026-10-05 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-05 16:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 16:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 16:00:01,274 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 16:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 16:00:01,276 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 16:00:01,325 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 16:00:01,377 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 16:00:01,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 17:00:00 UTC)" executed successfully 2026-10-05 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 18:00:00 UTC)" (scheduled at 2026-10-05 17:00:00+00:00) 2026-10-05 17:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-05 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 17:00:01,269 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 17:00:01,270 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 17:00:01,273 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 17:00:01,274 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 17:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 17:00:01,366 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 17:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 18:00:00 UTC)" executed successfully 2026-10-05 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 19:00:00 UTC)" (scheduled at 2026-10-05 18:00:00+00:00) 2026-10-05 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-05 18:00:00,060 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 18:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 18:00:01,231 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 18:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 18:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 18:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 18:00:01,332 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 18:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 19:00:00 UTC)" executed successfully 2026-10-05 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 20:00:00 UTC)" (scheduled at 2026-10-05 19:00:00+00:00) 2026-10-05 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 19:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 19:00:01,337 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 19:00:01,340 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 19:00:01,343 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 19:00:01,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 19:00:01,416 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 19:00:01,496 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 19:00:01,496 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 20:00:00 UTC)" executed successfully 2026-10-05 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 21:00:00 UTC)" (scheduled at 2026-10-05 20:00:00+00:00) 2026-10-05 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-05 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 20:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 20:00:01,112 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 20:00:01,115 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 20:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 20:00:01,168 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 20:00:01,220 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 20:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 21:00:00 UTC)" executed successfully 2026-10-05 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 22:00:00 UTC)" (scheduled at 2026-10-05 21:00:00+00:00) 2026-10-05 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-05 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 21:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 21:00:01,243 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 21:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 21:00:01,246 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 21:00:01,292 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 21:00:01,341 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 21:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 22:00:00 UTC)" executed successfully 2026-10-05 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 23:00:00 UTC)" (scheduled at 2026-10-05 22:00:00+00:00) 2026-10-05 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 22:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 22:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 22:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 22:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 22:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 22:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 22:00:01,232 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-05 23:00:00 UTC)" executed successfully 2026-10-05 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 00:00:00 UTC)" (scheduled at 2026-10-05 23:00:00+00:00) 2026-10-05 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-05 23:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-05 23:00:01,528 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-05 23:00:01,530 INFO [fb-sync.worker] Scraped 50 posts 2026-10-05 23:00:01,533 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-05 23:00:01,534 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-05 23:00:01,607 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-05 23:00:01,678 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-05 23:00:01,678 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 00:00:00 UTC)" executed successfully 2026-10-06 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 01:00:00 UTC)" (scheduled at 2026-10-06 00:00:00+00:00) 2026-10-06 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-06 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 00:00:02,055 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 00:00:02,057 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 00:00:02,060 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 00:00:02,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 00:00:02,124 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 00:00:02,191 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 00:00:02,191 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 01:00:00 UTC)" executed successfully 2026-10-06 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 02:00:00 UTC)" (scheduled at 2026-10-06 01:00:00+00:00) 2026-10-06 01:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-06 01:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 01:00:01,047 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 01:00:01,049 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 01:00:01,052 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 01:00:01,052 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 01:00:01,129 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 01:00:01,195 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 01:00:01,195 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 02:00:00 UTC)" executed successfully 2026-10-06 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 03:00:00 UTC)" (scheduled at 2026-10-06 02:00:00+00:00) 2026-10-06 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-06 02:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 02:00:01,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 02:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 02:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 02:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 02:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 02:00:01,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 02:00:01,203 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 03:00:00 UTC)" executed successfully 2026-10-06 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 04:00:00 UTC)" (scheduled at 2026-10-06 03:00:00+00:00) 2026-10-06 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-06 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 03:00:01,132 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 03:00:01,134 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 03:00:01,137 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 03:00:01,138 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 03:00:01,199 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 03:00:01,252 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 03:00:01,253 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 04:00:00 UTC)" executed successfully 2026-10-06 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 05:00:00 UTC)" (scheduled at 2026-10-06 04:00:00+00:00) 2026-10-06 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-06 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 04:00:02,537 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 04:00:02,537 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 04:00:02,539 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 04:00:02,540 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 04:00:02,590 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 04:00:02,643 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 04:00:02,644 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 05:00:00 UTC)" executed successfully 2026-10-06 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 06:00:00 UTC)" (scheduled at 2026-10-06 05:00:00+00:00) 2026-10-06 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-06 05:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 05:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 05:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 05:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 05:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 05:00:01,210 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 05:00:01,260 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 05:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 06:00:00 UTC)" executed successfully 2026-10-06 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 07:00:00 UTC)" (scheduled at 2026-10-06 06:00:00+00:00) 2026-10-06 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-06 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 06:00:01,776 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 06:00:01,779 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 06:00:01,782 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 06:00:01,783 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 06:00:01,855 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 06:00:01,931 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 06:00:01,931 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 07:00:00 UTC)" executed successfully 2026-10-06 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 08:00:00 UTC)" (scheduled at 2026-10-06 07:00:00+00:00) 2026-10-06 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-06 07:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 07:00:01,184 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 07:00:01,185 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 07:00:01,187 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 07:00:01,187 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 07:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 07:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 07:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 08:00:00 UTC)" executed successfully 2026-10-06 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 09:00:00 UTC)" (scheduled at 2026-10-06 08:00:00+00:00) 2026-10-06 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-06 08:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 08:00:01,333 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 08:00:01,336 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 08:00:01,339 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 08:00:01,339 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 08:00:01,420 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 08:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 08:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 09:00:00 UTC)" executed successfully 2026-10-06 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 10:00:00 UTC)" (scheduled at 2026-10-06 09:00:00+00:00) 2026-10-06 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-06 09:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 09:00:01,493 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 09:00:01,495 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 09:00:01,498 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 09:00:01,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 09:00:01,570 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 09:00:01,627 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 09:00:01,627 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 10:00:00 UTC)" executed successfully 2026-10-06 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 11:00:00 UTC)" (scheduled at 2026-10-06 10:00:00+00:00) 2026-10-06 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-06 10:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 10:00:01,240 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 10:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 10:00:01,243 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 10:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 10:00:01,290 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 10:00:01,340 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 10:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 11:00:00 UTC)" executed successfully 2026-10-06 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 12:00:00 UTC)" (scheduled at 2026-10-06 11:00:00+00:00) 2026-10-06 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-06 11:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 11:00:01,501 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 11:00:01,502 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 11:00:01,505 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 11:00:01,506 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 11:00:01,574 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 11:00:01,648 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 11:00:01,649 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 12:00:00 UTC)" executed successfully 2026-10-06 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 13:00:00 UTC)" (scheduled at 2026-10-06 12:00:00+00:00) 2026-10-06 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-06 12:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 12:00:01,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 12:00:01,222 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 12:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 12:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 12:00:01,278 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 12:00:01,331 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 12:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 13:00:00 UTC)" executed successfully 2026-10-06 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 14:00:00 UTC)" (scheduled at 2026-10-06 13:00:00+00:00) 2026-10-06 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-06 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 13:00:01,566 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 13:00:01,568 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 13:00:01,570 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 13:00:01,570 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 13:00:01,622 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 13:00:01,671 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 13:00:01,671 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 14:00:00 UTC)" executed successfully 2026-10-06 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 15:00:00 UTC)" (scheduled at 2026-10-06 14:00:00+00:00) 2026-10-06 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-06 14:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 14:00:01,172 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 14:00:01,174 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 14:00:01,176 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 14:00:01,177 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 14:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 14:00:01,274 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 14:00:01,274 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 15:00:00 UTC)" executed successfully 2026-10-06 15:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 16:00:00 UTC)" (scheduled at 2026-10-06 15:00:00+00:00) 2026-10-06 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-06 15:00:00,055 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 15:00:01,591 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 15:00:01,593 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 15:00:01,595 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 15:00:01,595 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 15:00:01,667 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 15:00:01,730 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 15:00:01,730 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 16:00:00 UTC)" executed successfully 2026-10-06 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 17:00:00 UTC)" (scheduled at 2026-10-06 16:00:00+00:00) 2026-10-06 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-06 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 16:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 16:00:01,421 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 16:00:01,423 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 16:00:01,423 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 16:00:01,479 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 16:00:01,539 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 16:00:01,539 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 17:00:00 UTC)" executed successfully 2026-10-06 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 18:00:00 UTC)" (scheduled at 2026-10-06 17:00:00+00:00) 2026-10-06 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-06 17:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 17:00:01,756 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 17:00:01,757 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 17:00:01,759 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 17:00:01,760 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 17:00:01,824 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 17:00:01,893 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 17:00:01,894 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 18:00:00 UTC)" executed successfully 2026-10-06 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 19:00:00 UTC)" (scheduled at 2026-10-06 18:00:00+00:00) 2026-10-06 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-06 18:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 18:00:01,330 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 18:00:01,333 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 18:00:01,336 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 18:00:01,337 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 18:00:01,413 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 18:00:01,491 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 18:00:01,491 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 19:00:00 UTC)" executed successfully 2026-10-06 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 20:00:00 UTC)" (scheduled at 2026-10-06 19:00:00+00:00) 2026-10-06 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-06 19:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 19:00:02,755 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 19:00:02,757 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 19:00:02,759 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 19:00:02,760 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 19:00:02,809 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 19:00:02,862 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 19:00:02,862 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 20:00:00 UTC)" executed successfully 2026-10-06 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 21:00:00 UTC)" (scheduled at 2026-10-06 20:00:00+00:00) 2026-10-06 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-06 20:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 20:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 20:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 20:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 20:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 20:00:01,195 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 20:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 20:00:01,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 21:00:00 UTC)" executed successfully 2026-10-06 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 22:00:00 UTC)" (scheduled at 2026-10-06 21:00:00+00:00) 2026-10-06 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-06 21:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 21:00:01,811 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 21:00:01,813 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 21:00:01,816 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 21:00:01,817 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 21:00:01,875 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 21:00:01,933 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 21:00:01,933 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 22:00:00 UTC)" executed successfully 2026-10-06 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 23:00:00 UTC)" (scheduled at 2026-10-06 22:00:00+00:00) 2026-10-06 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-06 22:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 22:00:01,327 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 22:00:01,329 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 22:00:01,331 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 22:00:01,332 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 22:00:01,391 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 22:00:01,469 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 22:00:01,469 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-06 23:00:00 UTC)" executed successfully 2026-10-06 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 00:00:00 UTC)" (scheduled at 2026-10-06 23:00:00+00:00) 2026-10-06 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-06 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-06 23:00:01,058 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-06 23:00:01,060 INFO [fb-sync.worker] Scraped 50 posts 2026-10-06 23:00:01,062 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-06 23:00:01,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-06 23:00:01,111 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-06 23:00:01,166 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-06 23:00:01,166 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 00:00:00 UTC)" executed successfully 2026-10-07 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 01:00:00 UTC)" (scheduled at 2026-10-07 00:00:00+00:00) 2026-10-07 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-07 00:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 00:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 00:00:01,055 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 00:00:01,058 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 00:00:01,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 00:00:01,117 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 00:00:01,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 00:00:01,185 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 01:00:00 UTC)" executed successfully 2026-10-07 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 02:00:00 UTC)" (scheduled at 2026-10-07 01:00:00+00:00) 2026-10-07 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-07 01:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 01:00:01,045 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 01:00:01,047 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 01:00:01,049 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 01:00:01,049 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 01:00:01,104 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 01:00:01,167 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 01:00:01,168 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 02:00:00 UTC)" executed successfully 2026-10-07 02:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 03:00:00 UTC)" (scheduled at 2026-10-07 02:00:00+00:00) 2026-10-07 02:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-07 02:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 02:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 02:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 02:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 02:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 02:00:01,347 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 02:00:01,421 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 02:00:01,421 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 03:00:00 UTC)" executed successfully 2026-10-07 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 04:00:00 UTC)" (scheduled at 2026-10-07 03:00:00+00:00) 2026-10-07 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-07 03:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 03:00:02,961 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 03:00:02,963 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 03:00:02,965 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 03:00:02,966 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 03:00:03,030 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 03:00:03,099 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 03:00:03,099 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 04:00:00 UTC)" executed successfully 2026-10-07 04:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 05:00:00 UTC)" (scheduled at 2026-10-07 04:00:00+00:00) 2026-10-07 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-07 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 04:00:01,264 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 04:00:01,266 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 04:00:01,269 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 04:00:01,269 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 04:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 04:00:01,417 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 04:00:01,417 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 05:00:00 UTC)" executed successfully 2026-10-07 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 06:00:00 UTC)" (scheduled at 2026-10-07 05:00:00+00:00) 2026-10-07 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-07 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 05:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 05:00:01,265 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 05:00:01,268 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 05:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 05:00:01,319 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 05:00:01,372 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 05:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 06:00:00 UTC)" executed successfully 2026-10-07 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 07:00:00 UTC)" (scheduled at 2026-10-07 06:00:00+00:00) 2026-10-07 06:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-07 06:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 06:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 06:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 06:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 06:00:01,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 06:00:01,270 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 06:00:01,332 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 06:00:01,332 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 07:00:00 UTC)" executed successfully 2026-10-07 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 08:00:00 UTC)" (scheduled at 2026-10-07 07:00:00+00:00) 2026-10-07 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 07:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 07:00:01,211 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 07:00:01,214 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 07:00:01,217 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 07:00:01,218 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 07:00:01,293 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 07:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 07:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 08:00:00 UTC)" executed successfully 2026-10-07 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 09:00:00 UTC)" (scheduled at 2026-10-07 08:00:00+00:00) 2026-10-07 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 08:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 08:00:02,043 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 08:00:02,046 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 08:00:02,049 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 08:00:02,049 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 08:00:02,122 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 08:00:02,200 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 08:00:02,201 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 09:00:00 UTC)" executed successfully 2026-10-07 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 10:00:00 UTC)" (scheduled at 2026-10-07 09:00:00+00:00) 2026-10-07 09:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-07 09:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 09:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 09:00:01,257 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 09:00:01,260 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 09:00:01,260 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 09:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 09:00:01,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 09:00:01,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 10:00:00 UTC)" executed successfully 2026-10-07 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 11:00:00 UTC)" (scheduled at 2026-10-07 10:00:00+00:00) 2026-10-07 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 10:00:01,269 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 10:00:01,272 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 10:00:01,275 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 10:00:01,275 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 10:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 10:00:01,400 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 10:00:01,401 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 11:00:00 UTC)" executed successfully 2026-10-07 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 12:00:00 UTC)" (scheduled at 2026-10-07 11:00:00+00:00) 2026-10-07 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-07 11:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 11:00:01,955 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 11:00:01,958 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 11:00:01,962 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 11:00:01,962 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 11:00:02,033 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 11:00:02,096 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 11:00:02,097 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 12:00:00 UTC)" executed successfully 2026-10-07 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 13:00:00 UTC)" (scheduled at 2026-10-07 12:00:00+00:00) 2026-10-07 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-07 12:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 12:00:01,392 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 12:00:01,394 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 12:00:01,396 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 12:00:01,396 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 12:00:01,457 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 12:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 12:00:01,512 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 13:00:00 UTC)" executed successfully 2026-10-07 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 14:00:00 UTC)" (scheduled at 2026-10-07 13:00:00+00:00) 2026-10-07 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-07 13:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 13:00:02,407 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 13:00:02,409 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 13:00:02,412 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 13:00:02,412 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 13:00:02,476 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 13:00:02,536 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 13:00:02,537 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 14:00:00 UTC)" executed successfully 2026-10-07 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 15:00:00 UTC)" (scheduled at 2026-10-07 14:00:00+00:00) 2026-10-07 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 14:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 14:00:03,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 14:00:03,169 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 14:00:03,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 14:00:03,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 14:00:03,214 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 14:00:03,260 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 14:00:03,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 15:00:00 UTC)" executed successfully 2026-10-07 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 16:00:00 UTC)" (scheduled at 2026-10-07 15:00:00+00:00) 2026-10-07 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-07 15:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 15:00:02,468 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 15:00:02,469 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 15:00:02,472 INFO [fb-sync.worker] New articles: 2 | skips: {'duplicate_exact': 48} 2026-10-07 15:00:02,472 INFO [fb-sync.worker] Publishing [1/2] HSBC spouští úvěry malým a středním firmám s úročením p... 2026-10-07 15:00:02,503 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1849 content_type=home.BlogPostPage path=/home/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:02,645 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1849 revision_id=3685 2026-10-07 15:00:02,733 INFO [home.signals] Starting auto-translation for blog post: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. (ID: 1849) 2026-10-07 15:00:02,736 INFO [home.signals] Creating new en translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:06,720 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:09,449 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:09,630 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1850 content_type=home.BlogPostPage path=/home-1/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:09,650 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1850 revision_id=3686 2026-10-07 15:00:09,658 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1850 from=1849 2026-10-07 15:00:09,820 INFO [wagtail] Page edited: "HSBC launches loans for small and medium-sized companies with interest rates based on their ESG rating." id=1850 revision_id=3687 2026-10-07 15:00:09,868 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC launches loans for small and medium-sized companies with interest rates based on their ESG rating.' id=1850 2026-10-07 15:00:09,882 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:09,990 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC launches loans for small and medium-sized companies with interest rates based on their ESG rating. (en) 2026-10-07 15:00:10,011 INFO [wagtail] Published: "HSBC launches loans for small and medium-sized companies with interest rates based on their ESG rating." pk=1850 revision_id=3687 2026-10-07 15:00:10,024 INFO [home.signals] ✓ Successfully processed en: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:10,029 INFO [home.signals] Creating new de translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:14,366 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:17,117 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:17,290 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1851 content_type=home.BlogPostPage path=/startseite/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:17,308 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1851 revision_id=3688 2026-10-07 15:00:17,314 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1851 from=1849 2026-10-07 15:00:17,465 INFO [wagtail] Page edited: "HSBC startet Kredite für kleine und mittlere Unternehmen mit einer Verzinsung nach ihrem ESG-Rating." id=1851 revision_id=3689 2026-10-07 15:00:17,509 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC startet Kredite für kleine und mittlere Unternehmen mit einer Verzinsung nach ihrem ESG-Rating.' id=1851 2026-10-07 15:00:17,522 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:17,623 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC startet Kredite für kleine und mittlere Unternehmen mit einer Verzinsung nach ihrem ESG-Rating. (de) 2026-10-07 15:00:17,634 INFO [wagtail] Published: "HSBC startet Kredite für kleine und mittlere Unternehmen mit einer Verzinsung nach ihrem ESG-Rating." pk=1851 revision_id=3689 2026-10-07 15:00:17,641 INFO [home.signals] ✓ Successfully processed de: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:17,644 INFO [home.signals] Creating new sk translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:24,501 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:27,659 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:27,873 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1852 content_type=home.BlogPostPage path=/domov/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:27,894 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1852 revision_id=3690 2026-10-07 15:00:27,902 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1852 from=1849 2026-10-07 15:00:28,055 INFO [wagtail] Page edited: "HSBC spúšťa úvery malým a stredným firmám s úročením podľa ich ESG ratingu." id=1852 revision_id=3691 2026-10-07 15:00:28,086 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC spúšťa úvery malým a stredným firmám s úročením podľa ich ESG ratingu.' id=1852 2026-10-07 15:00:28,095 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:28,182 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC spúšťa úvery malým a stredným firmám s úročením podľa ich ESG ratingu. (sk) 2026-10-07 15:00:28,191 INFO [wagtail] Published: "HSBC spúšťa úvery malým a stredným firmám s úročením podľa ich ESG ratingu." pk=1852 revision_id=3691 2026-10-07 15:00:28,208 INFO [home.signals] ✓ Successfully processed sk: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:28,213 INFO [home.signals] Creating new zh-Hans translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:33,544 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:35,382 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:35,529 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1853 content_type=home.BlogPostPage path=/zh-hans/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:35,542 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1853 revision_id=3692 2026-10-07 15:00:35,548 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1853 from=1849 2026-10-07 15:00:35,711 INFO [wagtail] Page edited: "汇丰银行推出针对中小企业的贷款,利率依据其 ESG 评级。" id=1853 revision_id=3693 2026-10-07 15:00:35,752 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '汇丰银行推出针对中小企业的贷款,利率依据其 ESG 评级。' id=1853 2026-10-07 15:00:35,763 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:35,874 INFO [home.signals] Skipping auto-translation for non-Czech page: 汇丰银行推出针对中小企业的贷款,利率依据其 ESG 评级。 (zh-Hans) 2026-10-07 15:00:35,885 INFO [wagtail] Published: "汇丰银行推出针对中小企业的贷款,利率依据其 ESG 评级。" pk=1853 revision_id=3693 2026-10-07 15:00:35,893 INFO [home.signals] ✓ Successfully processed zh-Hans: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:35,896 INFO [home.signals] Creating new tr translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:42,627 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:45,173 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:45,322 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1854 content_type=home.BlogPostPage path=/anasayfa/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:45,340 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1854 revision_id=3694 2026-10-07 15:00:45,350 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1854 from=1849 2026-10-07 15:00:45,538 INFO [wagtail] Page edited: "HSBC, küçük ve orta ölçekli şirketlere ESG derecelendirmelerine göre faiz oranı belirlenen krediler sunuyor." id=1854 revision_id=3695 2026-10-07 15:00:45,595 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC, küçük ve orta ölçekli şirketlere ESG derecelendirmelerine göre faiz oranı belirlenen krediler sunuyor.' id=1854 2026-10-07 15:00:45,609 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:45,751 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC, küçük ve orta ölçekli şirketlere ESG derecelendirmelerine göre faiz oranı belirlenen krediler sunuyor. (tr) 2026-10-07 15:00:45,773 INFO [wagtail] Published: "HSBC, küçük ve orta ölçekli şirketlere ESG derecelendirmelerine göre faiz oranı belirlenen krediler sunuyor." pk=1854 revision_id=3695 2026-10-07 15:00:45,786 INFO [home.signals] ✓ Successfully processed tr: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:45,791 INFO [home.signals] Creating new vi translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:51,187 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:53,352 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:00:53,511 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1855 content_type=home.BlogPostPage path=/trang-chu/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:00:53,528 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1855 revision_id=3696 2026-10-07 15:00:53,536 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1855 from=1849 2026-10-07 15:00:53,670 INFO [wagtail] Page edited: "HSBC ra mắt các khoản vay cho các doanh nghiệp nhỏ và vừa với lãi suất dựa trên xếp hạng ESG của họ." id=1855 revision_id=3697 2026-10-07 15:00:53,703 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC ra mắt các khoản vay cho các doanh nghiệp nhỏ và vừa với lãi suất dựa trên xếp hạng ESG của họ.' id=1855 2026-10-07 15:00:53,715 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:00:53,821 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC ra mắt các khoản vay cho các doanh nghiệp nhỏ và vừa với lãi suất dựa trên xếp hạng ESG của họ. (vi) 2026-10-07 15:00:53,834 INFO [wagtail] Published: "HSBC ra mắt các khoản vay cho các doanh nghiệp nhỏ và vừa với lãi suất dựa trên xếp hạng ESG của họ." pk=1855 revision_id=3697 2026-10-07 15:00:53,841 INFO [home.signals] ✓ Successfully processed vi: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:53,845 INFO [home.signals] Creating new hi translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:00:59,545 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:03,972 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:04,282 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1856 content_type=home.BlogPostPage path=/hi/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:01:04,295 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1856 revision_id=3698 2026-10-07 15:01:04,302 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1856 from=1849 2026-10-07 15:01:04,465 INFO [wagtail] Page edited: "HSBC छोटे और मध्यम आकार के व्यवसायों को उनके ESG रेटिंग के आधार पर ब्याज दर के साथ ऋण प्रदान कर रहा है।" id=1856 revision_id=3699 2026-10-07 15:01:04,505 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC छोटे और मध्यम आकार के व्यवसायों को उनके ESG रेटिंग के आधार पर ब्याज दर के साथ ऋण प्रदान कर रहा है।' id=1856 2026-10-07 15:01:04,517 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:01:04,654 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC छोटे और मध्यम आकार के व्यवसायों को उनके ESG रेटिंग के आधार पर ब्याज दर के साथ ऋण प्रदान कर रहा है। (hi) 2026-10-07 15:01:04,673 INFO [wagtail] Published: "HSBC छोटे और मध्यम आकार के व्यवसायों को उनके ESG रेटिंग के आधार पर ब्याज दर के साथ ऋण प्रदान कर रहा है।" pk=1856 revision_id=3699 2026-10-07 15:01:04,685 INFO [home.signals] ✓ Successfully processed hi: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:01:04,689 INFO [home.signals] Creating new fr translation for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:01:10,604 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:13,542 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:13,696 INFO [wagtail] Page created: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1857 content_type=home.BlogPostPage path=/home-fr/blog/hsbc-spousti-uvery-malym-a-strednim-firmam-s-urocenim-podle-jejich-esg-ratingu/ 2026-10-07 15:01:13,721 INFO [wagtail] Page edited: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1857 revision_id=3700 2026-10-07 15:01:13,732 INFO [wagtail] Page copied: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." id=1857 from=1849 2026-10-07 15:01:13,887 INFO [wagtail] Page edited: "HSBC lance des prêts aux petites et moyennes entreprises avec un taux d'intérêt basé sur leur notation ESG." id=1857 revision_id=3701 2026-10-07 15:01:13,920 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'HSBC lance des prêts aux petites et moyennes entreprises avec un taux d'intérêt basé sur leur notation ESG.' id=1857 2026-10-07 15:01:13,933 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-07 15:01:14,072 INFO [home.signals] Skipping auto-translation for non-Czech page: HSBC lance des prêts aux petites et moyennes entreprises avec un taux d'intérêt basé sur leur notation ESG. (fr) 2026-10-07 15:01:14,089 INFO [wagtail] Published: "HSBC lance des prêts aux petites et moyennes entreprises avec un taux d'intérêt basé sur leur notation ESG." pk=1857 revision_id=3701 2026-10-07 15:01:14,102 INFO [home.signals] ✓ Successfully processed fr: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:01:14,102 INFO [home.signals] Completed auto-translation workflow for: HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu. 2026-10-07 15:01:14,120 INFO [wagtail] Published: "HSBC spouští úvěry malým a středním firmám s úročením podle jejich ESG ratingu." pk=1849 revision_id=3685 2026-10-07 15:01:19,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 15:01:21,392 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:21,395 INFO [fb-sync.free_images] Photo queries: ['HSBC headquarters London', 'European small business storefront', 'Solar panel array field', 'Wind turbines on hill'] 2026-10-07 15:01:27,483 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:29,621 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:32,047 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:35,803 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:38,585 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-07 15:01:38,587 INFO [fb-sync.free_images] Image chosen: pexels "View of HSBC and Citi buildings in London's Canary Wharf bus" (Pexels Licence) 2026-10-07 15:01:39,390 INFO [fb-sync.worker] Image added ID=1849: stock:pexels (Pexels Licence) 2026-10-07 15:01:40,452 INFO [fb-sync] Sync done: 1 new posts in 100s (source=graph_api, scraped=50, skips={'duplicate_exact': 48, 'empty_body': 1}) 2026-10-07 15:01:40,500 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 15:01:40,500 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 16:00:00 UTC)" executed successfully 2026-10-07 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 17:00:00 UTC)" (scheduled at 2026-10-07 16:00:00+00:00) 2026-10-07 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-07 16:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 16:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 16:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 16:00:01,240 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 16:00:01,240 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 16:00:01,298 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 16:00:01,347 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 16:00:01,348 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 17:00:00 UTC)" executed successfully 2026-10-07 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 18:00:00 UTC)" (scheduled at 2026-10-07 17:00:00+00:00) 2026-10-07 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-07 17:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 17:00:01,879 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 17:00:01,880 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 17:00:01,883 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 17:00:01,883 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 17:00:01,943 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 17:00:02,004 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 17:00:02,004 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 18:00:00 UTC)" executed successfully 2026-10-07 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 19:00:00 UTC)" (scheduled at 2026-10-07 18:00:00+00:00) 2026-10-07 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-07 18:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 18:00:02,007 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 18:00:02,012 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 18:00:02,015 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 18:00:02,016 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 18:00:02,094 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 18:00:02,174 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 18:00:02,174 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 19:00:00 UTC)" executed successfully 2026-10-07 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 20:00:00 UTC)" (scheduled at 2026-10-07 19:00:00+00:00) 2026-10-07 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-07 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 19:00:02,804 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 19:00:02,806 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 19:00:02,810 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 19:00:02,810 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 19:00:02,874 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 19:00:02,928 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 19:00:02,929 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 20:00:00 UTC)" executed successfully 2026-10-07 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 21:00:00 UTC)" (scheduled at 2026-10-07 20:00:00+00:00) 2026-10-07 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-07 20:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 20:00:01,486 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 20:00:01,488 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 20:00:01,491 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 20:00:01,491 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 20:00:01,562 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 20:00:01,612 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 20:00:01,612 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 21:00:00 UTC)" executed successfully 2026-10-07 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 22:00:00 UTC)" (scheduled at 2026-10-07 21:00:00+00:00) 2026-10-07 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 21:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 21:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 21:00:01,218 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 21:00:01,221 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 21:00:01,222 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 21:00:01,299 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 21:00:01,380 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 21:00:01,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 22:00:00 UTC)" executed successfully 2026-10-07 22:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 23:00:00 UTC)" (scheduled at 2026-10-07 22:00:00+00:00) 2026-10-07 22:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-07 22:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 22:00:01,807 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 22:00:01,809 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 22:00:01,813 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 22:00:01,813 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 22:00:01,870 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 22:00:01,926 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 22:00:01,927 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-07 23:00:00 UTC)" executed successfully 2026-10-07 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 00:00:00 UTC)" (scheduled at 2026-10-07 23:00:00+00:00) 2026-10-07 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-07 23:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-07 23:00:00,979 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-07 23:00:00,981 INFO [fb-sync.worker] Scraped 50 posts 2026-10-07 23:00:00,983 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-07 23:00:00,983 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-07 23:00:01,033 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-07 23:00:01,080 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-07 23:00:01,081 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 00:00:00 UTC)" executed successfully 2026-10-08 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 01:00:00 UTC)" (scheduled at 2026-10-08 00:00:00+00:00) 2026-10-08 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-08 00:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 00:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 00:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 00:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 00:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 00:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 00:00:01,315 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 00:00:01,316 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 01:00:00 UTC)" executed successfully 2026-10-08 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 02:00:00 UTC)" (scheduled at 2026-10-08 01:00:00+00:00) 2026-10-08 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-08 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 01:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 01:00:01,098 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 01:00:01,100 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 01:00:01,100 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 01:00:01,170 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 01:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 01:00:01,240 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 02:00:00 UTC)" executed successfully 2026-10-08 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 03:00:00 UTC)" (scheduled at 2026-10-08 02:00:00+00:00) 2026-10-08 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-08 02:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 02:00:02,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 02:00:02,375 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 02:00:02,377 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 02:00:02,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 02:00:02,431 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 02:00:02,491 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 02:00:02,491 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 03:00:00 UTC)" executed successfully 2026-10-08 03:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 04:00:00 UTC)" (scheduled at 2026-10-08 03:00:00+00:00) 2026-10-08 03:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-08 03:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 03:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 03:00:01,169 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 03:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 03:00:01,172 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 03:00:01,237 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 03:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 03:00:01,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 04:00:00 UTC)" executed successfully 2026-10-08 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 05:00:00 UTC)" (scheduled at 2026-10-08 04:00:00+00:00) 2026-10-08 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-08 04:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 04:00:01,468 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 04:00:01,470 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 04:00:01,473 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 04:00:01,473 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 04:00:01,518 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 04:00:01,565 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 04:00:01,565 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 05:00:00 UTC)" executed successfully 2026-10-08 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 06:00:00 UTC)" (scheduled at 2026-10-08 05:00:00+00:00) 2026-10-08 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-08 05:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 05:00:01,656 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 05:00:01,658 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 05:00:01,660 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 05:00:01,660 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 05:00:01,721 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 05:00:01,804 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 05:00:01,805 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 06:00:00 UTC)" executed successfully 2026-10-08 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 07:00:00 UTC)" (scheduled at 2026-10-08 06:00:00+00:00) 2026-10-08 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-08 06:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 06:00:01,375 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 06:00:01,379 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 06:00:01,382 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 06:00:01,382 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 06:00:01,467 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 06:00:01,525 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 06:00:01,525 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 07:00:00 UTC)" executed successfully 2026-10-08 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 08:00:00 UTC)" (scheduled at 2026-10-08 07:00:00+00:00) 2026-10-08 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-08 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 07:00:01,261 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 07:00:01,263 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 07:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 07:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 07:00:01,316 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 07:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 07:00:01,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 08:00:00 UTC)" executed successfully 2026-10-08 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 09:00:00 UTC)" (scheduled at 2026-10-08 08:00:00+00:00) 2026-10-08 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-08 08:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 08:00:01,207 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 08:00:01,210 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 08:00:01,213 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 08:00:01,213 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 08:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 08:00:01,312 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 08:00:01,312 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 09:00:00 UTC)" executed successfully 2026-10-08 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 10:00:00 UTC)" (scheduled at 2026-10-08 09:00:00+00:00) 2026-10-08 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-08 09:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 09:00:02,155 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 09:00:02,158 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 09:00:02,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 09:00:02,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 09:00:02,226 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 09:00:02,302 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 09:00:02,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 10:00:00 UTC)" executed successfully 2026-10-08 10:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 11:00:00 UTC)" (scheduled at 2026-10-08 10:00:00+00:00) 2026-10-08 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-08 10:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 10:00:01,500 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 10:00:01,502 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 10:00:01,504 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 10:00:01,504 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 10:00:01,549 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 10:00:01,616 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 10:00:01,616 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 11:00:00 UTC)" executed successfully 2026-10-08 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 12:00:00 UTC)" (scheduled at 2026-10-08 11:00:00+00:00) 2026-10-08 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-08 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 11:00:01,552 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 11:00:01,555 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 11:00:01,557 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 11:00:01,558 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 11:00:01,608 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 11:00:01,658 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 11:00:01,658 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 12:00:00 UTC)" executed successfully 2026-10-08 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 13:00:00 UTC)" (scheduled at 2026-10-08 12:00:00+00:00) 2026-10-08 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-08 12:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 12:00:01,416 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 12:00:01,418 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 12:00:01,421 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 12:00:01,421 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 12:00:01,493 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 12:00:01,546 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 12:00:01,547 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 13:00:00 UTC)" executed successfully 2026-10-08 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 14:00:00 UTC)" (scheduled at 2026-10-08 13:00:00+00:00) 2026-10-08 13:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-08 13:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 13:00:01,384 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 13:00:01,386 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 13:00:01,388 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 13:00:01,389 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 13:00:01,451 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 13:00:01,530 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 13:00:01,530 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 14:00:00 UTC)" executed successfully 2026-10-08 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 15:00:00 UTC)" (scheduled at 2026-10-08 14:00:00+00:00) 2026-10-08 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-08 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 14:00:01,496 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 14:00:01,498 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 14:00:01,500 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 14:00:01,500 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 14:00:01,564 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 14:00:01,640 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 14:00:01,641 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 15:00:00 UTC)" executed successfully 2026-10-08 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 16:00:00 UTC)" (scheduled at 2026-10-08 15:00:00+00:00) 2026-10-08 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-08 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 15:00:01,272 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 15:00:01,275 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 15:00:01,278 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 15:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 15:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 15:00:01,431 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 15:00:01,432 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 16:00:00 UTC)" executed successfully 2026-10-08 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 17:00:00 UTC)" (scheduled at 2026-10-08 16:00:00+00:00) 2026-10-08 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-08 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 16:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 16:00:01,283 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 16:00:01,285 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 16:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 16:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 16:00:01,401 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 16:00:01,402 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 17:00:00 UTC)" executed successfully 2026-10-08 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 18:00:00 UTC)" (scheduled at 2026-10-08 17:00:00+00:00) 2026-10-08 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-08 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 17:00:01,528 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 17:00:01,529 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 17:00:01,531 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 17:00:01,532 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 17:00:01,577 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 17:00:01,630 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 17:00:01,630 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 18:00:00 UTC)" executed successfully 2026-10-08 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 19:00:00 UTC)" (scheduled at 2026-10-08 18:00:00+00:00) 2026-10-08 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-08 18:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 18:00:01,117 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 18:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 18:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 18:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 18:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 18:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 18:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 19:00:00 UTC)" executed successfully 2026-10-08 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 20:00:00 UTC)" (scheduled at 2026-10-08 19:00:00+00:00) 2026-10-08 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-08 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 19:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 19:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 19:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 19:00:01,132 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 19:00:01,201 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 19:00:01,257 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 19:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 20:00:00 UTC)" executed successfully 2026-10-08 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 21:00:00 UTC)" (scheduled at 2026-10-08 20:00:00+00:00) 2026-10-08 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-08 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 20:00:01,706 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 20:00:01,708 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 20:00:01,711 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 20:00:01,711 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 20:00:01,776 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 20:00:01,845 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 20:00:01,846 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 21:00:00 UTC)" executed successfully 2026-10-08 21:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 22:00:00 UTC)" (scheduled at 2026-10-08 21:00:00+00:00) 2026-10-08 21:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-08 21:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 21:00:01,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 21:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 21:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 21:00:01,276 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 21:00:01,344 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 21:00:01,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 21:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 22:00:00 UTC)" executed successfully 2026-10-08 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 23:00:00 UTC)" (scheduled at 2026-10-08 22:00:00+00:00) 2026-10-08 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-08 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 22:00:01,101 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 22:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 22:00:01,105 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 22:00:01,105 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 22:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 22:00:01,219 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 22:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-08 23:00:00 UTC)" executed successfully 2026-10-08 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 00:00:00 UTC)" (scheduled at 2026-10-08 23:00:00+00:00) 2026-10-08 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-08 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-08 23:00:01,783 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-08 23:00:01,784 INFO [fb-sync.worker] Scraped 50 posts 2026-10-08 23:00:01,789 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-08 23:00:01,789 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-08 23:00:01,847 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-08 23:00:01,915 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-08 23:00:01,916 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 00:00:00 UTC)" executed successfully 2026-10-09 00:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 01:00:00 UTC)" (scheduled at 2026-10-09 00:00:00+00:00) 2026-10-09 00:00:00,004 INFO [fb-sync] Starting FB sync... 2026-10-09 00:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 00:00:00,998 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 00:00:01,000 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 00:00:01,003 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 00:00:01,003 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 00:00:01,071 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 00:00:01,147 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 00:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 01:00:00 UTC)" executed successfully 2026-10-09 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 02:00:00 UTC)" (scheduled at 2026-10-09 01:00:00+00:00) 2026-10-09 01:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-09 01:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 01:00:01,063 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 01:00:01,065 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 01:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 01:00:01,067 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 01:00:01,128 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 01:00:01,177 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 01:00:01,177 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 02:00:00 UTC)" executed successfully 2026-10-09 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 03:00:00 UTC)" (scheduled at 2026-10-09 02:00:00+00:00) 2026-10-09 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-09 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 02:00:02,071 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 02:00:02,073 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 02:00:02,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 02:00:02,076 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 02:00:02,137 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 02:00:02,200 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 02:00:02,200 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 03:00:00 UTC)" executed successfully 2026-10-09 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 04:00:00 UTC)" (scheduled at 2026-10-09 03:00:00+00:00) 2026-10-09 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-09 03:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 03:00:01,232 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 03:00:01,235 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 03:00:01,238 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 03:00:01,238 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 03:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 03:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 03:00:01,373 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 04:00:00 UTC)" executed successfully 2026-10-09 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 05:00:00 UTC)" (scheduled at 2026-10-09 04:00:00+00:00) 2026-10-09 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-09 04:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 04:00:01,774 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 04:00:01,777 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 04:00:01,780 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 04:00:01,780 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 04:00:01,848 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 04:00:01,922 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 04:00:01,922 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 05:00:00 UTC)" executed successfully 2026-10-09 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 06:00:00 UTC)" (scheduled at 2026-10-09 05:00:00+00:00) 2026-10-09 05:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-09 05:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 05:00:01,805 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 05:00:01,807 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 05:00:01,809 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 05:00:01,809 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 05:00:01,859 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 05:00:01,919 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 05:00:01,919 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 06:00:00 UTC)" executed successfully 2026-10-09 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 07:00:00 UTC)" (scheduled at 2026-10-09 06:00:00+00:00) 2026-10-09 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-09 06:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 06:00:01,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 06:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 06:00:01,104 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 06:00:01,104 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 06:00:01,148 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 06:00:01,209 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 06:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 07:00:00 UTC)" executed successfully 2026-10-09 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 08:00:00 UTC)" (scheduled at 2026-10-09 07:00:00+00:00) 2026-10-09 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-09 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 07:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 07:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 07:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 07:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 07:00:01,286 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 07:00:01,359 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 07:00:01,360 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 08:00:00 UTC)" executed successfully 2026-10-09 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 09:00:00 UTC)" (scheduled at 2026-10-09 08:00:00+00:00) 2026-10-09 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-09 08:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 08:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 08:00:01,024 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 08:00:01,029 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 08:00:01,029 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 08:00:01,089 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 08:00:01,161 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 08:00:01,161 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 09:00:00 UTC)" executed successfully 2026-10-09 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 10:00:00 UTC)" (scheduled at 2026-10-09 09:00:00+00:00) 2026-10-09 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-09 09:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 09:00:01,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 09:00:01,366 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 09:00:01,368 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 09:00:01,368 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 09:00:01,439 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 09:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 09:00:01,511 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 10:00:00 UTC)" executed successfully 2026-10-09 10:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 11:00:00 UTC)" (scheduled at 2026-10-09 10:00:00+00:00) 2026-10-09 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-09 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 10:00:01,615 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 10:00:01,617 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 10:00:01,619 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 10:00:01,620 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 10:00:01,683 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 10:00:01,736 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 10:00:01,736 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 11:00:00 UTC)" executed successfully 2026-10-09 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 12:00:00 UTC)" (scheduled at 2026-10-09 11:00:00+00:00) 2026-10-09 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-09 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 11:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 11:00:01,100 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 11:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 11:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 11:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 11:00:01,223 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 11:00:01,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 12:00:00 UTC)" executed successfully 2026-10-09 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 13:00:00 UTC)" (scheduled at 2026-10-09 12:00:00+00:00) 2026-10-09 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-09 12:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 12:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 12:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 12:00:01,272 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 12:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 12:00:01,343 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 12:00:01,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 12:00:01,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 13:00:00 UTC)" executed successfully 2026-10-09 13:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 14:00:00 UTC)" (scheduled at 2026-10-09 13:00:00+00:00) 2026-10-09 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-09 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 13:00:01,372 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 13:00:01,375 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 13:00:01,377 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 13:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 13:00:01,436 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 13:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 13:00:01,493 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 14:00:00 UTC)" executed successfully 2026-10-09 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 15:00:00 UTC)" (scheduled at 2026-10-09 14:00:00+00:00) 2026-10-09 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-09 14:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 14:00:01,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 14:00:01,237 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 14:00:01,239 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 14:00:01,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 14:00:01,287 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 14:00:01,336 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 14:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 15:00:00 UTC)" executed successfully 2026-10-09 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 16:00:00 UTC)" (scheduled at 2026-10-09 15:00:00+00:00) 2026-10-09 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-09 15:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 15:00:01,140 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 15:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 15:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 15:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 15:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 15:00:01,260 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 15:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 16:00:00 UTC)" executed successfully 2026-10-09 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 17:00:00 UTC)" (scheduled at 2026-10-09 16:00:00+00:00) 2026-10-09 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-09 16:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 16:00:01,508 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 16:00:01,510 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 16:00:01,513 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 16:00:01,513 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 16:00:01,588 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 16:00:01,647 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 16:00:01,647 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 17:00:00 UTC)" executed successfully 2026-10-09 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 18:00:00 UTC)" (scheduled at 2026-10-09 17:00:00+00:00) 2026-10-09 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-09 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 17:00:01,253 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 17:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 17:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 17:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 17:00:01,316 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 17:00:01,365 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 17:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 18:00:00 UTC)" executed successfully 2026-10-09 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 19:00:00 UTC)" (scheduled at 2026-10-09 18:00:00+00:00) 2026-10-09 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-09 18:00:00,053 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 18:00:01,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 18:00:01,272 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 18:00:01,274 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 18:00:01,274 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 18:00:01,322 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 18:00:01,370 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 18:00:01,370 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 19:00:00 UTC)" executed successfully 2026-10-09 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 20:00:00 UTC)" (scheduled at 2026-10-09 19:00:00+00:00) 2026-10-09 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-09 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 19:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 19:00:01,176 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 19:00:01,178 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 19:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 19:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 19:00:01,277 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 19:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 20:00:00 UTC)" executed successfully 2026-10-09 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 21:00:00 UTC)" (scheduled at 2026-10-09 20:00:00+00:00) 2026-10-09 20:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-09 20:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 20:00:01,123 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 20:00:01,124 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 20:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 20:00:01,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 20:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 20:00:01,223 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 20:00:01,224 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 21:00:00 UTC)" executed successfully 2026-10-09 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 22:00:00 UTC)" (scheduled at 2026-10-09 21:00:00+00:00) 2026-10-09 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-09 21:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 21:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 21:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 21:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 21:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 21:00:01,149 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 21:00:01,198 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 21:00:01,198 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 22:00:00 UTC)" executed successfully 2026-10-09 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 23:00:00 UTC)" (scheduled at 2026-10-09 22:00:00+00:00) 2026-10-09 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-09 22:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 22:00:01,379 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 22:00:01,381 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 22:00:01,383 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 22:00:01,384 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 22:00:01,436 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 22:00:01,500 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 22:00:01,500 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-09 23:00:00 UTC)" executed successfully 2026-10-09 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 00:00:00 UTC)" (scheduled at 2026-10-09 23:00:00+00:00) 2026-10-09 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-09 23:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-09 23:00:01,564 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-09 23:00:01,567 INFO [fb-sync.worker] Scraped 50 posts 2026-10-09 23:00:01,569 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-09 23:00:01,569 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-09 23:00:01,617 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-09 23:00:01,667 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-09 23:00:01,668 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 00:00:00 UTC)" executed successfully 2026-10-10 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 01:00:00 UTC)" (scheduled at 2026-10-10 00:00:00+00:00) 2026-10-10 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-10 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 00:00:01,352 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 00:00:01,356 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 00:00:01,358 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 00:00:01,359 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 00:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 00:00:01,510 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 00:00:01,511 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 01:00:00 UTC)" executed successfully 2026-10-10 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 02:00:00 UTC)" (scheduled at 2026-10-10 01:00:00+00:00) 2026-10-10 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-10 01:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 01:00:01,033 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 01:00:01,036 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 01:00:01,038 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 01:00:01,039 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 01:00:01,091 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 01:00:01,166 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 01:00:01,167 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 02:00:00 UTC)" executed successfully 2026-10-10 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 03:00:00 UTC)" (scheduled at 2026-10-10 02:00:00+00:00) 2026-10-10 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-10 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 02:00:01,050 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 02:00:01,052 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 02:00:01,054 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 02:00:01,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 02:00:01,098 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 02:00:01,143 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 02:00:01,143 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 03:00:00 UTC)" executed successfully 2026-10-10 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 04:00:00 UTC)" (scheduled at 2026-10-10 03:00:00+00:00) 2026-10-10 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-10 03:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 03:00:01,095 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 03:00:01,097 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 03:00:01,099 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 03:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 03:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 03:00:01,188 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 03:00:01,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 04:00:00 UTC)" executed successfully 2026-10-10 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 05:00:00 UTC)" (scheduled at 2026-10-10 04:00:00+00:00) 2026-10-10 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-10 04:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 04:00:02,623 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 04:00:02,626 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 04:00:02,628 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 04:00:02,629 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 04:00:02,678 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 04:00:02,749 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 04:00:02,750 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 05:00:00 UTC)" executed successfully 2026-10-10 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 06:00:00 UTC)" (scheduled at 2026-10-10 05:00:00+00:00) 2026-10-10 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-10 05:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 05:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 05:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 05:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 05:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 05:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 05:00:01,243 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 05:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 06:00:00 UTC)" executed successfully 2026-10-10 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 07:00:00 UTC)" (scheduled at 2026-10-10 06:00:00+00:00) 2026-10-10 06:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-10 06:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 06:00:01,369 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 06:00:01,371 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 06:00:01,373 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 06:00:01,373 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 06:00:01,428 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 06:00:01,480 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 06:00:01,480 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 07:00:00 UTC)" executed successfully 2026-10-10 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 08:00:00 UTC)" (scheduled at 2026-10-10 07:00:00+00:00) 2026-10-10 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-10 07:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 07:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 07:00:01,182 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 07:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 07:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 07:00:01,248 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 07:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 07:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 08:00:00 UTC)" executed successfully 2026-10-10 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 09:00:00 UTC)" (scheduled at 2026-10-10 08:00:00+00:00) 2026-10-10 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-10 08:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 08:00:01,294 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 08:00:01,295 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 08:00:01,297 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 08:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 08:00:01,342 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 08:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 08:00:01,389 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 09:00:00 UTC)" executed successfully 2026-10-10 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 10:00:00 UTC)" (scheduled at 2026-10-10 09:00:00+00:00) 2026-10-10 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-10 09:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 09:00:01,077 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 09:00:01,080 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 09:00:01,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 09:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 09:00:01,144 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 09:00:01,218 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 09:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 10:00:00 UTC)" executed successfully 2026-10-10 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 11:00:00 UTC)" (scheduled at 2026-10-10 10:00:00+00:00) 2026-10-10 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-10 10:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 10:00:01,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 10:00:01,032 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 10:00:01,035 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 10:00:01,035 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 10:00:01,083 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 10:00:01,147 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 10:00:01,148 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 11:00:00 UTC)" executed successfully 2026-10-10 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 12:00:00 UTC)" (scheduled at 2026-10-10 11:00:00+00:00) 2026-10-10 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-10 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 11:00:02,660 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 11:00:02,662 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 11:00:02,665 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 11:00:02,665 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 11:00:02,740 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 11:00:02,821 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 11:00:02,821 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 12:00:00 UTC)" executed successfully 2026-10-10 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 13:00:00 UTC)" (scheduled at 2026-10-10 12:00:00+00:00) 2026-10-10 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-10 12:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 12:00:01,143 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 12:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 12:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 12:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 12:00:01,192 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 12:00:01,243 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 12:00:01,243 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 13:00:00 UTC)" executed successfully 2026-10-10 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 14:00:00 UTC)" (scheduled at 2026-10-10 13:00:00+00:00) 2026-10-10 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-10 13:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 13:00:01,971 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 13:00:01,973 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 13:00:01,976 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 13:00:01,977 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 13:00:02,046 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 13:00:02,123 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 13:00:02,123 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 14:00:00 UTC)" executed successfully 2026-10-10 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 15:00:00 UTC)" (scheduled at 2026-10-10 14:00:00+00:00) 2026-10-10 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-10 14:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 14:00:01,275 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 14:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 14:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 14:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 14:00:01,329 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 14:00:01,384 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 14:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 15:00:00 UTC)" executed successfully 2026-10-10 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 16:00:00 UTC)" (scheduled at 2026-10-10 15:00:00+00:00) 2026-10-10 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-10 15:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 15:00:01,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 15:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 15:00:01,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 15:00:01,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 15:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 15:00:01,313 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 15:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 16:00:00 UTC)" executed successfully 2026-10-10 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 17:00:00 UTC)" (scheduled at 2026-10-10 16:00:00+00:00) 2026-10-10 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-10 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 16:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 16:00:01,295 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 16:00:01,298 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 16:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 16:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 16:00:01,420 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 16:00:01,420 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 17:00:00 UTC)" executed successfully 2026-10-10 17:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 18:00:00 UTC)" (scheduled at 2026-10-10 17:00:00+00:00) 2026-10-10 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-10 17:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 17:00:01,216 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 17:00:01,217 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 17:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 17:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 17:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 17:00:01,314 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 17:00:01,315 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 18:00:00 UTC)" executed successfully 2026-10-10 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 19:00:00 UTC)" (scheduled at 2026-10-10 18:00:00+00:00) 2026-10-10 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-10 18:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 18:00:01,144 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 18:00:01,146 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 18:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 18:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 18:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 18:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 18:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 19:00:00 UTC)" executed successfully 2026-10-10 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 20:00:00 UTC)" (scheduled at 2026-10-10 19:00:00+00:00) 2026-10-10 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-10 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 19:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 19:00:01,144 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 19:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 19:00:01,147 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 19:00:01,199 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 19:00:01,253 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 19:00:01,253 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 20:00:00 UTC)" executed successfully 2026-10-10 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 21:00:00 UTC)" (scheduled at 2026-10-10 20:00:00+00:00) 2026-10-10 20:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-10 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 20:00:01,913 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 20:00:01,915 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 20:00:01,918 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 20:00:01,918 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 20:00:01,985 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 20:00:02,065 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 20:00:02,066 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 21:00:00 UTC)" executed successfully 2026-10-10 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 22:00:00 UTC)" (scheduled at 2026-10-10 21:00:00+00:00) 2026-10-10 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-10 21:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 21:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 21:00:01,104 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 21:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 21:00:01,108 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 21:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 21:00:01,213 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 21:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 22:00:00 UTC)" executed successfully 2026-10-10 22:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 23:00:00 UTC)" (scheduled at 2026-10-10 22:00:00+00:00) 2026-10-10 22:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-10 22:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 22:00:01,260 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 22:00:01,261 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 22:00:01,263 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 22:00:01,263 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 22:00:01,327 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 22:00:01,396 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 22:00:01,397 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-10 23:00:00 UTC)" executed successfully 2026-10-10 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 00:00:00 UTC)" (scheduled at 2026-10-10 23:00:00+00:00) 2026-10-10 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-10 23:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-10 23:00:01,454 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-10 23:00:01,458 INFO [fb-sync.worker] Scraped 50 posts 2026-10-10 23:00:01,461 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-10 23:00:01,461 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-10 23:00:01,512 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-10 23:00:01,560 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-10 23:00:01,561 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 00:00:00 UTC)" executed successfully 2026-10-11 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 01:00:00 UTC)" (scheduled at 2026-10-11 00:00:00+00:00) 2026-10-11 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-11 00:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 00:00:01,126 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 00:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 00:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 00:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 00:00:01,188 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 00:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 00:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 01:00:00 UTC)" executed successfully 2026-10-11 01:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 02:00:00 UTC)" (scheduled at 2026-10-11 01:00:00+00:00) 2026-10-11 01:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-11 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 01:00:01,193 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 01:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 01:00:01,199 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 01:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 01:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 01:00:01,357 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 01:00:01,358 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 02:00:00 UTC)" executed successfully 2026-10-11 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 03:00:00 UTC)" (scheduled at 2026-10-11 02:00:00+00:00) 2026-10-11 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-11 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 02:00:01,026 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 02:00:01,028 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 02:00:01,030 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 02:00:01,030 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 02:00:01,077 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 02:00:01,121 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 02:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 03:00:00 UTC)" executed successfully 2026-10-11 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 04:00:00 UTC)" (scheduled at 2026-10-11 03:00:00+00:00) 2026-10-11 03:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-11 03:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 03:00:01,139 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 03:00:01,141 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 03:00:01,145 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 03:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 03:00:01,214 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 03:00:01,288 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 03:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 04:00:00 UTC)" executed successfully 2026-10-11 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 05:00:00 UTC)" (scheduled at 2026-10-11 04:00:00+00:00) 2026-10-11 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-11 04:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 04:00:01,059 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 04:00:01,061 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 04:00:01,063 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 04:00:01,063 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 04:00:01,118 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 04:00:01,170 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 04:00:01,171 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 05:00:00 UTC)" executed successfully 2026-10-11 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 06:00:00 UTC)" (scheduled at 2026-10-11 05:00:00+00:00) 2026-10-11 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-11 05:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 05:00:01,005 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 05:00:01,007 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 05:00:01,009 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 05:00:01,010 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 05:00:01,077 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 05:00:01,129 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 05:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 06:00:00 UTC)" executed successfully 2026-10-11 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 07:00:00 UTC)" (scheduled at 2026-10-11 06:00:00+00:00) 2026-10-11 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-11 06:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 06:00:02,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 06:00:02,087 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 06:00:02,090 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 06:00:02,091 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 06:00:02,166 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 06:00:02,227 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 06:00:02,227 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 07:00:00 UTC)" executed successfully 2026-10-11 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 08:00:00 UTC)" (scheduled at 2026-10-11 07:00:00+00:00) 2026-10-11 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-11 07:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 07:00:01,379 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 07:00:01,382 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 07:00:01,385 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 07:00:01,386 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 07:00:01,456 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 07:00:01,535 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 07:00:01,536 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 08:00:00 UTC)" executed successfully 2026-10-11 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 09:00:00 UTC)" (scheduled at 2026-10-11 08:00:00+00:00) 2026-10-11 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-11 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 08:00:01,163 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 08:00:01,165 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 08:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 08:00:01,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 08:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 08:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 08:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 09:00:00 UTC)" executed successfully 2026-10-11 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 10:00:00 UTC)" (scheduled at 2026-10-11 09:00:00+00:00) 2026-10-11 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-11 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 09:00:01,604 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 09:00:01,607 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 09:00:01,610 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 09:00:01,610 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 09:00:01,675 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 09:00:01,742 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 09:00:01,743 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 10:00:00 UTC)" executed successfully 2026-10-11 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 11:00:00 UTC)" (scheduled at 2026-10-11 10:00:00+00:00) 2026-10-11 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-11 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 10:00:01,160 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 10:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 10:00:01,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 10:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 10:00:01,219 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 10:00:01,289 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 10:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 11:00:00 UTC)" executed successfully 2026-10-11 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 12:00:00 UTC)" (scheduled at 2026-10-11 11:00:00+00:00) 2026-10-11 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-11 11:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 11:00:01,506 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 11:00:01,509 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 11:00:01,511 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 11:00:01,512 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 11:00:01,557 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 11:00:01,606 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 11:00:01,606 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 12:00:00 UTC)" executed successfully 2026-10-11 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 13:00:00 UTC)" (scheduled at 2026-10-11 12:00:00+00:00) 2026-10-11 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-11 12:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 12:00:01,196 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 12:00:01,198 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 12:00:01,201 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 12:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 12:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 12:00:01,351 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 12:00:01,352 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 13:00:00 UTC)" executed successfully 2026-10-11 13:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 14:00:00 UTC)" (scheduled at 2026-10-11 13:00:00+00:00) 2026-10-11 13:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-11 13:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 13:00:01,446 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 13:00:01,449 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 13:00:01,452 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 13:00:01,452 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 13:00:01,518 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 13:00:01,584 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 13:00:01,585 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 14:00:00 UTC)" executed successfully 2026-10-11 14:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 15:00:00 UTC)" (scheduled at 2026-10-11 14:00:00+00:00) 2026-10-11 14:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-11 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 14:00:01,254 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 14:00:01,255 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 14:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 14:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 14:00:01,301 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 14:00:01,347 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 14:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 15:00:00 UTC)" executed successfully 2026-10-11 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 16:00:00 UTC)" (scheduled at 2026-10-11 15:00:00+00:00) 2026-10-11 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-11 15:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 15:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 15:00:01,159 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 15:00:01,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 15:00:01,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 15:00:01,209 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 15:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 15:00:01,274 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 16:00:00 UTC)" executed successfully 2026-10-11 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 17:00:00 UTC)" (scheduled at 2026-10-11 16:00:00+00:00) 2026-10-11 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-11 16:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 16:00:01,439 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 16:00:01,441 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 16:00:01,444 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 16:00:01,444 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 16:00:01,518 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 16:00:01,598 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 16:00:01,599 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 17:00:00 UTC)" executed successfully 2026-10-11 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 18:00:00 UTC)" (scheduled at 2026-10-11 17:00:00+00:00) 2026-10-11 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-11 17:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 17:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 17:00:01,100 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 17:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 17:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 17:00:01,169 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 17:00:01,241 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 17:00:01,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 18:00:00 UTC)" executed successfully 2026-10-11 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 19:00:00 UTC)" (scheduled at 2026-10-11 18:00:00+00:00) 2026-10-11 18:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-11 18:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 18:00:02,751 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 18:00:02,753 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 18:00:02,755 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 18:00:02,756 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 18:00:02,822 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 18:00:02,890 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 18:00:02,890 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 19:00:00 UTC)" executed successfully 2026-10-11 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 20:00:00 UTC)" (scheduled at 2026-10-11 19:00:00+00:00) 2026-10-11 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-11 19:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 19:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 19:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 19:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 19:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 19:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 19:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 19:00:01,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 20:00:00 UTC)" executed successfully 2026-10-11 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 21:00:00 UTC)" (scheduled at 2026-10-11 20:00:00+00:00) 2026-10-11 20:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-11 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 20:00:01,385 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 20:00:01,388 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 20:00:01,391 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 20:00:01,391 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 20:00:01,463 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 20:00:01,542 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 20:00:01,542 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 21:00:00 UTC)" executed successfully 2026-10-11 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 22:00:00 UTC)" (scheduled at 2026-10-11 21:00:00+00:00) 2026-10-11 21:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-11 21:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 21:00:01,147 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 21:00:01,148 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 21:00:01,151 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 21:00:01,151 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 21:00:01,205 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 21:00:01,266 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 21:00:01,266 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 22:00:00 UTC)" executed successfully 2026-10-11 22:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 23:00:00 UTC)" (scheduled at 2026-10-11 22:00:00+00:00) 2026-10-11 22:00:00,004 INFO [fb-sync] Starting FB sync... 2026-10-11 22:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 22:00:01,030 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 22:00:01,033 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 22:00:01,035 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 22:00:01,035 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 22:00:01,339 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 22:00:01,414 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 22:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-11 23:00:00 UTC)" executed successfully 2026-10-11 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 00:00:00 UTC)" (scheduled at 2026-10-11 23:00:00+00:00) 2026-10-11 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-11 23:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-11 23:00:01,961 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-11 23:00:01,964 INFO [fb-sync.worker] Scraped 50 posts 2026-10-11 23:00:01,967 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-11 23:00:01,967 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-11 23:00:02,043 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-11 23:00:02,118 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-11 23:00:02,118 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 00:00:00 UTC)" executed successfully 2026-10-12 00:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 01:00:00 UTC)" (scheduled at 2026-10-12 00:00:00+00:00) 2026-10-12 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-12 00:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 00:00:00,957 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 00:00:00,959 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 00:00:00,962 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 00:00:00,963 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 00:00:01,032 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 00:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 00:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 01:00:00 UTC)" executed successfully 2026-10-12 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 02:00:00 UTC)" (scheduled at 2026-10-12 01:00:00+00:00) 2026-10-12 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-12 01:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 01:00:01,027 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 01:00:01,028 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 01:00:01,031 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 01:00:01,031 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 01:00:01,101 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 01:00:01,179 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 01:00:01,179 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 02:00:00 UTC)" executed successfully 2026-10-12 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 03:00:00 UTC)" (scheduled at 2026-10-12 02:00:00+00:00) 2026-10-12 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-12 02:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 02:00:01,030 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 02:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 02:00:01,035 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 02:00:01,035 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 02:00:01,081 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 02:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 02:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 03:00:00 UTC)" executed successfully 2026-10-12 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 04:00:00 UTC)" (scheduled at 2026-10-12 03:00:00+00:00) 2026-10-12 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-12 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 03:00:01,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 03:00:01,136 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 03:00:01,139 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 03:00:01,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 03:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 03:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 03:00:01,240 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 04:00:00 UTC)" executed successfully 2026-10-12 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 05:00:00 UTC)" (scheduled at 2026-10-12 04:00:00+00:00) 2026-10-12 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 04:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 04:00:01,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 04:00:01,443 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 04:00:01,445 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 04:00:01,446 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 04:00:01,498 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 04:00:01,560 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 04:00:01,561 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 05:00:00 UTC)" executed successfully 2026-10-12 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 06:00:00 UTC)" (scheduled at 2026-10-12 05:00:00+00:00) 2026-10-12 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-12 05:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 05:00:01,047 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 05:00:01,048 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 05:00:01,051 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 05:00:01,051 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 05:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 05:00:01,156 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 05:00:01,157 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 06:00:00 UTC)" executed successfully 2026-10-12 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 07:00:00 UTC)" (scheduled at 2026-10-12 06:00:00+00:00) 2026-10-12 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-12 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 06:00:01,427 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 06:00:01,428 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 06:00:01,430 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 06:00:01,431 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 06:00:01,479 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 06:00:01,558 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 06:00:01,558 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 07:00:00 UTC)" executed successfully 2026-10-12 07:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 08:00:00 UTC)" (scheduled at 2026-10-12 07:00:00+00:00) 2026-10-12 07:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-12 07:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 07:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 07:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 07:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 07:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 07:00:01,149 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 07:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 07:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 08:00:00 UTC)" executed successfully 2026-10-12 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 09:00:00 UTC)" (scheduled at 2026-10-12 08:00:00+00:00) 2026-10-12 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 08:00:00,104 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 08:00:01,568 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 08:00:01,570 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 08:00:01,573 INFO [fb-sync.worker] New articles: 3 | skips: {'duplicate_exact': 47} 2026-10-12 08:00:01,573 INFO [fb-sync.worker] Publishing [1/3] Poprvé za 15 let: britský tisk víc klimatickou politiku... 2026-10-12 08:00:01,623 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1858 content_type=home.BlogPostPage path=/home/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:01,795 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1858 revision_id=3702 2026-10-12 08:00:01,904 INFO [home.signals] Starting auto-translation for blog post: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje (ID: 1858) 2026-10-12 08:00:01,909 INFO [home.signals] Creating new en translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:05,160 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:06,989 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:07,221 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1859 content_type=home.BlogPostPage path=/home-1/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:07,242 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1859 revision_id=3703 2026-10-12 08:00:07,249 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1859 from=1858 2026-10-12 08:00:07,420 INFO [wagtail] Page edited: "For the first time in 15 years: the British press rejects climate policy more than it supports" id=1859 revision_id=3704 2026-10-12 08:00:07,485 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'For the first time in 15 years: the British press rejects climate policy more than it supports' id=1859 2026-10-12 08:00:07,502 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:07,653 INFO [home.signals] Skipping auto-translation for non-Czech page: For the first time in 15 years: the British press rejects climate policy more than it supports (en) 2026-10-12 08:00:07,677 INFO [wagtail] Published: "For the first time in 15 years: the British press rejects climate policy more than it supports" pk=1859 revision_id=3704 2026-10-12 08:00:07,693 INFO [home.signals] ✓ Successfully processed en: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:07,699 INFO [home.signals] Creating new de translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:10,828 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:12,611 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:12,818 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1860 content_type=home.BlogPostPage path=/startseite/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:12,839 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1860 revision_id=3705 2026-10-12 08:00:12,848 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1860 from=1858 2026-10-12 08:00:13,009 INFO [wagtail] Page edited: "Erstmals seit 15 Jahren: Britische Presse lehnt Klimapolitik mehr ab, als sie unterstützt" id=1860 revision_id=3706 2026-10-12 08:00:13,053 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Erstmals seit 15 Jahren: Britische Presse lehnt Klimapolitik mehr ab, als sie unterstützt' id=1860 2026-10-12 08:00:13,064 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:13,213 INFO [home.signals] Skipping auto-translation for non-Czech page: Erstmals seit 15 Jahren: Britische Presse lehnt Klimapolitik mehr ab, als sie unterstützt (de) 2026-10-12 08:00:13,238 INFO [wagtail] Published: "Erstmals seit 15 Jahren: Britische Presse lehnt Klimapolitik mehr ab, als sie unterstützt" pk=1860 revision_id=3706 2026-10-12 08:00:13,255 INFO [home.signals] ✓ Successfully processed de: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:13,263 INFO [home.signals] Creating new sk translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:16,946 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:18,942 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:19,123 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1861 content_type=home.BlogPostPage path=/domov/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:19,142 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1861 revision_id=3707 2026-10-12 08:00:19,150 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1861 from=1858 2026-10-12 08:00:19,316 INFO [wagtail] Page edited: "Po prvýkrát za 15 rokov: britská tlač viac klimatickú politiku odmieta, než podporuje" id=1861 revision_id=3708 2026-10-12 08:00:19,347 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Po prvýkrát za 15 rokov: britská tlač viac klimatickú politiku odmieta, než podporuje' id=1861 2026-10-12 08:00:19,359 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:19,473 INFO [home.signals] Skipping auto-translation for non-Czech page: Po prvýkrát za 15 rokov: britská tlač viac klimatickú politiku odmieta, než podporuje (sk) 2026-10-12 08:00:19,494 INFO [wagtail] Published: "Po prvýkrát za 15 rokov: britská tlač viac klimatickú politiku odmieta, než podporuje" pk=1861 revision_id=3708 2026-10-12 08:00:19,510 INFO [home.signals] ✓ Successfully processed sk: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:19,516 INFO [home.signals] Creating new zh-Hans translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:23,054 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:25,037 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:25,241 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1862 content_type=home.BlogPostPage path=/zh-hans/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:25,256 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1862 revision_id=3709 2026-10-12 08:00:25,262 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1862 from=1858 2026-10-12 08:00:25,423 INFO [wagtail] Page edited: "15年来首次:英国媒体对气候政策的否定多于支持" id=1862 revision_id=3710 2026-10-12 08:00:25,450 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '15年来首次:英国媒体对气候政策的否定多于支持' id=1862 2026-10-12 08:00:25,459 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:25,558 INFO [home.signals] Skipping auto-translation for non-Czech page: 15年来首次:英国媒体对气候政策的否定多于支持 (zh-Hans) 2026-10-12 08:00:25,571 INFO [wagtail] Published: "15年来首次:英国媒体对气候政策的否定多于支持" pk=1862 revision_id=3710 2026-10-12 08:00:25,583 INFO [home.signals] ✓ Successfully processed zh-Hans: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:25,587 INFO [home.signals] Creating new tr translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:29,132 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:31,990 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:32,183 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1863 content_type=home.BlogPostPage path=/anasayfa/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:32,211 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1863 revision_id=3711 2026-10-12 08:00:32,221 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1863 from=1858 2026-10-12 08:00:32,415 INFO [wagtail] Page edited: "15 yılda bir kez: Britanya basını iklim politikasını desteklemekten çok reddediyor" id=1863 revision_id=3712 2026-10-12 08:00:32,482 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '15 yılda bir kez: Britanya basını iklim politikasını desteklemekten çok reddediyor' id=1863 2026-10-12 08:00:32,496 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:32,672 INFO [home.signals] Skipping auto-translation for non-Czech page: 15 yılda bir kez: Britanya basını iklim politikasını desteklemekten çok reddediyor (tr) 2026-10-12 08:00:32,698 INFO [wagtail] Published: "15 yılda bir kez: Britanya basını iklim politikasını desteklemekten çok reddediyor" pk=1863 revision_id=3712 2026-10-12 08:00:32,715 INFO [home.signals] ✓ Successfully processed tr: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:32,722 INFO [home.signals] Creating new vi translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:36,061 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:38,434 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:38,652 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1864 content_type=home.BlogPostPage path=/trang-chu/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:38,676 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1864 revision_id=3713 2026-10-12 08:00:38,683 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1864 from=1858 2026-10-12 08:00:38,862 INFO [wagtail] Page edited: "Lần đầu tiên trong 15 năm: báo chí Anh hơn chối bỏ chính sách khí hậu hơn là ủng hộ" id=1864 revision_id=3714 2026-10-12 08:00:38,924 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Lần đầu tiên trong 15 năm: báo chí Anh hơn chối bỏ chính sách khí hậu hơn là ủng hộ' id=1864 2026-10-12 08:00:38,942 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:39,060 INFO [home.signals] Skipping auto-translation for non-Czech page: Lần đầu tiên trong 15 năm: báo chí Anh hơn chối bỏ chính sách khí hậu hơn là ủng hộ (vi) 2026-10-12 08:00:39,084 INFO [wagtail] Published: "Lần đầu tiên trong 15 năm: báo chí Anh hơn chối bỏ chính sách khí hậu hơn là ủng hộ" pk=1864 revision_id=3714 2026-10-12 08:00:39,100 INFO [home.signals] ✓ Successfully processed vi: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:39,106 INFO [home.signals] Creating new hi translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:42,465 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:44,752 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:44,949 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1865 content_type=home.BlogPostPage path=/hi/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:44,964 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1865 revision_id=3715 2026-10-12 08:00:44,970 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1865 from=1858 2026-10-12 08:00:45,140 INFO [wagtail] Page edited: "15 साल में पहली बार: ब्रिटिश प्रेस जलवायु नीति को समर्थन देने की तुलना में अधिक अस्वीकार करता है" id=1865 revision_id=3716 2026-10-12 08:00:45,192 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '15 साल में पहली बार: ब्रिटिश प्रेस जलवायु नीति को समर्थन देने की तुलना में अधिक अस्वीकार करता है' id=1865 2026-10-12 08:00:45,206 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:45,342 INFO [home.signals] Skipping auto-translation for non-Czech page: 15 साल में पहली बार: ब्रिटिश प्रेस जलवायु नीति को समर्थन देने की तुलना में अधिक अस्वीकार करता है (hi) 2026-10-12 08:00:45,357 INFO [wagtail] Published: "15 साल में पहली बार: ब्रिटिश प्रेस जलवायु नीति को समर्थन देने की तुलना में अधिक अस्वीकार करता है" pk=1865 revision_id=3716 2026-10-12 08:00:45,366 INFO [home.signals] ✓ Successfully processed hi: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:45,370 INFO [home.signals] Creating new fr translation for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:48,194 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:50,363 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:00:50,559 INFO [wagtail] Page created: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1866 content_type=home.BlogPostPage path=/home-fr/blog/poprve-za-15-let-britsky-tisk-vic-klimatickou-politiku-odmita-nez-podporuje/ 2026-10-12 08:00:50,583 INFO [wagtail] Page edited: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1866 revision_id=3717 2026-10-12 08:00:50,589 INFO [wagtail] Page copied: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" id=1866 from=1858 2026-10-12 08:00:50,756 INFO [wagtail] Page edited: "Pour la première fois en 15 ans : la presse britannique rejette davantage la politique climatique qu'elle ne la soutient" id=1866 revision_id=3718 2026-10-12 08:00:50,821 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Pour la première fois en 15 ans : la presse britannique rejette davantage la politique climatique qu'elle ne la soutient' id=1866 2026-10-12 08:00:50,835 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:00:50,972 INFO [home.signals] Skipping auto-translation for non-Czech page: Pour la première fois en 15 ans : la presse britannique rejette davantage la politique climatique qu'elle ne la soutient (fr) 2026-10-12 08:00:50,991 INFO [wagtail] Published: "Pour la première fois en 15 ans : la presse britannique rejette davantage la politique climatique qu'elle ne la soutient" pk=1866 revision_id=3718 2026-10-12 08:00:51,003 INFO [home.signals] ✓ Successfully processed fr: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:51,003 INFO [home.signals] Completed auto-translation workflow for: Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje 2026-10-12 08:00:51,028 INFO [wagtail] Published: "Poprvé za 15 let: britský tisk víc klimatickou politiku odmítá, než podporuje" pk=1858 revision_id=3702 2026-10-12 08:00:56,029 INFO [fb-sync.worker] Publishing [2/3] Jižní Korea představila klimatickou strategii za 750 mi... 2026-10-12 08:00:56,056 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1867 content_type=home.BlogPostPage path=/home/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:00:56,176 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1867 revision_id=3719 2026-10-12 08:00:56,273 INFO [home.signals] Starting auto-translation for blog post: Jižní Korea představila klimatickou strategii za 750 miliard dolarů (ID: 1867) 2026-10-12 08:00:56,280 INFO [home.signals] Creating new en translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:00:59,079 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:00,573 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:00,785 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1868 content_type=home.BlogPostPage path=/home-1/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:00,810 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1868 revision_id=3720 2026-10-12 08:01:00,822 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1868 from=1867 2026-10-12 08:01:01,022 INFO [wagtail] Page edited: "South Korea unveiled a climate strategy worth $750 billion" id=1868 revision_id=3721 2026-10-12 08:01:01,078 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'South Korea unveiled a climate strategy worth $750 billion' id=1868 2026-10-12 08:01:01,094 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:01,264 INFO [home.signals] Skipping auto-translation for non-Czech page: South Korea unveiled a climate strategy worth $750 billion (en) 2026-10-12 08:01:01,283 INFO [wagtail] Published: "South Korea unveiled a climate strategy worth $750 billion" pk=1868 revision_id=3721 2026-10-12 08:01:01,294 INFO [home.signals] ✓ Successfully processed en: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:01,299 INFO [home.signals] Creating new de translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:04,573 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:06,307 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:06,504 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1869 content_type=home.BlogPostPage path=/startseite/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:06,536 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1869 revision_id=3722 2026-10-12 08:01:06,547 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1869 from=1867 2026-10-12 08:01:06,724 INFO [wagtail] Page edited: "Südkorea stellte eine Klimastrategie im Wert von 750 Milliarden Dollar vor" id=1869 revision_id=3723 2026-10-12 08:01:06,782 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Südkorea stellte eine Klimastrategie im Wert von 750 Milliarden Dollar vor' id=1869 2026-10-12 08:01:06,793 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:06,925 INFO [home.signals] Skipping auto-translation for non-Czech page: Südkorea stellte eine Klimastrategie im Wert von 750 Milliarden Dollar vor (de) 2026-10-12 08:01:06,941 INFO [wagtail] Published: "Südkorea stellte eine Klimastrategie im Wert von 750 Milliarden Dollar vor" pk=1869 revision_id=3723 2026-10-12 08:01:06,949 INFO [home.signals] ✓ Successfully processed de: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:06,952 INFO [home.signals] Creating new sk translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:10,608 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:13,594 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:13,759 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1870 content_type=home.BlogPostPage path=/domov/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:13,778 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1870 revision_id=3724 2026-10-12 08:01:13,788 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1870 from=1867 2026-10-12 08:01:13,971 INFO [wagtail] Page edited: "Južná Kórea predstavila klimatickú stratégiu za 750 miliárd dolárov" id=1870 revision_id=3725 2026-10-12 08:01:14,012 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Južná Kórea predstavila klimatickú stratégiu za 750 miliárd dolárov' id=1870 2026-10-12 08:01:14,026 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:14,140 INFO [home.signals] Skipping auto-translation for non-Czech page: Južná Kórea predstavila klimatickú stratégiu za 750 miliárd dolárov (sk) 2026-10-12 08:01:14,161 INFO [wagtail] Published: "Južná Kórea predstavila klimatickú stratégiu za 750 miliárd dolárov" pk=1870 revision_id=3725 2026-10-12 08:01:14,171 INFO [home.signals] ✓ Successfully processed sk: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:14,175 INFO [home.signals] Creating new zh-Hans translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:17,428 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:19,100 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:19,259 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1871 content_type=home.BlogPostPage path=/zh-hans/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:19,272 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1871 revision_id=3726 2026-10-12 08:01:19,276 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1871 from=1867 2026-10-12 08:01:19,426 INFO [wagtail] Page edited: "韩国推出了价值7500亿美元的气候战略" id=1871 revision_id=3727 2026-10-12 08:01:19,598 INFO [home.signals] Skipping auto-translation for non-Czech page: 韩国推出了价值7500亿美元的气候战略 (zh-Hans) 2026-10-12 08:01:19,620 INFO [wagtail] Published: "韩国推出了价值7500亿美元的气候战略" pk=1871 revision_id=3727 2026-10-12 08:01:19,630 INFO [home.signals] ✓ Successfully processed zh-Hans: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:19,636 INFO [home.signals] Creating new tr translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:22,934 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:24,639 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:24,843 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1872 content_type=home.BlogPostPage path=/anasayfa/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:24,857 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1872 revision_id=3728 2026-10-12 08:01:24,861 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1872 from=1867 2026-10-12 08:01:25,034 INFO [wagtail] Page edited: "Güney Kore, 750 milyar dolar değerinde bir iklim stratejisi açıkladı" id=1872 revision_id=3729 2026-10-12 08:01:25,090 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Güney Kore, 750 milyar dolar değerinde bir iklim stratejisi açıkladı' id=1872 2026-10-12 08:01:25,104 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:25,266 INFO [home.signals] Skipping auto-translation for non-Czech page: Güney Kore, 750 milyar dolar değerinde bir iklim stratejisi açıkladı (tr) 2026-10-12 08:01:25,285 INFO [wagtail] Published: "Güney Kore, 750 milyar dolar değerinde bir iklim stratejisi açıkladı" pk=1872 revision_id=3729 2026-10-12 08:01:25,297 INFO [home.signals] ✓ Successfully processed tr: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:25,300 INFO [home.signals] Creating new vi translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:28,952 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:31,170 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:31,327 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1873 content_type=home.BlogPostPage path=/trang-chu/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:31,342 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1873 revision_id=3730 2026-10-12 08:01:31,347 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1873 from=1867 2026-10-12 08:01:31,444 INFO [wagtail] Page edited: "Hàn Quốc đã giới thiệu chiến lược khí hậu trị giá 750 tỷ đô la" id=1873 revision_id=3731 2026-10-12 08:01:31,489 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Hàn Quốc đã giới thiệu chiến lược khí hậu trị giá 750 tỷ đô la' id=1873 2026-10-12 08:01:31,504 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:31,629 INFO [home.signals] Skipping auto-translation for non-Czech page: Hàn Quốc đã giới thiệu chiến lược khí hậu trị giá 750 tỷ đô la (vi) 2026-10-12 08:01:31,646 INFO [wagtail] Published: "Hàn Quốc đã giới thiệu chiến lược khí hậu trị giá 750 tỷ đô la" pk=1873 revision_id=3731 2026-10-12 08:01:31,662 INFO [home.signals] ✓ Successfully processed vi: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:31,670 INFO [home.signals] Creating new hi translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:35,278 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:37,076 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:37,226 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1874 content_type=home.BlogPostPage path=/hi/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:37,241 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1874 revision_id=3732 2026-10-12 08:01:37,247 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1874 from=1867 2026-10-12 08:01:37,378 INFO [wagtail] Page edited: "दक्षिण कोरिया ने 750 बिलियन डॉलर की जलवायु रणनीति पेश की" id=1874 revision_id=3733 2026-10-12 08:01:37,416 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'दक्षिण कोरिया ने 750 बिलियन डॉलर की जलवायु रणनीति पेश की' id=1874 2026-10-12 08:01:37,424 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:37,559 INFO [home.signals] Skipping auto-translation for non-Czech page: दक्षिण कोरिया ने 750 बिलियन डॉलर की जलवायु रणनीति पेश की (hi) 2026-10-12 08:01:37,579 INFO [wagtail] Published: "दक्षिण कोरिया ने 750 बिलियन डॉलर की जलवायु रणनीति पेश की" pk=1874 revision_id=3733 2026-10-12 08:01:37,591 INFO [home.signals] ✓ Successfully processed hi: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:37,595 INFO [home.signals] Creating new fr translation for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:40,547 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:42,241 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:42,401 INFO [wagtail] Page created: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1875 content_type=home.BlogPostPage path=/home-fr/blog/jizni-korea-predstavila-klimatickou-strategii-za-750-miliard-dolaru/ 2026-10-12 08:01:42,416 INFO [wagtail] Page edited: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1875 revision_id=3734 2026-10-12 08:01:42,421 INFO [wagtail] Page copied: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" id=1875 from=1867 2026-10-12 08:01:42,576 INFO [wagtail] Page edited: "La Corée du Sud a présenté une stratégie climatique de 750 milliards de dollars" id=1875 revision_id=3735 2026-10-12 08:01:42,625 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'La Corée du Sud a présenté une stratégie climatique de 750 milliards de dollars' id=1875 2026-10-12 08:01:42,635 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 08:01:42,795 INFO [home.signals] Skipping auto-translation for non-Czech page: La Corée du Sud a présenté une stratégie climatique de 750 milliards de dollars (fr) 2026-10-12 08:01:42,821 INFO [wagtail] Published: "La Corée du Sud a présenté une stratégie climatique de 750 milliards de dollars" pk=1875 revision_id=3735 2026-10-12 08:01:42,832 INFO [home.signals] ✓ Successfully processed fr: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:42,832 INFO [home.signals] Completed auto-translation workflow for: Jižní Korea představila klimatickou strategii za 750 miliard dolarů 2026-10-12 08:01:42,845 INFO [wagtail] Published: "Jižní Korea představila klimatickou strategii za 750 miliard dolarů" pk=1867 revision_id=3719 2026-10-12 08:01:47,846 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 08:01:50,424 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:01:50,427 INFO [fb-sync.free_images] Photo queries: ['London newspaper kiosk', 'UK wind farm offshore', 'British nuclear power plant', 'British Parliament building'] 2026-10-12 08:01:57,668 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:00,157 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:03,222 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:05,612 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:07,703 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:07,707 INFO [fb-sync.free_images] Image chosen: pexels "Assorted newspaper dispensers and a parking machine on a cit" (Pexels Licence) 2026-10-12 08:02:08,486 INFO [fb-sync.worker] Image added ID=1858: stock:pexels (Pexels Licence) 2026-10-12 08:02:10,167 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:10,169 INFO [fb-sync.free_images] Photo queries: ['offshore wind turbines South Korea', 'large solar farm South Korea', 'steel mill smokestack South Korea', 'electric vehicle charging station Seoul'] 2026-10-12 08:02:16,302 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:18,767 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:20,791 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:23,737 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:25,665 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 08:02:25,667 INFO [fb-sync.free_images] Image chosen: pexels "A stunning aerial view of wind turbines on Jeju Island, show" (Pexels Licence) 2026-10-12 08:02:26,281 INFO [fb-sync.worker] Image added ID=1867: stock:pexels (Pexels Licence) 2026-10-12 08:02:27,334 INFO [fb-sync] Sync done: 2 new posts in 147s (source=graph_api, scraped=50, skips={'duplicate_exact': 47, 'empty_body': 1}) 2026-10-12 08:02:27,375 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 08:02:27,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 09:00:00 UTC)" executed successfully 2026-10-12 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 10:00:00 UTC)" (scheduled at 2026-10-12 09:00:00+00:00) 2026-10-12 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-12 09:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 09:00:02,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 09:00:02,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 09:00:02,096 INFO [fb-sync.worker] New articles: 2 | skips: {'duplicate_exact': 48} 2026-10-12 09:00:02,096 INFO [fb-sync.worker] Publishing [1/2] Investoři za 36 bilionů dolarů: od net zero neustupujem... 2026-10-12 09:00:02,126 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1876 content_type=home.BlogPostPage path=/home/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:02,261 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1876 revision_id=3736 2026-10-12 09:00:02,360 INFO [home.signals] Starting auto-translation for blog post: Investoři za 36 bilionů dolarů: od net zero neustupujeme (ID: 1876) 2026-10-12 09:00:02,365 INFO [home.signals] Creating new en translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:05,466 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:07,558 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:07,838 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1877 content_type=home.BlogPostPage path=/home-1/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:07,861 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1877 revision_id=3737 2026-10-12 09:00:07,871 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1877 from=1876 2026-10-12 09:00:08,060 INFO [wagtail] Page edited: "Investors with $36 trillion: we are not backing away from net zero" id=1877 revision_id=3738 2026-10-12 09:00:08,113 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Investors with $36 trillion: we are not backing away from net zero' id=1877 2026-10-12 09:00:08,127 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:08,275 INFO [home.signals] Skipping auto-translation for non-Czech page: Investors with $36 trillion: we are not backing away from net zero (en) 2026-10-12 09:00:08,301 INFO [wagtail] Published: "Investors with $36 trillion: we are not backing away from net zero" pk=1877 revision_id=3738 2026-10-12 09:00:08,316 INFO [home.signals] ✓ Successfully processed en: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:08,321 INFO [home.signals] Creating new de translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:11,686 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:13,888 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:14,172 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1878 content_type=home.BlogPostPage path=/startseite/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:14,184 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1878 revision_id=3739 2026-10-12 09:00:14,197 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1878 from=1876 2026-10-12 09:00:14,361 INFO [wagtail] Page edited: "Investoren für 36 Billionen Dollar: Wir geben beim Net‑Zero nicht nach" id=1878 revision_id=3740 2026-10-12 09:00:14,395 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Investoren für 36 Billionen Dollar: Wir geben beim Net‑Zero nicht nach' id=1878 2026-10-12 09:00:14,405 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:14,509 INFO [home.signals] Skipping auto-translation for non-Czech page: Investoren für 36 Billionen Dollar: Wir geben beim Net‑Zero nicht nach (de) 2026-10-12 09:00:14,529 INFO [wagtail] Published: "Investoren für 36 Billionen Dollar: Wir geben beim Net‑Zero nicht nach" pk=1878 revision_id=3740 2026-10-12 09:00:14,544 INFO [home.signals] ✓ Successfully processed de: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:14,550 INFO [home.signals] Creating new sk translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:17,988 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:21,083 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:21,280 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1879 content_type=home.BlogPostPage path=/domov/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:21,303 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1879 revision_id=3741 2026-10-12 09:00:21,313 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1879 from=1876 2026-10-12 09:00:21,497 INFO [wagtail] Page edited: "Investori za 36 biliónov dolárov: od net zero neustupujeme" id=1879 revision_id=3742 2026-10-12 09:00:21,679 INFO [home.signals] Skipping auto-translation for non-Czech page: Investori za 36 biliónov dolárov: od net zero neustupujeme (sk) 2026-10-12 09:00:21,695 INFO [wagtail] Published: "Investori za 36 biliónov dolárov: od net zero neustupujeme" pk=1879 revision_id=3742 2026-10-12 09:00:21,705 INFO [home.signals] ✓ Successfully processed sk: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:21,708 INFO [home.signals] Creating new zh-Hans translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:24,859 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:27,101 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:27,361 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1880 content_type=home.BlogPostPage path=/zh-hans/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:27,378 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1880 revision_id=3743 2026-10-12 09:00:27,384 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1880 from=1876 2026-10-12 09:00:27,586 INFO [wagtail] Page edited: "投资者总计36万亿美元:我们不放弃净零目标" id=1880 revision_id=3744 2026-10-12 09:00:27,721 INFO [home.signals] Skipping auto-translation for non-Czech page: 投资者总计36万亿美元:我们不放弃净零目标 (zh-Hans) 2026-10-12 09:00:27,739 INFO [wagtail] Published: "投资者总计36万亿美元:我们不放弃净零目标" pk=1880 revision_id=3744 2026-10-12 09:00:27,748 INFO [home.signals] ✓ Successfully processed zh-Hans: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:27,751 INFO [home.signals] Creating new tr translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:31,065 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:33,461 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:33,665 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1881 content_type=home.BlogPostPage path=/anasayfa/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:33,685 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1881 revision_id=3745 2026-10-12 09:00:33,691 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1881 from=1876 2026-10-12 09:00:33,855 INFO [wagtail] Page edited: "36 trilyon dolar değerindeki yatırımcılar: net sıfır hedefinden vazgeçmiyoruz" id=1881 revision_id=3746 2026-10-12 09:00:33,892 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '36 trilyon dolar değerindeki yatırımcılar: net sıfır hedefinden vazgeçmiyoruz' id=1881 2026-10-12 09:00:33,901 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:34,029 INFO [home.signals] Skipping auto-translation for non-Czech page: 36 trilyon dolar değerindeki yatırımcılar: net sıfır hedefinden vazgeçmiyoruz (tr) 2026-10-12 09:00:34,044 INFO [wagtail] Published: "36 trilyon dolar değerindeki yatırımcılar: net sıfır hedefinden vazgeçmiyoruz" pk=1881 revision_id=3746 2026-10-12 09:00:34,054 INFO [home.signals] ✓ Successfully processed tr: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:34,058 INFO [home.signals] Creating new vi translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:37,698 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:40,335 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:40,545 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1882 content_type=home.BlogPostPage path=/trang-chu/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:40,557 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1882 revision_id=3747 2026-10-12 09:00:40,561 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1882 from=1876 2026-10-12 09:00:40,665 INFO [wagtail] Page edited: "Các nhà đầu tư trị giá 36 nghìn tỷ đô la: chúng tôi không từ bỏ mục tiêu net zero" id=1882 revision_id=3748 2026-10-12 09:00:40,703 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Các nhà đầu tư trị giá 36 nghìn tỷ đô la: chúng tôi không từ bỏ mục tiêu net zero' id=1882 2026-10-12 09:00:40,712 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:40,850 INFO [home.signals] Skipping auto-translation for non-Czech page: Các nhà đầu tư trị giá 36 nghìn tỷ đô la: chúng tôi không từ bỏ mục tiêu net zero (vi) 2026-10-12 09:00:40,868 INFO [wagtail] Published: "Các nhà đầu tư trị giá 36 nghìn tỷ đô la: chúng tôi không từ bỏ mục tiêu net zero" pk=1882 revision_id=3748 2026-10-12 09:00:40,885 INFO [home.signals] ✓ Successfully processed vi: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:40,892 INFO [home.signals] Creating new hi translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:44,247 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:47,045 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:47,245 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1883 content_type=home.BlogPostPage path=/hi/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:47,266 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1883 revision_id=3749 2026-10-12 09:00:47,273 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1883 from=1876 2026-10-12 09:00:47,452 INFO [wagtail] Page edited: "36 ट्रिलियन डॉलर के निवेशक: हम नेट ज़ीरो से नहीं हटेंगे" id=1883 revision_id=3750 2026-10-12 09:00:47,494 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: '36 ट्रिलियन डॉलर के निवेशक: हम नेट ज़ीरो से नहीं हटेंगे' id=1883 2026-10-12 09:00:47,507 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:47,644 INFO [home.signals] Skipping auto-translation for non-Czech page: 36 ट्रिलियन डॉलर के निवेशक: हम नेट ज़ीरो से नहीं हटेंगे (hi) 2026-10-12 09:00:47,660 INFO [wagtail] Published: "36 ट्रिलियन डॉलर के निवेशक: हम नेट ज़ीरो से नहीं हटेंगे" pk=1883 revision_id=3750 2026-10-12 09:00:47,670 INFO [home.signals] ✓ Successfully processed hi: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:47,674 INFO [home.signals] Creating new fr translation for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:50,867 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:53,136 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:00:53,309 INFO [wagtail] Page created: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1884 content_type=home.BlogPostPage path=/home-fr/blog/investori-za-36-bilionu-dolaru-od-net-zero-neustupujeme/ 2026-10-12 09:00:53,333 INFO [wagtail] Page edited: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1884 revision_id=3751 2026-10-12 09:00:53,342 INFO [wagtail] Page copied: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" id=1884 from=1876 2026-10-12 09:00:53,532 INFO [wagtail] Page edited: "Investisseurs pour 36 billions de dollars : nous ne reculons pas sur le net zéro" id=1884 revision_id=3752 2026-10-12 09:00:53,575 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'Investisseurs pour 36 billions de dollars : nous ne reculons pas sur le net zéro' id=1884 2026-10-12 09:00:53,587 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-12 09:00:53,736 INFO [home.signals] Skipping auto-translation for non-Czech page: Investisseurs pour 36 billions de dollars : nous ne reculons pas sur le net zéro (fr) 2026-10-12 09:00:53,753 INFO [wagtail] Published: "Investisseurs pour 36 billions de dollars : nous ne reculons pas sur le net zéro" pk=1884 revision_id=3752 2026-10-12 09:00:53,764 INFO [home.signals] ✓ Successfully processed fr: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:53,765 INFO [home.signals] Completed auto-translation workflow for: Investoři za 36 bilionů dolarů: od net zero neustupujeme 2026-10-12 09:00:53,783 INFO [wagtail] Published: "Investoři za 36 bilionů dolarů: od net zero neustupujeme" pk=1876 revision_id=3736 2026-10-12 09:00:58,784 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 09:01:01,316 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:01,319 INFO [fb-sync.free_images] Photo queries: ['offshore wind turbines', 'solar farm', 'oil refinery complex', 'European Parliament building'] 2026-10-12 09:01:07,856 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:38,995 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 503 Service Unavailable" 2026-10-12 09:01:38,997 INFO [groq._base_client] Retrying request to /openai/v1/chat/completions in 0.491173 seconds 2026-10-12 09:01:41,648 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:43,778 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:46,485 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:48,409 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-12 09:01:48,412 INFO [fb-sync.free_images] Image chosen: pexels "Serene landscape of offshore wind turbines reflecting on cal" (Pexels Licence) 2026-10-12 09:01:49,039 INFO [fb-sync.worker] Image added ID=1876: stock:pexels (Pexels Licence) 2026-10-12 09:01:50,095 INFO [fb-sync] Sync done: 1 new posts in 110s (source=graph_api, scraped=50, skips={'duplicate_exact': 48, 'empty_body': 1}) 2026-10-12 09:01:50,139 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 09:01:50,139 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 10:00:00 UTC)" executed successfully 2026-10-12 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 11:00:00 UTC)" (scheduled at 2026-10-12 10:00:00+00:00) 2026-10-12 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-12 10:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 10:00:01,308 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 10:00:01,310 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 10:00:01,312 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 10:00:01,312 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 10:00:01,356 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 10:00:01,407 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 10:00:01,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 11:00:00 UTC)" executed successfully 2026-10-12 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 12:00:00 UTC)" (scheduled at 2026-10-12 11:00:00+00:00) 2026-10-12 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-12 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 11:00:01,060 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 11:00:01,064 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 11:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 11:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 11:00:01,117 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 11:00:01,185 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 11:00:01,186 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 12:00:00 UTC)" executed successfully 2026-10-12 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 13:00:00 UTC)" (scheduled at 2026-10-12 12:00:00+00:00) 2026-10-12 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-12 12:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 12:00:01,153 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 12:00:01,155 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 12:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 12:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 12:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 12:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 12:00:01,269 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 13:00:00 UTC)" executed successfully 2026-10-12 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 14:00:00 UTC)" (scheduled at 2026-10-12 13:00:00+00:00) 2026-10-12 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 13:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 13:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 13:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 13:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 13:00:01,158 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 13:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 13:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 14:00:00 UTC)" executed successfully 2026-10-12 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 15:00:00 UTC)" (scheduled at 2026-10-12 14:00:00+00:00) 2026-10-12 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-12 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 14:00:02,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 14:00:02,208 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 14:00:02,213 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 14:00:02,213 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 14:00:02,293 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 14:00:02,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 14:00:02,376 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 15:00:00 UTC)" executed successfully 2026-10-12 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 16:00:00 UTC)" (scheduled at 2026-10-12 15:00:00+00:00) 2026-10-12 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-12 15:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 15:00:01,566 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 15:00:01,569 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 15:00:01,572 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 15:00:01,572 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 15:00:01,638 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 15:00:01,712 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 15:00:01,712 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 16:00:00 UTC)" executed successfully 2026-10-12 16:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 17:00:00 UTC)" (scheduled at 2026-10-12 16:00:00+00:00) 2026-10-12 16:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-12 16:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 16:00:01,460 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 16:00:01,463 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 16:00:01,466 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 16:00:01,466 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 16:00:01,526 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 16:00:01,584 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 16:00:01,584 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 17:00:00 UTC)" executed successfully 2026-10-12 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 18:00:00 UTC)" (scheduled at 2026-10-12 17:00:00+00:00) 2026-10-12 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-12 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 17:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 17:00:01,301 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 17:00:01,304 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 17:00:01,304 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 17:00:01,370 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 17:00:01,443 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 17:00:01,444 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 18:00:00 UTC)" executed successfully 2026-10-12 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 19:00:00 UTC)" (scheduled at 2026-10-12 18:00:00+00:00) 2026-10-12 18:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-12 18:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 18:00:01,511 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 18:00:01,513 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 18:00:01,515 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 18:00:01,516 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 18:00:01,578 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 18:00:01,651 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 18:00:01,652 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 19:00:00 UTC)" executed successfully 2026-10-12 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 20:00:00 UTC)" (scheduled at 2026-10-12 19:00:00+00:00) 2026-10-12 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-12 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 19:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 19:00:01,170 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 19:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 19:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 19:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 19:00:01,283 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 19:00:01,283 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 20:00:00 UTC)" executed successfully 2026-10-12 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 21:00:00 UTC)" (scheduled at 2026-10-12 20:00:00+00:00) 2026-10-12 20:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 20:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 20:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 20:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 20:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 20:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 20:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 20:00:01,312 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 20:00:01,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 21:00:00 UTC)" executed successfully 2026-10-12 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 22:00:00 UTC)" (scheduled at 2026-10-12 21:00:00+00:00) 2026-10-12 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 21:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 21:00:02,589 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 21:00:02,590 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 21:00:02,593 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 21:00:02,594 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 21:00:02,669 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 21:00:02,730 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 21:00:02,731 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 22:00:00 UTC)" executed successfully 2026-10-12 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 23:00:00 UTC)" (scheduled at 2026-10-12 22:00:00+00:00) 2026-10-12 22:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-12 22:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 22:00:01,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 22:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 22:00:01,052 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 22:00:01,052 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 22:00:01,097 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 22:00:01,146 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 22:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-12 23:00:00 UTC)" executed successfully 2026-10-12 23:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 00:00:00 UTC)" (scheduled at 2026-10-12 23:00:00+00:00) 2026-10-12 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-12 23:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-12 23:00:03,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-12 23:00:03,158 INFO [fb-sync.worker] Scraped 50 posts 2026-10-12 23:00:03,161 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-12 23:00:03,161 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-12 23:00:03,206 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-12 23:00:03,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-12 23:00:03,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 00:00:00 UTC)" executed successfully 2026-10-13 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 01:00:00 UTC)" (scheduled at 2026-10-13 00:00:00+00:00) 2026-10-13 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 00:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 00:00:01,017 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 00:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 00:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 00:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 00:00:01,064 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 00:00:01,133 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 00:00:01,134 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 01:00:00 UTC)" executed successfully 2026-10-13 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 02:00:00 UTC)" (scheduled at 2026-10-13 01:00:00+00:00) 2026-10-13 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 01:00:00,928 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 01:00:00,930 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 01:00:00,932 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 01:00:00,932 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 01:00:00,992 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 01:00:01,039 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 01:00:01,040 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 02:00:00 UTC)" executed successfully 2026-10-13 02:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 03:00:00 UTC)" (scheduled at 2026-10-13 02:00:00+00:00) 2026-10-13 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 02:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 02:00:01,423 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 02:00:01,425 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 02:00:01,428 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 02:00:01,428 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 02:00:01,481 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 02:00:01,532 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 02:00:01,532 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 03:00:00 UTC)" executed successfully 2026-10-13 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 04:00:00 UTC)" (scheduled at 2026-10-13 03:00:00+00:00) 2026-10-13 03:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-13 03:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 03:00:01,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 03:00:01,054 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 03:00:01,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 03:00:01,056 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 03:00:01,100 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 03:00:01,153 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 03:00:01,153 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 04:00:00 UTC)" executed successfully 2026-10-13 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 05:00:00 UTC)" (scheduled at 2026-10-13 04:00:00+00:00) 2026-10-13 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 04:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 04:00:01,507 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 04:00:01,510 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 04:00:01,512 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 04:00:01,513 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 04:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 04:00:01,648 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 04:00:01,648 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 05:00:00 UTC)" executed successfully 2026-10-13 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 06:00:00 UTC)" (scheduled at 2026-10-13 05:00:00+00:00) 2026-10-13 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-13 05:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 05:00:00,932 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 05:00:00,935 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 05:00:00,938 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 05:00:00,939 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 05:00:00,998 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 05:00:01,072 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 05:00:01,072 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 06:00:00 UTC)" executed successfully 2026-10-13 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 07:00:00 UTC)" (scheduled at 2026-10-13 06:00:00+00:00) 2026-10-13 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 06:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 06:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 06:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 06:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 06:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 06:00:01,197 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 06:00:01,197 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 07:00:00 UTC)" executed successfully 2026-10-13 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 08:00:00 UTC)" (scheduled at 2026-10-13 07:00:00+00:00) 2026-10-13 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 07:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 07:00:01,264 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 07:00:01,267 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 07:00:01,269 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 07:00:01,269 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 07:00:01,328 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 07:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 07:00:01,388 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 08:00:00 UTC)" executed successfully 2026-10-13 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 09:00:00 UTC)" (scheduled at 2026-10-13 08:00:00+00:00) 2026-10-13 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-13 08:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 08:00:01,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 08:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 08:00:01,052 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 08:00:01,053 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 08:00:01,099 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 08:00:01,151 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 08:00:01,152 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 09:00:00 UTC)" executed successfully 2026-10-13 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 10:00:00 UTC)" (scheduled at 2026-10-13 09:00:00+00:00) 2026-10-13 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 09:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 09:00:02,819 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 09:00:02,822 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 09:00:02,824 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 09:00:02,825 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 09:00:02,889 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 09:00:02,962 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 09:00:02,962 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 10:00:00 UTC)" executed successfully 2026-10-13 10:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 11:00:00 UTC)" (scheduled at 2026-10-13 10:00:00+00:00) 2026-10-13 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-13 10:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 10:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 10:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 10:00:01,174 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 10:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 10:00:01,223 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 10:00:01,280 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 10:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 11:00:00 UTC)" executed successfully 2026-10-13 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 12:00:00 UTC)" (scheduled at 2026-10-13 11:00:00+00:00) 2026-10-13 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-13 11:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 11:00:01,380 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 11:00:01,383 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 11:00:01,386 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 11:00:01,387 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 11:00:01,464 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 11:00:01,541 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 11:00:01,542 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 12:00:00 UTC)" executed successfully 2026-10-13 12:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 13:00:00 UTC)" (scheduled at 2026-10-13 12:00:00+00:00) 2026-10-13 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 12:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 12:00:01,249 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 12:00:01,251 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 12:00:01,254 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 12:00:01,255 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 12:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 12:00:01,393 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 12:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 13:00:00 UTC)" executed successfully 2026-10-13 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 14:00:00 UTC)" (scheduled at 2026-10-13 13:00:00+00:00) 2026-10-13 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-13 13:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 13:00:01,065 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 13:00:01,067 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 13:00:01,070 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 13:00:01,071 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 13:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 13:00:01,202 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 13:00:01,202 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 14:00:00 UTC)" executed successfully 2026-10-13 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 15:00:00 UTC)" (scheduled at 2026-10-13 14:00:00+00:00) 2026-10-13 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-13 14:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 14:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 14:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 14:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 14:00:01,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 14:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 14:00:01,284 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 14:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 15:00:00 UTC)" executed successfully 2026-10-13 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 16:00:00 UTC)" (scheduled at 2026-10-13 15:00:00+00:00) 2026-10-13 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 15:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 15:00:01,329 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 15:00:01,332 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 15:00:01,335 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 15:00:01,336 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 15:00:01,407 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 15:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 15:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 16:00:00 UTC)" executed successfully 2026-10-13 16:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 17:00:00 UTC)" (scheduled at 2026-10-13 16:00:00+00:00) 2026-10-13 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-13 16:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 16:00:01,303 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 16:00:01,305 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 16:00:01,308 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 16:00:01,309 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 16:00:01,375 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 16:00:01,449 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 16:00:01,450 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 17:00:00 UTC)" executed successfully 2026-10-13 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 18:00:00 UTC)" (scheduled at 2026-10-13 17:00:00+00:00) 2026-10-13 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-13 17:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 17:00:01,133 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 17:00:01,135 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 17:00:01,138 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 17:00:01,138 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 17:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 17:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 17:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 18:00:00 UTC)" executed successfully 2026-10-13 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 19:00:00 UTC)" (scheduled at 2026-10-13 18:00:00+00:00) 2026-10-13 18:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 18:00:01,326 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 18:00:01,328 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 18:00:01,330 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 18:00:01,330 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 18:00:01,401 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 18:00:01,481 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 18:00:01,481 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 19:00:00 UTC)" executed successfully 2026-10-13 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 20:00:00 UTC)" (scheduled at 2026-10-13 19:00:00+00:00) 2026-10-13 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-13 19:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 19:00:01,748 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 19:00:01,751 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 19:00:01,754 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 19:00:01,754 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 19:00:01,830 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 19:00:01,907 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 19:00:01,908 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 20:00:00 UTC)" executed successfully 2026-10-13 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 21:00:00 UTC)" (scheduled at 2026-10-13 20:00:00+00:00) 2026-10-13 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-13 20:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 20:00:01,245 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 20:00:01,248 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 20:00:01,253 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 20:00:01,254 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 20:00:01,329 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 20:00:01,408 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 20:00:01,409 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 21:00:00 UTC)" executed successfully 2026-10-13 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 22:00:00 UTC)" (scheduled at 2026-10-13 21:00:00+00:00) 2026-10-13 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-13 21:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 21:00:01,710 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 21:00:01,713 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 21:00:01,716 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 21:00:01,716 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 21:00:01,787 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 21:00:01,862 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 21:00:01,862 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 22:00:00 UTC)" executed successfully 2026-10-13 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 23:00:00 UTC)" (scheduled at 2026-10-13 22:00:00+00:00) 2026-10-13 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-13 22:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 22:00:00,985 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 22:00:00,987 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 22:00:00,989 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 22:00:00,989 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 22:00:01,041 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 22:00:01,089 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 22:00:01,089 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-13 23:00:00 UTC)" executed successfully 2026-10-13 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 00:00:00 UTC)" (scheduled at 2026-10-13 23:00:00+00:00) 2026-10-13 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-13 23:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-13 23:00:01,683 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-13 23:00:01,685 INFO [fb-sync.worker] Scraped 50 posts 2026-10-13 23:00:01,688 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-13 23:00:01,688 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-13 23:00:01,758 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-13 23:00:01,839 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-13 23:00:01,839 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 00:00:00 UTC)" executed successfully 2026-10-14 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 01:00:00 UTC)" (scheduled at 2026-10-14 00:00:00+00:00) 2026-10-14 00:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-14 00:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 00:00:01,750 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 00:00:01,753 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 00:00:01,756 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 00:00:01,756 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 00:00:01,830 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 00:00:01,899 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 00:00:01,899 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 01:00:00 UTC)" executed successfully 2026-10-14 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 02:00:00 UTC)" (scheduled at 2026-10-14 01:00:00+00:00) 2026-10-14 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-14 01:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 01:00:01,562 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 01:00:01,564 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 01:00:01,567 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 01:00:01,568 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 01:00:01,638 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 01:00:01,729 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 01:00:01,730 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 02:00:00 UTC)" executed successfully 2026-10-14 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 03:00:00 UTC)" (scheduled at 2026-10-14 02:00:00+00:00) 2026-10-14 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-14 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 02:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 02:00:01,056 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 02:00:01,059 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 02:00:01,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 02:00:01,128 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 02:00:01,212 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 02:00:01,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 03:00:00 UTC)" executed successfully 2026-10-14 03:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 04:00:00 UTC)" (scheduled at 2026-10-14 03:00:00+00:00) 2026-10-14 03:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-14 03:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 03:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 03:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 03:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 03:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 03:00:01,141 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 03:00:01,189 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 03:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 04:00:00 UTC)" executed successfully 2026-10-14 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 05:00:00 UTC)" (scheduled at 2026-10-14 04:00:00+00:00) 2026-10-14 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-14 04:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 04:00:01,251 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 04:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 04:00:01,257 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 04:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 04:00:01,331 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 04:00:01,420 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 04:00:01,421 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 05:00:00 UTC)" executed successfully 2026-10-14 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 06:00:00 UTC)" (scheduled at 2026-10-14 05:00:00+00:00) 2026-10-14 05:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-14 05:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 05:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 05:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 05:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 05:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 05:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 05:00:01,298 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 05:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 06:00:00 UTC)" executed successfully 2026-10-14 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 07:00:00 UTC)" (scheduled at 2026-10-14 06:00:00+00:00) 2026-10-14 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-14 06:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 06:00:01,391 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 06:00:01,394 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 06:00:01,397 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 06:00:01,397 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 06:00:01,458 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 06:00:01,530 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 06:00:01,531 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 07:00:00 UTC)" executed successfully 2026-10-14 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 08:00:00 UTC)" (scheduled at 2026-10-14 07:00:00+00:00) 2026-10-14 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-14 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 07:00:01,175 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 07:00:01,177 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 07:00:01,179 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 07:00:01,180 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 07:00:01,229 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 07:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 07:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 08:00:00 UTC)" executed successfully 2026-10-14 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 09:00:00 UTC)" (scheduled at 2026-10-14 08:00:00+00:00) 2026-10-14 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-14 08:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 08:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 08:00:01,265 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 08:00:01,268 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 08:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 08:00:01,319 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 08:00:01,368 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 08:00:01,369 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 09:00:00 UTC)" executed successfully 2026-10-14 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 10:00:00 UTC)" (scheduled at 2026-10-14 09:00:00+00:00) 2026-10-14 09:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-14 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 09:00:02,431 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 09:00:02,434 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 09:00:02,437 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 09:00:02,437 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 09:00:02,512 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 09:00:02,594 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 09:00:02,595 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 10:00:00 UTC)" executed successfully 2026-10-14 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 11:00:00 UTC)" (scheduled at 2026-10-14 10:00:00+00:00) 2026-10-14 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-14 10:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 10:00:01,143 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 10:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 10:00:01,148 INFO [fb-sync.worker] New articles: 2 | skips: {'duplicate_exact': 48} 2026-10-14 10:00:01,148 INFO [fb-sync.worker] Publishing [1/2] BNP Paribas Asset Management představil strategii udrži... 2026-10-14 10:00:01,182 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1885 content_type=home.BlogPostPage path=/home/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:01,322 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1885 revision_id=3753 2026-10-14 10:00:01,420 INFO [home.signals] Starting auto-translation for blog post: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 (ID: 1885) 2026-10-14 10:00:01,428 INFO [home.signals] Creating new en translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:03,650 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:04,729 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:04,934 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1886 content_type=home.BlogPostPage path=/home-1/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:04,956 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1886 revision_id=3754 2026-10-14 10:00:04,964 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1886 from=1885 2026-10-14 10:00:05,126 INFO [wagtail] Page edited: "BNP Paribas Asset Management presented a sustainability strategy to 2030" id=1886 revision_id=3755 2026-10-14 10:00:05,197 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'BNP Paribas Asset Management presented a sustainability strategy to 2030' id=1886 2026-10-14 10:00:05,217 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-14 10:00:05,387 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management presented a sustainability strategy to 2030 (en) 2026-10-14 10:00:05,406 INFO [wagtail] Published: "BNP Paribas Asset Management presented a sustainability strategy to 2030" pk=1886 revision_id=3755 2026-10-14 10:00:05,422 INFO [home.signals] ✓ Successfully processed en: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:05,430 INFO [home.signals] Creating new de translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:08,672 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:09,673 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:09,850 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1887 content_type=home.BlogPostPage path=/startseite/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:09,864 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1887 revision_id=3756 2026-10-14 10:00:09,870 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1887 from=1885 2026-10-14 10:00:10,050 INFO [wagtail] Page edited: "BNP Paribas Asset Management stellte die Nachhaltigkeitsstrategie bis 2030 vor." id=1887 revision_id=3757 2026-10-14 10:00:10,235 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management stellte die Nachhaltigkeitsstrategie bis 2030 vor. (de) 2026-10-14 10:00:10,258 INFO [wagtail] Published: "BNP Paribas Asset Management stellte die Nachhaltigkeitsstrategie bis 2030 vor." pk=1887 revision_id=3757 2026-10-14 10:00:10,273 INFO [home.signals] ✓ Successfully processed de: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:10,279 INFO [home.signals] Creating new sk translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:13,504 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:14,401 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:14,590 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1888 content_type=home.BlogPostPage path=/domov/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:14,616 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1888 revision_id=3758 2026-10-14 10:00:14,623 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1888 from=1885 2026-10-14 10:00:14,826 INFO [wagtail] Page edited: "BNP Paribas Asset Management predstavil stratégiu udržateľnosti do roku 2030" id=1888 revision_id=3759 2026-10-14 10:00:14,892 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'BNP Paribas Asset Management predstavil stratégiu udržateľnosti do roku 2030' id=1888 2026-10-14 10:00:14,907 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-14 10:00:15,031 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management predstavil stratégiu udržateľnosti do roku 2030 (sk) 2026-10-14 10:00:15,058 INFO [wagtail] Published: "BNP Paribas Asset Management predstavil stratégiu udržateľnosti do roku 2030" pk=1888 revision_id=3759 2026-10-14 10:00:15,071 INFO [home.signals] ✓ Successfully processed sk: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:15,077 INFO [home.signals] Creating new zh-Hans translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:18,587 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:19,722 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:19,902 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1889 content_type=home.BlogPostPage path=/zh-hans/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:19,922 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1889 revision_id=3760 2026-10-14 10:00:19,928 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1889 from=1885 2026-10-14 10:00:20,082 INFO [wagtail] Page edited: "BNP Paribas Asset Management 推出了至2030年的可持续发展战略" id=1889 revision_id=3761 2026-10-14 10:00:20,196 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management 推出了至2030年的可持续发展战略 (zh-Hans) 2026-10-14 10:00:20,214 INFO [wagtail] Published: "BNP Paribas Asset Management 推出了至2030年的可持续发展战略" pk=1889 revision_id=3761 2026-10-14 10:00:20,225 INFO [home.signals] ✓ Successfully processed zh-Hans: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:20,230 INFO [home.signals] Creating new tr translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:23,701 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:24,922 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:25,074 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1890 content_type=home.BlogPostPage path=/anasayfa/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:25,088 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1890 revision_id=3762 2026-10-14 10:00:25,096 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1890 from=1885 2026-10-14 10:00:25,269 INFO [wagtail] Page edited: "BNP Paribas Asset Management, 2030 yılına kadar sürdürülebilirlik stratejisini tanıttı" id=1890 revision_id=3763 2026-10-14 10:00:25,309 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'BNP Paribas Asset Management, 2030 yılına kadar sürdürülebilirlik stratejisini tanıttı' id=1890 2026-10-14 10:00:25,318 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-14 10:00:25,439 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management, 2030 yılına kadar sürdürülebilirlik stratejisini tanıttı (tr) 2026-10-14 10:00:25,457 INFO [wagtail] Published: "BNP Paribas Asset Management, 2030 yılına kadar sürdürülebilirlik stratejisini tanıttı" pk=1890 revision_id=3763 2026-10-14 10:00:25,470 INFO [home.signals] ✓ Successfully processed tr: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:25,475 INFO [home.signals] Creating new vi translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:28,949 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:30,262 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:30,458 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1891 content_type=home.BlogPostPage path=/trang-chu/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:30,483 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1891 revision_id=3764 2026-10-14 10:00:30,490 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1891 from=1885 2026-10-14 10:00:30,630 INFO [wagtail] Page edited: "BNP Paribas Asset Management đã công bố chiến lược bền vững đến năm 2030" id=1891 revision_id=3765 2026-10-14 10:00:30,664 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'BNP Paribas Asset Management đã công bố chiến lược bền vững đến năm 2030' id=1891 2026-10-14 10:00:30,672 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-14 10:00:30,803 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management đã công bố chiến lược bền vững đến năm 2030 (vi) 2026-10-14 10:00:30,822 INFO [wagtail] Published: "BNP Paribas Asset Management đã công bố chiến lược bền vững đến năm 2030" pk=1891 revision_id=3765 2026-10-14 10:00:30,833 INFO [home.signals] ✓ Successfully processed vi: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:30,840 INFO [home.signals] Creating new hi translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:34,206 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:35,207 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:35,413 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1892 content_type=home.BlogPostPage path=/hi/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:35,435 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1892 revision_id=3766 2026-10-14 10:00:35,442 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1892 from=1885 2026-10-14 10:00:35,645 INFO [wagtail] Page edited: "BNP Paribas एसेट मैनेजमेंट ने 2030 तक की स्थिरता रणनीति प्रस्तुत की" id=1892 revision_id=3767 2026-10-14 10:00:35,836 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas एसेट मैनेजमेंट ने 2030 तक की स्थिरता रणनीति प्रस्तुत की (hi) 2026-10-14 10:00:35,861 INFO [wagtail] Published: "BNP Paribas एसेट मैनेजमेंट ने 2030 तक की स्थिरता रणनीति प्रस्तुत की" pk=1892 revision_id=3767 2026-10-14 10:00:35,872 INFO [home.signals] ✓ Successfully processed hi: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:35,878 INFO [home.signals] Creating new fr translation for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:39,097 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:40,054 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:40,239 INFO [wagtail] Page created: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1893 content_type=home.BlogPostPage path=/home-fr/blog/bnp-paribas-asset-management-predstavil-strategii-udrzitelnosti-do-roku-2030/ 2026-10-14 10:00:40,256 INFO [wagtail] Page edited: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1893 revision_id=3768 2026-10-14 10:00:40,263 INFO [wagtail] Page copied: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" id=1893 from=1885 2026-10-14 10:00:40,425 INFO [wagtail] Page edited: "BNP Paribas Asset Management a présenté la stratégie de durabilité jusqu'en 2030" id=1893 revision_id=3769 2026-10-14 10:00:40,489 INFO [wagtail.contrib.redirects.signal_handlers] Creating redirects for page: 'BNP Paribas Asset Management a présenté la stratégie de durabilité jusqu'en 2030' id=1893 2026-10-14 10:00:40,502 INFO [wagtail.contrib.redirects.signal_handlers] 1/1 redirects were created successfully. 2026-10-14 10:00:40,647 INFO [home.signals] Skipping auto-translation for non-Czech page: BNP Paribas Asset Management a présenté la stratégie de durabilité jusqu'en 2030 (fr) 2026-10-14 10:00:40,670 INFO [wagtail] Published: "BNP Paribas Asset Management a présenté la stratégie de durabilité jusqu'en 2030" pk=1893 revision_id=3769 2026-10-14 10:00:40,689 INFO [home.signals] ✓ Successfully processed fr: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:40,690 INFO [home.signals] Completed auto-translation workflow for: BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030 2026-10-14 10:00:40,716 INFO [wagtail] Published: "BNP Paribas Asset Management představil strategii udržitelnosti do roku 2030" pk=1885 revision_id=3753 2026-10-14 10:00:45,717 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 10:00:47,976 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:47,979 INFO [fb-sync.free_images] Photo queries: ['BNP Paribas headquarters Paris', 'wind turbines field', 'solar panel farm', 'industrial chemical plant'] 2026-10-14 10:00:54,045 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:56,405 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:00:58,570 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:01:00,947 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:01:03,335 INFO [httpx] HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK" 2026-10-14 10:01:03,339 INFO [fb-sync.free_images] Image chosen: pexels "Close-up of a modern office building facade in Utrecht, Neth" (Pexels Licence) 2026-10-14 10:01:04,136 INFO [fb-sync.worker] Image added ID=1885: stock:pexels (Pexels Licence) 2026-10-14 10:01:05,210 INFO [fb-sync] Sync done: 1 new posts in 65s (source=graph_api, scraped=50, skips={'duplicate_exact': 48, 'empty_body': 1}) 2026-10-14 10:01:05,264 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 10:01:05,264 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 11:00:00 UTC)" executed successfully 2026-10-14 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 12:00:00 UTC)" (scheduled at 2026-10-14 11:00:00+00:00) 2026-10-14 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-14 11:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 11:00:02,186 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 11:00:02,188 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 11:00:02,191 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 11:00:02,191 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 11:00:02,241 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 11:00:02,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 11:00:02,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 12:00:00 UTC)" executed successfully 2026-10-14 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 13:00:00 UTC)" (scheduled at 2026-10-14 12:00:00+00:00) 2026-10-14 12:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-14 12:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 12:00:01,301 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 12:00:01,302 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 12:00:01,304 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 12:00:01,305 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 12:00:01,355 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 12:00:01,405 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 12:00:01,405 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 13:00:00 UTC)" executed successfully 2026-10-14 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 14:00:00 UTC)" (scheduled at 2026-10-14 13:00:00+00:00) 2026-10-14 13:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-14 13:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 13:00:01,182 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 13:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 13:00:01,186 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 13:00:01,186 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 13:00:01,240 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 13:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 13:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 14:00:00 UTC)" executed successfully 2026-10-14 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 15:00:00 UTC)" (scheduled at 2026-10-14 14:00:00+00:00) 2026-10-14 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-14 14:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 14:00:01,238 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 14:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 14:00:01,241 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 14:00:01,241 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 14:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 14:00:01,331 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 14:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 15:00:00 UTC)" executed successfully 2026-10-14 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 16:00:00 UTC)" (scheduled at 2026-10-14 15:00:00+00:00) 2026-10-14 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-14 15:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 15:00:01,343 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 15:00:01,344 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 15:00:01,347 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 15:00:01,348 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 15:00:01,404 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 15:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 15:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 16:00:00 UTC)" executed successfully 2026-10-14 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 17:00:00 UTC)" (scheduled at 2026-10-14 16:00:00+00:00) 2026-10-14 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-14 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 16:00:02,611 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 16:00:02,614 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 16:00:02,617 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 16:00:02,617 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 16:00:02,677 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 16:00:02,731 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 16:00:02,732 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 17:00:00 UTC)" executed successfully 2026-10-14 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 18:00:00 UTC)" (scheduled at 2026-10-14 17:00:00+00:00) 2026-10-14 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-14 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 17:00:01,283 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 17:00:01,286 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 17:00:01,289 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 17:00:01,289 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 17:00:01,362 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 17:00:01,450 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 17:00:01,450 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 18:00:00 UTC)" executed successfully 2026-10-14 18:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 19:00:00 UTC)" (scheduled at 2026-10-14 18:00:00+00:00) 2026-10-14 18:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-14 18:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 18:00:01,251 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 18:00:01,254 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 18:00:01,257 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 18:00:01,257 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 18:00:01,327 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 18:00:01,396 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 18:00:01,396 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 19:00:00 UTC)" executed successfully 2026-10-14 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 20:00:00 UTC)" (scheduled at 2026-10-14 19:00:00+00:00) 2026-10-14 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-14 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 19:00:01,126 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 19:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 19:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 19:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 19:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 19:00:01,234 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 19:00:01,234 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 20:00:00 UTC)" executed successfully 2026-10-14 20:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 21:00:00 UTC)" (scheduled at 2026-10-14 20:00:00+00:00) 2026-10-14 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-14 20:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 20:00:01,753 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 20:00:01,756 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 20:00:01,758 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 20:00:01,758 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 20:00:01,810 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 20:00:01,879 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 20:00:01,880 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 21:00:00 UTC)" executed successfully 2026-10-14 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 22:00:00 UTC)" (scheduled at 2026-10-14 21:00:00+00:00) 2026-10-14 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-14 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 21:00:03,240 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 21:00:03,241 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 21:00:03,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 21:00:03,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 21:00:03,295 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 21:00:03,364 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 21:00:03,364 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 22:00:00 UTC)" executed successfully 2026-10-14 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 23:00:00 UTC)" (scheduled at 2026-10-14 22:00:00+00:00) 2026-10-14 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-14 22:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 22:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 22:00:01,122 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 22:00:01,125 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 22:00:01,126 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 22:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 22:00:01,235 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 22:00:01,235 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-14 23:00:00 UTC)" executed successfully 2026-10-14 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 00:00:00 UTC)" (scheduled at 2026-10-14 23:00:00+00:00) 2026-10-14 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-14 23:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-14 23:00:01,032 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-14 23:00:01,035 INFO [fb-sync.worker] Scraped 50 posts 2026-10-14 23:00:01,038 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-14 23:00:01,038 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-14 23:00:01,105 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-14 23:00:01,157 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-14 23:00:01,158 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 00:00:00 UTC)" executed successfully 2026-10-15 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 01:00:00 UTC)" (scheduled at 2026-10-15 00:00:00+00:00) 2026-10-15 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-15 00:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 00:00:00,994 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 00:00:00,996 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 00:00:01,001 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 00:00:01,001 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 00:00:01,061 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 00:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 00:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 01:00:00 UTC)" executed successfully 2026-10-15 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 02:00:00 UTC)" (scheduled at 2026-10-15 01:00:00+00:00) 2026-10-15 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-15 01:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 01:00:01,758 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 01:00:01,761 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 01:00:01,763 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 01:00:01,764 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 01:00:01,817 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 01:00:01,878 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 01:00:01,878 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 02:00:00 UTC)" executed successfully 2026-10-15 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 03:00:00 UTC)" (scheduled at 2026-10-15 02:00:00+00:00) 2026-10-15 02:00:00,024 INFO [fb-sync] Starting FB sync... 2026-10-15 02:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 02:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 02:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 02:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 02:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 02:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 02:00:01,301 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 02:00:01,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 03:00:00 UTC)" executed successfully 2026-10-15 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 03:00:00 UTC)" (scheduled at 2026-10-15 03:00:00+00:00) 2026-10-15 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-15 03:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 03:00:01,027 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 03:00:01,030 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 03:00:01,032 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 03:00:01,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 03:00:01,110 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 03:00:01,180 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 03:00:01,180 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 04:00:00 UTC)" executed successfully 2026-10-15 04:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 05:00:00 UTC)" (scheduled at 2026-10-15 04:00:00+00:00) 2026-10-15 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-15 04:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 04:00:01,572 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 04:00:01,575 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 04:00:01,578 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 04:00:01,578 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 04:00:01,650 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 04:00:01,731 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 04:00:01,731 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 05:00:00 UTC)" executed successfully 2026-10-15 05:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 06:00:00 UTC)" (scheduled at 2026-10-15 05:00:00+00:00) 2026-10-15 05:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-15 05:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 05:00:01,012 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 05:00:01,014 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 05:00:01,016 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 05:00:01,017 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 05:00:01,061 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 05:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 05:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 06:00:00 UTC)" executed successfully 2026-10-15 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 07:00:00 UTC)" (scheduled at 2026-10-15 06:00:00+00:00) 2026-10-15 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-15 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 06:00:01,597 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 06:00:01,599 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 06:00:01,600 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 06:00:01,601 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 06:00:01,651 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 06:00:01,709 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 06:00:01,709 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 07:00:00 UTC)" executed successfully 2026-10-15 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 08:00:00 UTC)" (scheduled at 2026-10-15 07:00:00+00:00) 2026-10-15 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-15 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 07:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 07:00:01,170 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 07:00:01,172 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 07:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 07:00:01,220 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 07:00:01,289 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 07:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 08:00:00 UTC)" executed successfully 2026-10-15 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 09:00:00 UTC)" (scheduled at 2026-10-15 08:00:00+00:00) 2026-10-15 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-15 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 08:00:01,267 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 08:00:01,269 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 08:00:01,272 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 08:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 08:00:01,315 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 08:00:01,366 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 08:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 09:00:00 UTC)" executed successfully 2026-10-15 09:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 10:00:00 UTC)" (scheduled at 2026-10-15 09:00:00+00:00) 2026-10-15 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-15 09:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 09:00:01,088 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 09:00:01,090 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 09:00:01,092 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 09:00:01,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 09:00:01,135 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 09:00:01,179 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 09:00:01,180 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 10:00:00 UTC)" executed successfully 2026-10-15 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 11:00:00 UTC)" (scheduled at 2026-10-15 10:00:00+00:00) 2026-10-15 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-15 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 10:00:01,120 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 10:00:01,122 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 10:00:01,125 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 10:00:01,125 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 10:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 10:00:01,219 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 10:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 11:00:00 UTC)" executed successfully 2026-10-15 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 12:00:00 UTC)" (scheduled at 2026-10-15 11:00:00+00:00) 2026-10-15 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-15 11:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 11:00:01,606 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 11:00:01,609 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 11:00:01,612 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 11:00:01,612 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 11:00:01,672 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 11:00:01,752 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 11:00:01,753 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 12:00:00 UTC)" executed successfully 2026-10-15 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 13:00:00 UTC)" (scheduled at 2026-10-15 12:00:00+00:00) 2026-10-15 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-15 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 12:00:02,389 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 12:00:02,390 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 12:00:02,393 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 12:00:02,393 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 12:00:02,442 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 12:00:02,501 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 12:00:02,501 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 13:00:00 UTC)" executed successfully 2026-10-15 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 14:00:00 UTC)" (scheduled at 2026-10-15 13:00:00+00:00) 2026-10-15 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-15 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 13:00:01,757 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 13:00:01,759 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 13:00:01,763 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 13:00:01,763 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 13:00:01,830 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 13:00:01,900 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 13:00:01,900 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 14:00:00 UTC)" executed successfully 2026-10-15 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 15:00:00 UTC)" (scheduled at 2026-10-15 14:00:00+00:00) 2026-10-15 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-15 14:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 14:00:01,324 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 14:00:01,327 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 14:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 14:00:01,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 14:00:01,380 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 14:00:01,432 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 14:00:01,432 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 15:00:00 UTC)" executed successfully 2026-10-15 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 16:00:00 UTC)" (scheduled at 2026-10-15 15:00:00+00:00) 2026-10-15 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-15 15:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 15:00:01,710 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 15:00:01,712 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 15:00:01,715 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 15:00:01,716 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 15:00:01,786 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 15:00:01,865 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 15:00:01,866 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 16:00:00 UTC)" executed successfully 2026-10-15 16:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 17:00:00 UTC)" (scheduled at 2026-10-15 16:00:00+00:00) 2026-10-15 16:00:00,020 INFO [fb-sync] Starting FB sync... 2026-10-15 16:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 16:00:01,241 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 16:00:01,244 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 16:00:01,246 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 16:00:01,247 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 16:00:01,300 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 16:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 16:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 17:00:00 UTC)" executed successfully 2026-10-15 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 18:00:00 UTC)" (scheduled at 2026-10-15 17:00:00+00:00) 2026-10-15 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-15 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 17:00:01,329 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 17:00:01,332 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 17:00:01,334 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 17:00:01,335 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 17:00:01,388 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 17:00:01,452 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 17:00:01,452 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 18:00:00 UTC)" executed successfully 2026-10-15 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 19:00:00 UTC)" (scheduled at 2026-10-15 18:00:00+00:00) 2026-10-15 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-15 18:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 18:00:01,275 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 18:00:01,278 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 18:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 18:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 18:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 18:00:01,401 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 18:00:01,402 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 19:00:00 UTC)" executed successfully 2026-10-15 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 20:00:00 UTC)" (scheduled at 2026-10-15 19:00:00+00:00) 2026-10-15 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-15 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 19:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 19:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 19:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 19:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 19:00:01,313 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 19:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 19:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 20:00:00 UTC)" executed successfully 2026-10-15 20:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 21:00:00 UTC)" (scheduled at 2026-10-15 20:00:00+00:00) 2026-10-15 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-15 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 20:00:01,527 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 20:00:01,530 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 20:00:01,533 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 20:00:01,533 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 20:00:01,590 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 20:00:01,653 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 20:00:01,653 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 21:00:00 UTC)" executed successfully 2026-10-15 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 22:00:00 UTC)" (scheduled at 2026-10-15 21:00:00+00:00) 2026-10-15 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-15 21:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 21:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 21:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 21:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 21:00:01,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 21:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 21:00:01,191 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 21:00:01,191 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 22:00:00 UTC)" executed successfully 2026-10-15 22:00:00,021 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 23:00:00 UTC)" (scheduled at 2026-10-15 22:00:00+00:00) 2026-10-15 22:00:00,026 INFO [fb-sync] Starting FB sync... 2026-10-15 22:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 22:00:01,163 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 22:00:01,165 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 22:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 22:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 22:00:01,223 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 22:00:01,278 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 22:00:01,278 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-15 23:00:00 UTC)" executed successfully 2026-10-15 23:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 00:00:00 UTC)" (scheduled at 2026-10-15 23:00:00+00:00) 2026-10-15 23:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-15 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-15 23:00:02,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-15 23:00:02,033 INFO [fb-sync.worker] Scraped 50 posts 2026-10-15 23:00:02,036 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-15 23:00:02,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-15 23:00:02,093 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-15 23:00:02,161 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-15 23:00:02,162 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 00:00:00 UTC)" executed successfully 2026-10-16 00:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 01:00:00 UTC)" (scheduled at 2026-10-16 00:00:00+00:00) 2026-10-16 00:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-16 00:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 00:00:01,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 00:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 00:00:01,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 00:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 00:00:01,167 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 00:00:01,245 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 00:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 01:00:00 UTC)" executed successfully 2026-10-16 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 02:00:00 UTC)" (scheduled at 2026-10-16 01:00:00+00:00) 2026-10-16 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 01:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 01:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 01:00:01,123 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 01:00:01,126 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 01:00:01,126 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 01:00:01,169 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 01:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 01:00:01,216 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 02:00:00 UTC)" executed successfully 2026-10-16 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 03:00:00 UTC)" (scheduled at 2026-10-16 02:00:00+00:00) 2026-10-16 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-16 02:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 02:00:01,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 02:00:01,093 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 02:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 02:00:01,095 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 02:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 02:00:01,207 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 02:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 03:00:00 UTC)" executed successfully 2026-10-16 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 04:00:00 UTC)" (scheduled at 2026-10-16 03:00:00+00:00) 2026-10-16 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-16 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 03:00:01,025 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 03:00:01,027 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 03:00:01,029 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 03:00:01,029 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 03:00:01,072 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 03:00:01,117 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 03:00:01,117 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 04:00:00 UTC)" executed successfully 2026-10-16 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 05:00:00 UTC)" (scheduled at 2026-10-16 04:00:00+00:00) 2026-10-16 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 04:00:01,076 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 04:00:01,078 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 04:00:01,080 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 04:00:01,080 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 04:00:01,130 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 04:00:01,190 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 04:00:01,190 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 05:00:00 UTC)" executed successfully 2026-10-16 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 06:00:00 UTC)" (scheduled at 2026-10-16 05:00:00+00:00) 2026-10-16 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 05:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 05:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 05:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 05:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 05:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 05:00:01,257 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 05:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 05:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 06:00:00 UTC)" executed successfully 2026-10-16 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 07:00:00 UTC)" (scheduled at 2026-10-16 06:00:00+00:00) 2026-10-16 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-16 06:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 06:00:01,255 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 06:00:01,257 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 06:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 06:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 06:00:01,317 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 06:00:01,373 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 06:00:01,373 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 07:00:00 UTC)" executed successfully 2026-10-16 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 08:00:00 UTC)" (scheduled at 2026-10-16 07:00:00+00:00) 2026-10-16 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-16 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 07:00:01,217 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 07:00:01,219 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 07:00:01,221 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 07:00:01,222 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 07:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 07:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 07:00:01,346 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 08:00:00 UTC)" executed successfully 2026-10-16 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 09:00:00 UTC)" (scheduled at 2026-10-16 08:00:00+00:00) 2026-10-16 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-16 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 08:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 08:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 08:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 08:00:01,156 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 08:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 08:00:01,290 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 08:00:01,291 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 09:00:00 UTC)" executed successfully 2026-10-16 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 10:00:00 UTC)" (scheduled at 2026-10-16 09:00:00+00:00) 2026-10-16 09:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-16 09:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 09:00:01,139 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 09:00:01,141 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 09:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 09:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 09:00:01,193 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 09:00:01,241 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 09:00:01,241 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 10:00:00 UTC)" executed successfully 2026-10-16 10:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 11:00:00 UTC)" (scheduled at 2026-10-16 10:00:00+00:00) 2026-10-16 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-16 10:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 10:00:01,763 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 10:00:01,765 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 10:00:01,768 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 10:00:01,768 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 10:00:01,836 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 10:00:01,910 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 10:00:01,910 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 11:00:00 UTC)" executed successfully 2026-10-16 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 12:00:00 UTC)" (scheduled at 2026-10-16 11:00:00+00:00) 2026-10-16 11:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-16 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 11:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 11:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 11:00:01,123 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 11:00:01,123 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 11:00:01,170 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 11:00:01,219 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 11:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 12:00:00 UTC)" executed successfully 2026-10-16 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 13:00:00 UTC)" (scheduled at 2026-10-16 12:00:00+00:00) 2026-10-16 12:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-16 12:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 12:00:01,368 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 12:00:01,370 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 12:00:01,372 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 12:00:01,373 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 12:00:01,427 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 12:00:01,483 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 12:00:01,484 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 13:00:00 UTC)" executed successfully 2026-10-16 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 14:00:00 UTC)" (scheduled at 2026-10-16 13:00:00+00:00) 2026-10-16 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-16 13:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 13:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 13:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 13:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 13:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 13:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 13:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 13:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 14:00:00 UTC)" executed successfully 2026-10-16 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 15:00:00 UTC)" (scheduled at 2026-10-16 14:00:00+00:00) 2026-10-16 14:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-16 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 14:00:01,260 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 14:00:01,263 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 14:00:01,266 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 14:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 14:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 14:00:01,391 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 14:00:01,391 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 15:00:00 UTC)" executed successfully 2026-10-16 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 16:00:00 UTC)" (scheduled at 2026-10-16 15:00:00+00:00) 2026-10-16 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 15:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 15:00:01,330 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 15:00:01,332 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 15:00:01,333 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 15:00:01,334 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 15:00:01,380 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 15:00:01,446 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 15:00:01,446 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 16:00:00 UTC)" executed successfully 2026-10-16 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 17:00:00 UTC)" (scheduled at 2026-10-16 16:00:00+00:00) 2026-10-16 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 16:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 16:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 16:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 16:00:01,229 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 16:00:01,229 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 16:00:01,289 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 16:00:01,357 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 16:00:01,357 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 17:00:00 UTC)" executed successfully 2026-10-16 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 18:00:00 UTC)" (scheduled at 2026-10-16 17:00:00+00:00) 2026-10-16 17:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-16 17:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 17:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 17:00:01,207 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 17:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 17:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 17:00:01,287 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 17:00:01,374 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 17:00:01,374 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 18:00:00 UTC)" executed successfully 2026-10-16 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 19:00:00 UTC)" (scheduled at 2026-10-16 18:00:00+00:00) 2026-10-16 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-16 18:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 18:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 18:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 18:00:01,199 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 18:00:01,199 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 18:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 18:00:01,314 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 18:00:01,314 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 19:00:00 UTC)" executed successfully 2026-10-16 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 20:00:00 UTC)" (scheduled at 2026-10-16 19:00:00+00:00) 2026-10-16 19:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-16 19:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 19:00:01,065 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 19:00:01,068 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 19:00:01,070 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 19:00:01,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 19:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 19:00:01,187 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 19:00:01,188 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 20:00:00 UTC)" executed successfully 2026-10-16 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 21:00:00 UTC)" (scheduled at 2026-10-16 20:00:00+00:00) 2026-10-16 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-16 20:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 20:00:00,965 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 20:00:00,967 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 20:00:00,970 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 20:00:00,970 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 20:00:01,022 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 20:00:01,071 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 20:00:01,071 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 21:00:00 UTC)" executed successfully 2026-10-16 21:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 22:00:00 UTC)" (scheduled at 2026-10-16 21:00:00+00:00) 2026-10-16 21:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-16 21:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 21:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 21:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 21:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 21:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 21:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 21:00:01,259 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 21:00:01,260 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 22:00:00 UTC)" executed successfully 2026-10-16 22:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 23:00:00 UTC)" (scheduled at 2026-10-16 22:00:00+00:00) 2026-10-16 22:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-16 22:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 22:00:01,261 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 22:00:01,264 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 22:00:01,266 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 22:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 22:00:01,318 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 22:00:01,371 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 22:00:01,372 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-16 23:00:00 UTC)" executed successfully 2026-10-16 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 00:00:00 UTC)" (scheduled at 2026-10-16 23:00:00+00:00) 2026-10-16 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-16 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-16 23:00:01,340 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-16 23:00:01,343 INFO [fb-sync.worker] Scraped 50 posts 2026-10-16 23:00:01,346 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-16 23:00:01,346 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-16 23:00:01,405 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-16 23:00:01,475 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-16 23:00:01,475 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 00:00:00 UTC)" executed successfully 2026-10-17 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 01:00:00 UTC)" (scheduled at 2026-10-17 00:00:00+00:00) 2026-10-17 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-17 00:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 00:00:01,600 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 00:00:01,602 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 00:00:01,604 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 00:00:01,605 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 00:00:01,665 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 00:00:01,715 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 00:00:01,715 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 01:00:00 UTC)" executed successfully 2026-10-17 01:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 02:00:00 UTC)" (scheduled at 2026-10-17 01:00:00+00:00) 2026-10-17 01:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-17 01:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 01:00:01,106 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 01:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 01:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 01:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 01:00:01,168 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 01:00:01,227 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 01:00:01,227 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 02:00:00 UTC)" executed successfully 2026-10-17 02:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 03:00:00 UTC)" (scheduled at 2026-10-17 02:00:00+00:00) 2026-10-17 02:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-17 02:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 02:00:01,062 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 02:00:01,064 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 02:00:01,067 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 02:00:01,068 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 02:00:01,139 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 02:00:01,214 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 02:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 03:00:00 UTC)" executed successfully 2026-10-17 03:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 04:00:00 UTC)" (scheduled at 2026-10-17 03:00:00+00:00) 2026-10-17 03:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-17 03:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 03:00:01,027 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 03:00:01,029 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 03:00:01,031 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 03:00:01,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 03:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 03:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 03:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 04:00:00 UTC)" executed successfully 2026-10-17 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 05:00:00 UTC)" (scheduled at 2026-10-17 04:00:00+00:00) 2026-10-17 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 04:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 04:00:01,436 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 04:00:01,439 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 04:00:01,442 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 04:00:01,442 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 04:00:01,511 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 04:00:01,570 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 04:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 05:00:00 UTC)" executed successfully 2026-10-17 05:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 06:00:00 UTC)" (scheduled at 2026-10-17 05:00:00+00:00) 2026-10-17 05:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-17 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 05:00:01,803 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 05:00:01,806 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 05:00:01,808 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 05:00:01,809 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 05:00:01,880 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 05:00:01,957 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 05:00:01,958 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 06:00:00 UTC)" executed successfully 2026-10-17 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 07:00:00 UTC)" (scheduled at 2026-10-17 06:00:00+00:00) 2026-10-17 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 06:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 06:00:01,609 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 06:00:01,613 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 06:00:01,615 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 06:00:01,615 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 06:00:01,677 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 06:00:01,750 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 06:00:01,750 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 07:00:00 UTC)" executed successfully 2026-10-17 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 08:00:00 UTC)" (scheduled at 2026-10-17 07:00:00+00:00) 2026-10-17 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-17 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 07:00:01,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 07:00:01,140 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 07:00:01,142 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 07:00:01,143 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 07:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 07:00:01,283 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 07:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 08:00:00 UTC)" executed successfully 2026-10-17 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 09:00:00 UTC)" (scheduled at 2026-10-17 08:00:00+00:00) 2026-10-17 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 08:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 08:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 08:00:01,300 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 08:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 08:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 08:00:01,372 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 08:00:01,449 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 08:00:01,449 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 09:00:00 UTC)" executed successfully 2026-10-17 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 10:00:00 UTC)" (scheduled at 2026-10-17 09:00:00+00:00) 2026-10-17 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-17 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 09:00:01,701 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 09:00:01,703 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 09:00:01,706 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 09:00:01,706 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 09:00:01,767 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 09:00:01,834 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 09:00:01,834 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 10:00:00 UTC)" executed successfully 2026-10-17 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 11:00:00 UTC)" (scheduled at 2026-10-17 10:00:00+00:00) 2026-10-17 10:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-17 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 10:00:01,567 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 10:00:01,569 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 10:00:01,572 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 10:00:01,573 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 10:00:01,643 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 10:00:01,720 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 10:00:01,720 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 11:00:00 UTC)" executed successfully 2026-10-17 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 12:00:00 UTC)" (scheduled at 2026-10-17 11:00:00+00:00) 2026-10-17 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 11:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 11:00:01,103 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 11:00:01,106 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 11:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 11:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 11:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 11:00:01,224 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 11:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 12:00:00 UTC)" executed successfully 2026-10-17 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 13:00:00 UTC)" (scheduled at 2026-10-17 12:00:00+00:00) 2026-10-17 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-17 12:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 12:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 12:00:01,101 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 12:00:01,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 12:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 12:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 12:00:01,207 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 12:00:01,208 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 13:00:00 UTC)" executed successfully 2026-10-17 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 14:00:00 UTC)" (scheduled at 2026-10-17 13:00:00+00:00) 2026-10-17 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-17 13:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 13:00:01,518 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 13:00:01,520 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 13:00:01,523 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 13:00:01,524 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 13:00:01,576 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 13:00:01,644 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 13:00:01,645 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 14:00:00 UTC)" executed successfully 2026-10-17 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 15:00:00 UTC)" (scheduled at 2026-10-17 14:00:00+00:00) 2026-10-17 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-17 14:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 14:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 14:00:01,212 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 14:00:01,215 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 14:00:01,216 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 14:00:01,292 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 14:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 14:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 15:00:00 UTC)" executed successfully 2026-10-17 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 16:00:00 UTC)" (scheduled at 2026-10-17 15:00:00+00:00) 2026-10-17 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 15:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 15:00:00,993 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 15:00:00,995 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 15:00:00,998 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 15:00:00,998 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 15:00:01,056 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 15:00:01,100 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 15:00:01,100 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 16:00:00 UTC)" executed successfully 2026-10-17 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 17:00:00 UTC)" (scheduled at 2026-10-17 16:00:00+00:00) 2026-10-17 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-17 16:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 16:00:01,480 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 16:00:01,483 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 16:00:01,486 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 16:00:01,486 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 16:00:01,555 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 16:00:01,631 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 16:00:01,631 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 17:00:00 UTC)" executed successfully 2026-10-17 17:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 18:00:00 UTC)" (scheduled at 2026-10-17 17:00:00+00:00) 2026-10-17 17:00:00,004 INFO [fb-sync] Starting FB sync... 2026-10-17 17:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 17:00:01,470 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 17:00:01,472 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 17:00:01,475 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 17:00:01,475 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 17:00:01,531 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 17:00:01,604 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 17:00:01,605 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 18:00:00 UTC)" executed successfully 2026-10-17 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 19:00:00 UTC)" (scheduled at 2026-10-17 18:00:00+00:00) 2026-10-17 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 18:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 18:00:01,189 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 18:00:01,191 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 18:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 18:00:01,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 18:00:01,246 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 18:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 18:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 19:00:00 UTC)" executed successfully 2026-10-17 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 20:00:00 UTC)" (scheduled at 2026-10-17 19:00:00+00:00) 2026-10-17 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-17 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 19:00:01,339 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 19:00:01,341 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 19:00:01,343 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 19:00:01,343 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 19:00:01,411 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 19:00:01,479 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 19:00:01,479 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 20:00:00 UTC)" executed successfully 2026-10-17 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 21:00:00 UTC)" (scheduled at 2026-10-17 20:00:00+00:00) 2026-10-17 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-17 20:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 20:00:01,107 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 20:00:01,109 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 20:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 20:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 20:00:01,158 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 20:00:01,211 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 20:00:01,211 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 21:00:00 UTC)" executed successfully 2026-10-17 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 22:00:00 UTC)" (scheduled at 2026-10-17 21:00:00+00:00) 2026-10-17 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-17 21:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 21:00:01,187 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 21:00:01,189 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 21:00:01,192 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 21:00:01,192 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 21:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 21:00:01,335 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 21:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 22:00:00 UTC)" executed successfully 2026-10-17 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 23:00:00 UTC)" (scheduled at 2026-10-17 22:00:00+00:00) 2026-10-17 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 22:00:01,252 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 22:00:01,255 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 22:00:01,258 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 22:00:01,258 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 22:00:01,306 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 22:00:01,358 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 22:00:01,358 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-17 23:00:00 UTC)" executed successfully 2026-10-17 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 00:00:00 UTC)" (scheduled at 2026-10-17 23:00:00+00:00) 2026-10-17 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-17 23:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-17 23:00:01,071 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-17 23:00:01,074 INFO [fb-sync.worker] Scraped 50 posts 2026-10-17 23:00:01,078 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-17 23:00:01,078 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-17 23:00:01,146 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-17 23:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-17 23:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 00:00:00 UTC)" executed successfully 2026-10-18 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 01:00:00 UTC)" (scheduled at 2026-10-18 00:00:00+00:00) 2026-10-18 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-18 00:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 00:00:01,122 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 00:00:01,125 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 00:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 00:00:01,128 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 00:00:01,200 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 00:00:01,280 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 00:00:01,281 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 01:00:00 UTC)" executed successfully 2026-10-18 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 02:00:00 UTC)" (scheduled at 2026-10-18 01:00:00+00:00) 2026-10-18 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-18 01:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 01:00:01,399 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 01:00:01,401 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 01:00:01,405 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 01:00:01,405 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 01:00:01,469 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 01:00:01,531 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 01:00:01,532 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 02:00:00 UTC)" executed successfully 2026-10-18 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 03:00:00 UTC)" (scheduled at 2026-10-18 02:00:00+00:00) 2026-10-18 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-18 02:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 02:00:00,983 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 02:00:00,985 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 02:00:00,987 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 02:00:00,987 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 02:00:01,043 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 02:00:01,120 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 02:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 03:00:00 UTC)" executed successfully 2026-10-18 03:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 04:00:00 UTC)" (scheduled at 2026-10-18 03:00:00+00:00) 2026-10-18 03:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-18 03:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 03:00:02,091 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 03:00:02,095 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 03:00:02,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 03:00:02,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 03:00:02,169 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 03:00:02,243 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 03:00:02,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 04:00:00 UTC)" executed successfully 2026-10-18 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 05:00:00 UTC)" (scheduled at 2026-10-18 04:00:00+00:00) 2026-10-18 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 04:00:01,059 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 04:00:01,060 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 04:00:01,062 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 04:00:01,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 04:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 04:00:01,159 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 04:00:01,159 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 05:00:00 UTC)" executed successfully 2026-10-18 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 06:00:00 UTC)" (scheduled at 2026-10-18 05:00:00+00:00) 2026-10-18 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-18 05:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 05:00:01,599 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 05:00:01,602 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 05:00:01,604 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 05:00:01,604 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 05:00:01,667 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 05:00:01,753 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 05:00:01,753 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 06:00:00 UTC)" executed successfully 2026-10-18 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 07:00:00 UTC)" (scheduled at 2026-10-18 06:00:00+00:00) 2026-10-18 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-18 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 06:00:01,591 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 06:00:01,593 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 06:00:01,596 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 06:00:01,596 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 06:00:01,661 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 06:00:01,744 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 06:00:01,744 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 07:00:00 UTC)" executed successfully 2026-10-18 07:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 08:00:00 UTC)" (scheduled at 2026-10-18 07:00:00+00:00) 2026-10-18 07:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-18 07:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 07:00:01,202 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 07:00:01,204 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 07:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 07:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 07:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 07:00:01,358 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 07:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 08:00:00 UTC)" executed successfully 2026-10-18 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 09:00:00 UTC)" (scheduled at 2026-10-18 08:00:00+00:00) 2026-10-18 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 08:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 08:00:01,180 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 08:00:01,182 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 08:00:01,184 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 08:00:01,184 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 08:00:01,241 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 08:00:01,321 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 08:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 09:00:00 UTC)" executed successfully 2026-10-18 09:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 10:00:00 UTC)" (scheduled at 2026-10-18 09:00:00+00:00) 2026-10-18 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-18 09:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 09:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 09:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 09:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 09:00:01,211 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 09:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 09:00:01,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 09:00:01,320 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 10:00:00 UTC)" executed successfully 2026-10-18 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 11:00:00 UTC)" (scheduled at 2026-10-18 10:00:00+00:00) 2026-10-18 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-18 10:00:00,101 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 10:00:01,160 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 10:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 10:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 10:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 10:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 10:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 10:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 11:00:00 UTC)" executed successfully 2026-10-18 11:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 12:00:00 UTC)" (scheduled at 2026-10-18 11:00:00+00:00) 2026-10-18 11:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-18 11:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 11:00:01,852 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 11:00:01,856 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 11:00:01,859 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 11:00:01,859 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 11:00:01,939 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 11:00:02,021 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 11:00:02,022 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 12:00:00 UTC)" executed successfully 2026-10-18 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 13:00:00 UTC)" (scheduled at 2026-10-18 12:00:00+00:00) 2026-10-18 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-18 12:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 12:00:01,519 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 12:00:01,522 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 12:00:01,526 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 12:00:01,526 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 12:00:01,604 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 12:00:01,670 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 12:00:01,671 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 13:00:00 UTC)" executed successfully 2026-10-18 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 14:00:00 UTC)" (scheduled at 2026-10-18 13:00:00+00:00) 2026-10-18 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-18 13:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 13:00:01,411 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 13:00:01,414 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 13:00:01,417 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 13:00:01,417 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 13:00:01,492 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 13:00:01,576 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 13:00:01,576 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 14:00:00 UTC)" executed successfully 2026-10-18 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 15:00:00 UTC)" (scheduled at 2026-10-18 14:00:00+00:00) 2026-10-18 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-18 14:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 14:00:01,891 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 14:00:01,894 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 14:00:01,896 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 14:00:01,896 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 14:00:01,951 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 14:00:02,013 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 14:00:02,014 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 15:00:00 UTC)" executed successfully 2026-10-18 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 16:00:00 UTC)" (scheduled at 2026-10-18 15:00:00+00:00) 2026-10-18 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-18 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 15:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 15:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 15:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 15:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 15:00:01,296 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 15:00:01,349 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 15:00:01,349 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 16:00:00 UTC)" executed successfully 2026-10-18 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 17:00:00 UTC)" (scheduled at 2026-10-18 16:00:00+00:00) 2026-10-18 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-18 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 16:00:01,209 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 16:00:01,212 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 16:00:01,215 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 16:00:01,216 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 16:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 16:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 16:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 17:00:00 UTC)" executed successfully 2026-10-18 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 18:00:00 UTC)" (scheduled at 2026-10-18 17:00:00+00:00) 2026-10-18 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 17:00:01,337 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 17:00:01,339 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 17:00:01,341 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 17:00:01,341 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 17:00:01,410 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 17:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 17:00:01,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 18:00:00 UTC)" executed successfully 2026-10-18 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 19:00:00 UTC)" (scheduled at 2026-10-18 18:00:00+00:00) 2026-10-18 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-18 18:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 18:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 18:00:01,217 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 18:00:01,220 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 18:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 18:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 18:00:01,337 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 18:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 19:00:00 UTC)" executed successfully 2026-10-18 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 20:00:00 UTC)" (scheduled at 2026-10-18 19:00:00+00:00) 2026-10-18 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 19:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 19:00:01,177 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 19:00:01,179 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 19:00:01,181 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 19:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 19:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 19:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 19:00:01,287 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 20:00:00 UTC)" executed successfully 2026-10-18 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 21:00:00 UTC)" (scheduled at 2026-10-18 20:00:00+00:00) 2026-10-18 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 20:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 20:00:01,231 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 20:00:01,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 20:00:01,233 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 20:00:01,287 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 20:00:01,344 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 20:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 21:00:00 UTC)" executed successfully 2026-10-18 21:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 22:00:00 UTC)" (scheduled at 2026-10-18 21:00:00+00:00) 2026-10-18 21:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-18 21:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 21:00:02,458 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 21:00:02,461 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 21:00:02,464 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 21:00:02,464 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 21:00:02,541 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 21:00:02,615 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 21:00:02,615 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 22:00:00 UTC)" executed successfully 2026-10-18 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 23:00:00 UTC)" (scheduled at 2026-10-18 22:00:00+00:00) 2026-10-18 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-18 22:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 22:00:01,431 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 22:00:01,434 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 22:00:01,437 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 22:00:01,437 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 22:00:01,513 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 22:00:01,598 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 22:00:01,598 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-18 23:00:00 UTC)" executed successfully 2026-10-18 23:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 00:00:00 UTC)" (scheduled at 2026-10-18 23:00:00+00:00) 2026-10-18 23:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-18 23:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-18 23:00:01,296 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-18 23:00:01,298 INFO [fb-sync.worker] Scraped 50 posts 2026-10-18 23:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-18 23:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-18 23:00:01,349 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-18 23:00:01,408 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-18 23:00:01,408 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 00:00:00 UTC)" executed successfully 2026-10-19 00:00:00,017 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 01:00:00 UTC)" (scheduled at 2026-10-19 00:00:00+00:00) 2026-10-19 00:00:00,021 INFO [fb-sync] Starting FB sync... 2026-10-19 00:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 00:00:01,022 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 00:00:01,024 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 00:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 00:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 00:00:01,085 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 00:00:01,152 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 00:00:01,153 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 01:00:00 UTC)" executed successfully 2026-10-19 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 02:00:00 UTC)" (scheduled at 2026-10-19 01:00:00+00:00) 2026-10-19 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 01:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 01:00:01,698 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 01:00:01,702 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 01:00:01,705 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 01:00:01,705 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 01:00:01,780 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 01:00:01,865 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 01:00:01,866 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 02:00:00 UTC)" executed successfully 2026-10-19 02:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 03:00:00 UTC)" (scheduled at 2026-10-19 02:00:00+00:00) 2026-10-19 02:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-19 02:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 02:00:01,086 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 02:00:01,089 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 02:00:01,092 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 02:00:01,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 02:00:01,166 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 02:00:01,245 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 02:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 03:00:00 UTC)" executed successfully 2026-10-19 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 04:00:00 UTC)" (scheduled at 2026-10-19 03:00:00+00:00) 2026-10-19 03:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-19 03:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 03:00:00,983 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 03:00:00,985 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 03:00:00,986 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 03:00:00,987 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 03:00:01,032 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 03:00:01,090 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 03:00:01,090 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 04:00:00 UTC)" executed successfully 2026-10-19 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 05:00:00 UTC)" (scheduled at 2026-10-19 04:00:00+00:00) 2026-10-19 04:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-19 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 04:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 04:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 04:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 04:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 04:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 04:00:01,258 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 04:00:01,258 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 05:00:00 UTC)" executed successfully 2026-10-19 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 06:00:00 UTC)" (scheduled at 2026-10-19 05:00:00+00:00) 2026-10-19 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-19 05:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 05:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 05:00:01,026 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 05:00:01,029 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 05:00:01,029 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 05:00:01,102 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 05:00:01,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 05:00:01,185 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 06:00:00 UTC)" executed successfully 2026-10-19 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 07:00:00 UTC)" (scheduled at 2026-10-19 06:00:00+00:00) 2026-10-19 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 06:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 06:00:02,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 06:00:02,231 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 06:00:02,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 06:00:02,235 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 06:00:02,315 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 06:00:02,400 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 06:00:02,400 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 07:00:00 UTC)" executed successfully 2026-10-19 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 08:00:00 UTC)" (scheduled at 2026-10-19 07:00:00+00:00) 2026-10-19 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-19 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 07:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 07:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 07:00:01,108 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 07:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 07:00:01,169 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 07:00:01,229 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 07:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 08:00:00 UTC)" executed successfully 2026-10-19 08:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 09:00:00 UTC)" (scheduled at 2026-10-19 08:00:00+00:00) 2026-10-19 08:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-19 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 08:00:01,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 08:00:01,347 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 08:00:01,350 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 08:00:01,350 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 08:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 08:00:01,505 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 08:00:01,506 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 09:00:00 UTC)" executed successfully 2026-10-19 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 10:00:00 UTC)" (scheduled at 2026-10-19 09:00:00+00:00) 2026-10-19 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-19 09:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 09:00:01,310 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 09:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 09:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 09:00:01,314 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 09:00:01,381 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 09:00:01,459 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 09:00:01,459 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 10:00:00 UTC)" executed successfully 2026-10-19 10:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 11:00:00 UTC)" (scheduled at 2026-10-19 10:00:00+00:00) 2026-10-19 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-19 10:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 10:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 10:00:01,148 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 10:00:01,150 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 10:00:01,150 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 10:00:01,209 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 10:00:01,267 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 10:00:01,267 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 11:00:00 UTC)" executed successfully 2026-10-19 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 12:00:00 UTC)" (scheduled at 2026-10-19 11:00:00+00:00) 2026-10-19 11:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 11:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 11:00:02,161 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 11:00:02,163 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 11:00:02,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 11:00:02,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 11:00:02,220 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 11:00:02,279 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 11:00:02,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 12:00:00 UTC)" executed successfully 2026-10-19 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 13:00:00 UTC)" (scheduled at 2026-10-19 12:00:00+00:00) 2026-10-19 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-19 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 12:00:01,192 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 12:00:01,195 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 12:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 12:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 12:00:01,267 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 12:00:01,319 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 12:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 13:00:00 UTC)" executed successfully 2026-10-19 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 14:00:00 UTC)" (scheduled at 2026-10-19 13:00:00+00:00) 2026-10-19 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-19 13:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 13:00:02,057 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 13:00:02,060 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 13:00:02,063 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 13:00:02,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 13:00:02,135 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 13:00:02,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 13:00:02,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 14:00:00 UTC)" executed successfully 2026-10-19 14:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 15:00:00 UTC)" (scheduled at 2026-10-19 14:00:00+00:00) 2026-10-19 14:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 14:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 14:00:01,391 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 14:00:01,393 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 14:00:01,396 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 14:00:01,397 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 14:00:01,465 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 14:00:01,545 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 14:00:01,546 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 15:00:00 UTC)" executed successfully 2026-10-19 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 16:00:00 UTC)" (scheduled at 2026-10-19 15:00:00+00:00) 2026-10-19 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-19 15:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 15:00:01,965 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 15:00:01,968 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 15:00:01,970 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 15:00:01,970 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 15:00:02,027 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 15:00:02,083 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 15:00:02,083 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 16:00:00 UTC)" executed successfully 2026-10-19 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 17:00:00 UTC)" (scheduled at 2026-10-19 16:00:00+00:00) 2026-10-19 16:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-19 16:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 16:00:01,182 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 16:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 16:00:01,185 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 16:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 16:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 16:00:01,283 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 16:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 17:00:00 UTC)" executed successfully 2026-10-19 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 18:00:00 UTC)" (scheduled at 2026-10-19 17:00:00+00:00) 2026-10-19 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-19 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 17:00:01,144 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 17:00:01,146 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 17:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 17:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 17:00:01,198 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 17:00:01,264 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 17:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 18:00:00 UTC)" executed successfully 2026-10-19 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 19:00:00 UTC)" (scheduled at 2026-10-19 18:00:00+00:00) 2026-10-19 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-19 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 18:00:01,180 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 18:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 18:00:01,186 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 18:00:01,186 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 18:00:01,262 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 18:00:01,344 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 18:00:01,344 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 19:00:00 UTC)" executed successfully 2026-10-19 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 20:00:00 UTC)" (scheduled at 2026-10-19 19:00:00+00:00) 2026-10-19 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-19 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 19:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 19:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 19:00:01,163 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 19:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 19:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 19:00:01,293 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 19:00:01,293 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 20:00:00 UTC)" executed successfully 2026-10-19 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 21:00:00 UTC)" (scheduled at 2026-10-19 20:00:00+00:00) 2026-10-19 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 20:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 20:00:01,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 20:00:01,054 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 20:00:01,057 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 20:00:01,058 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 20:00:01,111 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 20:00:01,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 20:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 21:00:00 UTC)" executed successfully 2026-10-19 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 22:00:00 UTC)" (scheduled at 2026-10-19 21:00:00+00:00) 2026-10-19 21:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 21:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 21:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 21:00:01,096 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 21:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 21:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 21:00:01,150 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 21:00:01,213 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 21:00:01,213 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 22:00:00 UTC)" executed successfully 2026-10-19 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 23:00:00 UTC)" (scheduled at 2026-10-19 22:00:00+00:00) 2026-10-19 22:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-19 22:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 22:00:01,013 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 22:00:01,015 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 22:00:01,017 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 22:00:01,017 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 22:00:01,067 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 22:00:01,116 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 22:00:01,117 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-19 23:00:00 UTC)" executed successfully 2026-10-19 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 00:00:00 UTC)" (scheduled at 2026-10-19 23:00:00+00:00) 2026-10-19 23:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-19 23:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-19 23:00:01,032 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-19 23:00:01,034 INFO [fb-sync.worker] Scraped 50 posts 2026-10-19 23:00:01,036 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-19 23:00:01,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-19 23:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-19 23:00:01,135 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-19 23:00:01,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 00:00:00 UTC)" executed successfully 2026-10-20 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 01:00:00 UTC)" (scheduled at 2026-10-20 00:00:00+00:00) 2026-10-20 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-20 00:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 00:00:03,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 00:00:03,095 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 00:00:03,097 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 00:00:03,097 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 00:00:03,151 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 00:00:03,212 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 00:00:03,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 01:00:00 UTC)" executed successfully 2026-10-20 01:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 02:00:00 UTC)" (scheduled at 2026-10-20 01:00:00+00:00) 2026-10-20 01:00:00,021 INFO [fb-sync] Starting FB sync... 2026-10-20 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 01:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 01:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 01:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 01:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 01:00:01,155 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 01:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 01:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 02:00:00 UTC)" executed successfully 2026-10-20 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 03:00:00 UTC)" (scheduled at 2026-10-20 02:00:00+00:00) 2026-10-20 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-20 02:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 02:00:01,011 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 02:00:01,013 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 02:00:01,016 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 02:00:01,016 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 02:00:01,064 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 02:00:01,113 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 02:00:01,113 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 03:00:00 UTC)" executed successfully 2026-10-20 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 04:00:00 UTC)" (scheduled at 2026-10-20 03:00:00+00:00) 2026-10-20 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-20 03:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 03:00:01,022 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 03:00:01,024 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 03:00:01,027 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 03:00:01,028 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 03:00:01,091 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 03:00:01,147 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 03:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 04:00:00 UTC)" executed successfully 2026-10-20 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 05:00:00 UTC)" (scheduled at 2026-10-20 04:00:00+00:00) 2026-10-20 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-20 04:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 04:00:01,336 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 04:00:01,337 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 04:00:01,339 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 04:00:01,339 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 04:00:01,385 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 04:00:01,446 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 04:00:01,446 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 05:00:00 UTC)" executed successfully 2026-10-20 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 06:00:00 UTC)" (scheduled at 2026-10-20 05:00:00+00:00) 2026-10-20 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-20 05:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 05:00:01,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 05:00:01,052 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 05:00:01,054 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 05:00:01,054 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 05:00:01,099 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 05:00:01,150 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 05:00:01,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 06:00:00 UTC)" executed successfully 2026-10-20 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 07:00:00 UTC)" (scheduled at 2026-10-20 06:00:00+00:00) 2026-10-20 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-20 06:00:00,057 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 06:00:00,926 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 06:00:00,928 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 06:00:00,930 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 06:00:00,931 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 06:00:00,979 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 06:00:01,034 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 06:00:01,034 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 07:00:00 UTC)" executed successfully 2026-10-20 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 08:00:00 UTC)" (scheduled at 2026-10-20 07:00:00+00:00) 2026-10-20 07:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-20 07:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 07:00:01,015 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 07:00:01,017 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 07:00:01,019 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 07:00:01,020 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 07:00:01,073 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 07:00:01,131 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 07:00:01,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 08:00:00 UTC)" executed successfully 2026-10-20 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 09:00:00 UTC)" (scheduled at 2026-10-20 08:00:00+00:00) 2026-10-20 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-20 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 08:00:01,036 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 08:00:01,038 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 08:00:01,041 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 08:00:01,041 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 08:00:01,085 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 08:00:01,131 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 08:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 09:00:00 UTC)" executed successfully 2026-10-20 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 10:00:00 UTC)" (scheduled at 2026-10-20 09:00:00+00:00) 2026-10-20 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-20 09:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 09:00:01,365 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 09:00:01,368 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 09:00:01,371 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 09:00:01,371 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 09:00:01,446 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 09:00:01,528 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 09:00:01,528 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 10:00:00 UTC)" executed successfully 2026-10-20 10:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 11:00:00 UTC)" (scheduled at 2026-10-20 10:00:00+00:00) 2026-10-20 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-20 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 10:00:01,688 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 10:00:01,690 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 10:00:01,693 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 10:00:01,693 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 10:00:01,764 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 10:00:01,819 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 10:00:01,819 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 11:00:00 UTC)" executed successfully 2026-10-20 11:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 12:00:00 UTC)" (scheduled at 2026-10-20 11:00:00+00:00) 2026-10-20 11:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-20 11:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 11:00:02,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 11:00:02,172 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 11:00:02,175 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 11:00:02,175 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 11:00:02,243 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 11:00:02,302 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 11:00:02,302 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 12:00:00 UTC)" executed successfully 2026-10-20 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 13:00:00 UTC)" (scheduled at 2026-10-20 12:00:00+00:00) 2026-10-20 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-20 12:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 12:00:01,246 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 12:00:01,248 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 12:00:01,251 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 12:00:01,252 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 12:00:01,329 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 12:00:01,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 12:00:01,410 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 13:00:00 UTC)" executed successfully 2026-10-20 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 14:00:00 UTC)" (scheduled at 2026-10-20 13:00:00+00:00) 2026-10-20 13:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-20 13:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 13:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 13:00:01,243 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 13:00:01,245 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 13:00:01,245 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 13:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 13:00:01,378 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 13:00:01,379 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 14:00:00 UTC)" executed successfully 2026-10-20 14:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 15:00:00 UTC)" (scheduled at 2026-10-20 14:00:00+00:00) 2026-10-20 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-20 14:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 14:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 14:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 14:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 14:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 14:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 14:00:01,328 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 14:00:01,328 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 15:00:00 UTC)" executed successfully 2026-10-20 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 16:00:00 UTC)" (scheduled at 2026-10-20 15:00:00+00:00) 2026-10-20 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-20 15:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 15:00:01,340 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 15:00:01,343 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 15:00:01,346 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 15:00:01,347 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 15:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 15:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 15:00:01,467 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 16:00:00 UTC)" executed successfully 2026-10-20 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 17:00:00 UTC)" (scheduled at 2026-10-20 16:00:00+00:00) 2026-10-20 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-20 16:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 16:00:01,161 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 16:00:01,163 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 16:00:01,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 16:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 16:00:01,217 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 16:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 16:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 17:00:00 UTC)" executed successfully 2026-10-20 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 18:00:00 UTC)" (scheduled at 2026-10-20 17:00:00+00:00) 2026-10-20 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-20 17:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 17:00:01,095 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 17:00:01,097 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 17:00:01,099 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 17:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 17:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 17:00:01,208 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 17:00:01,208 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 18:00:00 UTC)" executed successfully 2026-10-20 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 19:00:00 UTC)" (scheduled at 2026-10-20 18:00:00+00:00) 2026-10-20 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-20 18:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 18:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 18:00:01,100 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 18:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 18:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 18:00:01,178 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 18:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 18:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 19:00:00 UTC)" executed successfully 2026-10-20 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 20:00:00 UTC)" (scheduled at 2026-10-20 19:00:00+00:00) 2026-10-20 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-20 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 19:00:01,116 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 19:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 19:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 19:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 19:00:01,170 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 19:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 19:00:01,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 20:00:00 UTC)" executed successfully 2026-10-20 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 21:00:00 UTC)" (scheduled at 2026-10-20 20:00:00+00:00) 2026-10-20 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-20 20:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 20:00:01,017 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 20:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 20:00:01,021 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 20:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 20:00:01,069 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 20:00:01,114 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 20:00:01,115 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 21:00:00 UTC)" executed successfully 2026-10-20 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 22:00:00 UTC)" (scheduled at 2026-10-20 21:00:00+00:00) 2026-10-20 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-20 21:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 21:00:01,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 21:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 21:00:01,275 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 21:00:01,275 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 21:00:01,324 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 21:00:01,384 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 21:00:01,384 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 22:00:00 UTC)" executed successfully 2026-10-20 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 23:00:00 UTC)" (scheduled at 2026-10-20 22:00:00+00:00) 2026-10-20 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-20 22:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 22:00:01,008 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 22:00:01,010 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 22:00:01,013 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 22:00:01,013 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 22:00:01,072 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 22:00:01,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 22:00:01,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-20 23:00:00 UTC)" executed successfully 2026-10-20 23:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 00:00:00 UTC)" (scheduled at 2026-10-20 23:00:00+00:00) 2026-10-20 23:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-20 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-20 23:00:00,960 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-20 23:00:00,962 INFO [fb-sync.worker] Scraped 50 posts 2026-10-20 23:00:00,964 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-20 23:00:00,964 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-20 23:00:01,016 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-20 23:00:01,081 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-20 23:00:01,082 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 00:00:00 UTC)" executed successfully 2026-10-21 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 01:00:00 UTC)" (scheduled at 2026-10-21 00:00:00+00:00) 2026-10-21 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-21 00:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 00:00:01,016 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 00:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 00:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 00:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 00:00:01,097 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 00:00:01,174 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 00:00:01,174 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 01:00:00 UTC)" executed successfully 2026-10-21 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 02:00:00 UTC)" (scheduled at 2026-10-21 01:00:00+00:00) 2026-10-21 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-21 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 01:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 01:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 01:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 01:00:01,218 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 01:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 01:00:01,345 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 01:00:01,345 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 02:00:00 UTC)" executed successfully 2026-10-21 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 03:00:00 UTC)" (scheduled at 2026-10-21 02:00:00+00:00) 2026-10-21 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-21 02:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 02:00:01,895 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 02:00:01,897 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 02:00:01,900 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 02:00:01,900 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 02:00:01,966 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 02:00:02,033 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 02:00:02,034 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 03:00:00 UTC)" executed successfully 2026-10-21 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 04:00:00 UTC)" (scheduled at 2026-10-21 03:00:00+00:00) 2026-10-21 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-21 03:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 03:00:01,008 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 03:00:01,010 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 03:00:01,013 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 03:00:01,013 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 03:00:01,060 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 03:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 03:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 04:00:00 UTC)" executed successfully 2026-10-21 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 05:00:00 UTC)" (scheduled at 2026-10-21 04:00:00+00:00) 2026-10-21 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 04:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 04:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 04:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 04:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 04:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 04:00:01,375 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 04:00:01,375 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 05:00:00 UTC)" executed successfully 2026-10-21 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 06:00:00 UTC)" (scheduled at 2026-10-21 05:00:00+00:00) 2026-10-21 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-21 05:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 05:00:01,056 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 05:00:01,058 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 05:00:01,061 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 05:00:01,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 05:00:01,107 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 05:00:01,164 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 05:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 06:00:00 UTC)" executed successfully 2026-10-21 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 07:00:00 UTC)" (scheduled at 2026-10-21 06:00:00+00:00) 2026-10-21 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-21 06:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 06:00:00,904 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 06:00:00,906 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 06:00:00,908 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 06:00:00,908 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 06:00:00,967 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 06:00:01,018 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 06:00:01,018 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 07:00:00 UTC)" executed successfully 2026-10-21 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 08:00:00 UTC)" (scheduled at 2026-10-21 07:00:00+00:00) 2026-10-21 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 07:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 07:00:01,043 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 07:00:01,045 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 07:00:01,048 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 07:00:01,048 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 07:00:01,103 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 07:00:01,164 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 07:00:01,164 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 08:00:00 UTC)" executed successfully 2026-10-21 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 09:00:00 UTC)" (scheduled at 2026-10-21 08:00:00+00:00) 2026-10-21 08:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 08:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 08:00:01,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 08:00:01,033 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 08:00:01,036 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 08:00:01,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 08:00:01,107 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 08:00:01,189 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 08:00:01,189 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 09:00:00 UTC)" executed successfully 2026-10-21 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 10:00:00 UTC)" (scheduled at 2026-10-21 09:00:00+00:00) 2026-10-21 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-21 09:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 09:00:01,778 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 09:00:01,780 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 09:00:01,783 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 09:00:01,783 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 09:00:01,852 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 09:00:01,929 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 09:00:01,930 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 10:00:00 UTC)" executed successfully 2026-10-21 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 11:00:00 UTC)" (scheduled at 2026-10-21 10:00:00+00:00) 2026-10-21 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-21 10:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 10:00:02,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 10:00:02,259 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 10:00:02,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 10:00:02,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 10:00:02,335 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 10:00:02,416 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 10:00:02,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 11:00:00 UTC)" executed successfully 2026-10-21 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 12:00:00 UTC)" (scheduled at 2026-10-21 11:00:00+00:00) 2026-10-21 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-21 11:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 11:00:01,360 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 11:00:01,362 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 11:00:01,365 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 11:00:01,365 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 11:00:01,423 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 11:00:01,498 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 11:00:01,499 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 12:00:00 UTC)" executed successfully 2026-10-21 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 13:00:00 UTC)" (scheduled at 2026-10-21 12:00:00+00:00) 2026-10-21 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 12:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 12:00:01,046 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 12:00:01,048 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 12:00:01,050 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 12:00:01,050 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 12:00:01,099 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 12:00:01,161 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 12:00:01,162 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 13:00:00 UTC)" executed successfully 2026-10-21 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 14:00:00 UTC)" (scheduled at 2026-10-21 13:00:00+00:00) 2026-10-21 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-21 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 13:00:01,702 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 13:00:01,705 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 13:00:01,708 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 13:00:01,708 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 13:00:01,776 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 13:00:01,852 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 13:00:01,852 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 14:00:00 UTC)" executed successfully 2026-10-21 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 15:00:00 UTC)" (scheduled at 2026-10-21 14:00:00+00:00) 2026-10-21 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-21 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 14:00:01,152 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 14:00:01,154 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 14:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 14:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 14:00:01,216 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 14:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 14:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 15:00:00 UTC)" executed successfully 2026-10-21 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 16:00:00 UTC)" (scheduled at 2026-10-21 15:00:00+00:00) 2026-10-21 15:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-21 15:00:00,060 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 15:00:01,144 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 15:00:01,146 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 15:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 15:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 15:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 15:00:01,254 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 15:00:01,254 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 16:00:00 UTC)" executed successfully 2026-10-21 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 17:00:00 UTC)" (scheduled at 2026-10-21 16:00:00+00:00) 2026-10-21 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 16:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 16:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 16:00:01,023 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 16:00:01,023 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 16:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 16:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 16:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 17:00:00 UTC)" executed successfully 2026-10-21 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 18:00:00 UTC)" (scheduled at 2026-10-21 17:00:00+00:00) 2026-10-21 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-21 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 17:00:01,351 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 17:00:01,353 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 17:00:01,356 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 17:00:01,356 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 17:00:01,429 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 17:00:01,511 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 17:00:01,511 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 18:00:00 UTC)" executed successfully 2026-10-21 18:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 19:00:00 UTC)" (scheduled at 2026-10-21 18:00:00+00:00) 2026-10-21 18:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-21 18:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 18:00:01,862 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 18:00:01,865 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 18:00:01,868 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 18:00:01,868 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 18:00:01,928 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 18:00:01,984 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 18:00:01,984 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 19:00:00 UTC)" executed successfully 2026-10-21 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 20:00:00 UTC)" (scheduled at 2026-10-21 19:00:00+00:00) 2026-10-21 19:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-21 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 19:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 19:00:01,301 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 19:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 19:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 19:00:01,353 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 19:00:01,417 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 19:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 20:00:00 UTC)" executed successfully 2026-10-21 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 21:00:00 UTC)" (scheduled at 2026-10-21 20:00:00+00:00) 2026-10-21 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-21 20:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 20:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 20:00:01,168 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 20:00:01,171 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 20:00:01,171 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 20:00:01,218 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 20:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 20:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 21:00:00 UTC)" executed successfully 2026-10-21 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 22:00:00 UTC)" (scheduled at 2026-10-21 21:00:00+00:00) 2026-10-21 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-21 21:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 21:00:01,382 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 21:00:01,385 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 21:00:01,387 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 21:00:01,387 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 21:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 21:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 21:00:01,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 22:00:00 UTC)" executed successfully 2026-10-21 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 23:00:00 UTC)" (scheduled at 2026-10-21 22:00:00+00:00) 2026-10-21 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-21 22:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 22:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 22:00:01,259 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 22:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 22:00:01,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 22:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 22:00:01,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 22:00:01,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-21 23:00:00 UTC)" executed successfully 2026-10-21 23:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 00:00:00 UTC)" (scheduled at 2026-10-21 23:00:00+00:00) 2026-10-21 23:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-21 23:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-21 23:00:01,141 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-21 23:00:01,144 INFO [fb-sync.worker] Scraped 50 posts 2026-10-21 23:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-21 23:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-21 23:00:01,224 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-21 23:00:01,307 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-21 23:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 00:00:00 UTC)" executed successfully 2026-10-22 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 01:00:00 UTC)" (scheduled at 2026-10-22 00:00:00+00:00) 2026-10-22 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-22 00:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 00:00:01,317 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 00:00:01,321 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 00:00:01,324 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 00:00:01,324 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 00:00:01,382 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 00:00:01,436 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 00:00:01,436 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 01:00:00 UTC)" executed successfully 2026-10-22 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 02:00:00 UTC)" (scheduled at 2026-10-22 01:00:00+00:00) 2026-10-22 01:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-22 01:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 01:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 01:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 01:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 01:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 01:00:01,216 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 01:00:01,266 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 01:00:01,266 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 02:00:00 UTC)" executed successfully 2026-10-22 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 03:00:00 UTC)" (scheduled at 2026-10-22 02:00:00+00:00) 2026-10-22 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-22 02:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 02:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 02:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 02:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 02:00:01,154 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 02:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 02:00:01,277 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 02:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 03:00:00 UTC)" executed successfully 2026-10-22 03:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 04:00:00 UTC)" (scheduled at 2026-10-22 03:00:00+00:00) 2026-10-22 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-22 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 03:00:01,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 03:00:01,137 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 03:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 03:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 03:00:01,205 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 03:00:01,276 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 03:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 04:00:00 UTC)" executed successfully 2026-10-22 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 05:00:00 UTC)" (scheduled at 2026-10-22 04:00:00+00:00) 2026-10-22 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-22 04:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 04:00:01,090 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 04:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 04:00:01,095 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 04:00:01,095 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 04:00:01,168 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 04:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 04:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 05:00:00 UTC)" executed successfully 2026-10-22 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 06:00:00 UTC)" (scheduled at 2026-10-22 05:00:00+00:00) 2026-10-22 05:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-22 05:00:00,112 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 05:00:01,362 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 05:00:01,364 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 05:00:01,366 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 05:00:01,366 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 05:00:01,415 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 05:00:01,470 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 05:00:01,470 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 06:00:00 UTC)" executed successfully 2026-10-22 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 07:00:00 UTC)" (scheduled at 2026-10-22 06:00:00+00:00) 2026-10-22 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-22 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 06:00:00,991 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 06:00:00,993 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 06:00:00,995 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 06:00:00,995 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 06:00:01,041 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 06:00:01,089 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 06:00:01,089 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 07:00:00 UTC)" executed successfully 2026-10-22 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 08:00:00 UTC)" (scheduled at 2026-10-22 07:00:00+00:00) 2026-10-22 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-22 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 07:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 07:00:01,021 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 07:00:01,023 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 07:00:01,023 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 07:00:01,076 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 07:00:01,133 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 07:00:01,133 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 08:00:00 UTC)" executed successfully 2026-10-22 08:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 09:00:00 UTC)" (scheduled at 2026-10-22 08:00:00+00:00) 2026-10-22 08:00:00,004 INFO [fb-sync] Starting FB sync... 2026-10-22 08:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 08:00:01,006 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 08:00:01,009 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 08:00:01,011 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 08:00:01,011 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 08:00:01,065 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 08:00:01,125 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 08:00:01,126 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 09:00:00 UTC)" executed successfully 2026-10-22 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 10:00:00 UTC)" (scheduled at 2026-10-22 09:00:00+00:00) 2026-10-22 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-22 09:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 09:00:00,996 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 09:00:00,998 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 09:00:01,000 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 09:00:01,000 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 09:00:01,059 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 09:00:01,113 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 09:00:01,113 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 10:00:00 UTC)" executed successfully 2026-10-22 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 11:00:00 UTC)" (scheduled at 2026-10-22 10:00:00+00:00) 2026-10-22 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-22 10:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 10:00:01,571 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 10:00:01,573 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 10:00:01,578 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 10:00:01,578 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 10:00:01,647 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 10:00:01,707 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 10:00:01,707 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 11:00:00 UTC)" executed successfully 2026-10-22 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 12:00:00 UTC)" (scheduled at 2026-10-22 11:00:00+00:00) 2026-10-22 11:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-22 11:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 11:00:01,043 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 11:00:01,044 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 11:00:01,046 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 11:00:01,047 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 11:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 11:00:01,149 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 11:00:01,149 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 12:00:00 UTC)" executed successfully 2026-10-22 12:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 13:00:00 UTC)" (scheduled at 2026-10-22 12:00:00+00:00) 2026-10-22 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-22 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 12:00:01,672 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 12:00:01,674 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 12:00:01,676 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 12:00:01,677 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 12:00:01,737 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 12:00:01,792 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 12:00:01,793 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 13:00:00 UTC)" executed successfully 2026-10-22 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 14:00:00 UTC)" (scheduled at 2026-10-22 13:00:00+00:00) 2026-10-22 13:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-22 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 13:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 13:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 13:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 13:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 13:00:01,140 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 13:00:01,216 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 13:00:01,217 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 14:00:00 UTC)" executed successfully 2026-10-22 14:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 15:00:00 UTC)" (scheduled at 2026-10-22 14:00:00+00:00) 2026-10-22 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-22 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 14:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 14:00:01,005 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 14:00:01,007 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 14:00:01,008 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 14:00:01,057 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 14:00:01,120 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 14:00:01,120 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 15:00:00 UTC)" executed successfully 2026-10-22 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 16:00:00 UTC)" (scheduled at 2026-10-22 15:00:00+00:00) 2026-10-22 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-22 15:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 15:00:00,978 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 15:00:00,980 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 15:00:00,982 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 15:00:00,982 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 15:00:01,029 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 15:00:01,101 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 15:00:01,101 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 16:00:00 UTC)" executed successfully 2026-10-22 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 17:00:00 UTC)" (scheduled at 2026-10-22 16:00:00+00:00) 2026-10-22 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-22 16:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 16:00:01,342 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 16:00:01,344 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 16:00:01,346 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 16:00:01,346 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 16:00:01,401 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 16:00:01,460 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 16:00:01,460 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 17:00:00 UTC)" executed successfully 2026-10-22 17:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 18:00:00 UTC)" (scheduled at 2026-10-22 17:00:00+00:00) 2026-10-22 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-22 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 17:00:01,158 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 17:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 17:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 17:00:01,164 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 17:00:01,228 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 17:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 17:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 18:00:00 UTC)" executed successfully 2026-10-22 18:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 19:00:00 UTC)" (scheduled at 2026-10-22 18:00:00+00:00) 2026-10-22 18:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-22 18:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 18:00:02,196 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 18:00:02,199 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 18:00:02,203 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 18:00:02,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 18:00:02,303 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 18:00:02,386 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 18:00:02,387 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 19:00:00 UTC)" executed successfully 2026-10-22 19:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 20:00:00 UTC)" (scheduled at 2026-10-22 19:00:00+00:00) 2026-10-22 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-22 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 19:00:01,230 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 19:00:01,232 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 19:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 19:00:01,235 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 19:00:01,279 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 19:00:01,347 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 19:00:01,348 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 20:00:00 UTC)" executed successfully 2026-10-22 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 21:00:00 UTC)" (scheduled at 2026-10-22 20:00:00+00:00) 2026-10-22 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-22 20:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 20:00:01,453 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 20:00:01,455 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 20:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 20:00:01,457 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 20:00:01,503 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 20:00:01,563 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 20:00:01,563 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 21:00:00 UTC)" executed successfully 2026-10-22 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 22:00:00 UTC)" (scheduled at 2026-10-22 21:00:00+00:00) 2026-10-22 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-22 21:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 21:00:01,249 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 21:00:01,251 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 21:00:01,253 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 21:00:01,253 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 21:00:01,297 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 21:00:01,361 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 21:00:01,361 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 22:00:00 UTC)" executed successfully 2026-10-22 22:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 23:00:00 UTC)" (scheduled at 2026-10-22 22:00:00+00:00) 2026-10-22 22:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-22 22:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 22:00:02,534 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 22:00:02,537 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 22:00:02,539 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 22:00:02,539 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 22:00:02,592 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 22:00:02,654 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 22:00:02,655 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-22 23:00:00 UTC)" executed successfully 2026-10-22 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 00:00:00 UTC)" (scheduled at 2026-10-22 23:00:00+00:00) 2026-10-22 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-22 23:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-22 23:00:01,527 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-22 23:00:01,529 INFO [fb-sync.worker] Scraped 50 posts 2026-10-22 23:00:01,531 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-22 23:00:01,532 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-22 23:00:01,603 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-22 23:00:01,660 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-22 23:00:01,661 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 00:00:00 UTC)" executed successfully 2026-10-23 00:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 01:00:00 UTC)" (scheduled at 2026-10-23 00:00:00+00:00) 2026-10-23 00:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-23 00:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 00:00:00,998 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 00:00:01,000 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 00:00:01,002 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 00:00:01,003 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 00:00:01,062 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 00:00:01,146 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 00:00:01,147 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 01:00:00 UTC)" executed successfully 2026-10-23 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 02:00:00 UTC)" (scheduled at 2026-10-23 01:00:00+00:00) 2026-10-23 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-23 01:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 01:00:01,245 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 01:00:01,247 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 01:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 01:00:01,250 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 01:00:01,308 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 01:00:01,366 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 01:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 02:00:00 UTC)" executed successfully 2026-10-23 02:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 03:00:00 UTC)" (scheduled at 2026-10-23 02:00:00+00:00) 2026-10-23 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-23 02:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 02:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 02:00:01,124 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 02:00:01,126 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 02:00:01,126 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 02:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 02:00:01,237 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 02:00:01,237 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 03:00:00 UTC)" executed successfully 2026-10-23 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 04:00:00 UTC)" (scheduled at 2026-10-23 03:00:00+00:00) 2026-10-23 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-23 03:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 03:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 03:00:01,005 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 03:00:01,007 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 03:00:01,007 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 03:00:01,059 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 03:00:01,113 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 03:00:01,113 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 04:00:00 UTC)" executed successfully 2026-10-23 04:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 05:00:00 UTC)" (scheduled at 2026-10-23 04:00:00+00:00) 2026-10-23 04:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-23 04:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 04:00:01,834 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 04:00:01,837 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 04:00:01,843 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 04:00:01,843 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 04:00:01,916 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 04:00:01,991 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 04:00:01,991 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 05:00:00 UTC)" executed successfully 2026-10-23 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 06:00:00 UTC)" (scheduled at 2026-10-23 05:00:00+00:00) 2026-10-23 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-23 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 05:00:00,970 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 05:00:00,972 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 05:00:00,975 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 05:00:00,975 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 05:00:01,023 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 05:00:01,069 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 05:00:01,069 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 06:00:00 UTC)" executed successfully 2026-10-23 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 07:00:00 UTC)" (scheduled at 2026-10-23 06:00:00+00:00) 2026-10-23 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 06:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 06:00:01,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 06:00:01,278 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 06:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 06:00:01,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 06:00:01,332 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 06:00:01,401 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 06:00:01,402 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 07:00:00 UTC)" executed successfully 2026-10-23 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 08:00:00 UTC)" (scheduled at 2026-10-23 07:00:00+00:00) 2026-10-23 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-23 07:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 07:00:01,896 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 07:00:01,899 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 07:00:01,901 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 07:00:01,902 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 07:00:01,970 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 07:00:02,039 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 07:00:02,040 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 08:00:00 UTC)" executed successfully 2026-10-23 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 09:00:00 UTC)" (scheduled at 2026-10-23 08:00:00+00:00) 2026-10-23 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-23 08:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 08:00:01,141 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 08:00:01,143 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 08:00:01,145 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 08:00:01,146 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 08:00:01,193 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 08:00:01,259 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 08:00:01,259 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 09:00:00 UTC)" executed successfully 2026-10-23 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 10:00:00 UTC)" (scheduled at 2026-10-23 09:00:00+00:00) 2026-10-23 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 09:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 09:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 09:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 09:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 09:00:01,223 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 09:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 09:00:01,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 09:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 10:00:00 UTC)" executed successfully 2026-10-23 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 11:00:00 UTC)" (scheduled at 2026-10-23 10:00:00+00:00) 2026-10-23 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-23 10:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 10:00:01,129 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 10:00:01,132 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 10:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 10:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 10:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 10:00:01,227 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 10:00:01,227 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 11:00:00 UTC)" executed successfully 2026-10-23 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 12:00:00 UTC)" (scheduled at 2026-10-23 11:00:00+00:00) 2026-10-23 11:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-23 11:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 11:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 11:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 11:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 11:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 11:00:01,245 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 11:00:01,313 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 11:00:01,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 12:00:00 UTC)" executed successfully 2026-10-23 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 13:00:00 UTC)" (scheduled at 2026-10-23 12:00:00+00:00) 2026-10-23 12:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-23 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 12:00:01,904 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 12:00:01,906 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 12:00:01,909 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 12:00:01,909 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 12:00:01,970 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 12:00:02,032 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 12:00:02,032 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 13:00:00 UTC)" executed successfully 2026-10-23 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 14:00:00 UTC)" (scheduled at 2026-10-23 13:00:00+00:00) 2026-10-23 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-23 13:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 13:00:01,116 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 13:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 13:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 13:00:01,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 13:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 13:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 13:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 14:00:00 UTC)" executed successfully 2026-10-23 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 15:00:00 UTC)" (scheduled at 2026-10-23 14:00:00+00:00) 2026-10-23 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 14:00:01,999 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 14:00:02,003 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 14:00:02,006 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 14:00:02,006 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 14:00:02,070 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 14:00:02,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 14:00:02,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 15:00:00 UTC)" executed successfully 2026-10-23 15:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 16:00:00 UTC)" (scheduled at 2026-10-23 15:00:00+00:00) 2026-10-23 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-23 15:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 15:00:01,678 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 15:00:01,681 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 15:00:01,683 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 15:00:01,684 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 15:00:01,737 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 15:00:01,796 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 15:00:01,796 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 16:00:00 UTC)" executed successfully 2026-10-23 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 17:00:00 UTC)" (scheduled at 2026-10-23 16:00:00+00:00) 2026-10-23 16:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-23 16:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 16:00:01,592 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 16:00:01,595 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 16:00:01,598 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 16:00:01,598 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 16:00:01,661 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 16:00:01,727 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 16:00:01,727 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 17:00:00 UTC)" executed successfully 2026-10-23 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 18:00:00 UTC)" (scheduled at 2026-10-23 17:00:00+00:00) 2026-10-23 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-23 17:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 17:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 17:00:01,221 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 17:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 17:00:01,223 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 17:00:01,280 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 17:00:01,335 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 17:00:01,335 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 18:00:00 UTC)" executed successfully 2026-10-23 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 19:00:00 UTC)" (scheduled at 2026-10-23 18:00:00+00:00) 2026-10-23 18:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 18:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 18:00:01,775 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 18:00:01,776 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 18:00:01,779 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 18:00:01,779 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 18:00:01,833 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 18:00:01,893 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 18:00:01,893 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 19:00:00 UTC)" executed successfully 2026-10-23 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 20:00:00 UTC)" (scheduled at 2026-10-23 19:00:00+00:00) 2026-10-23 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 19:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 19:00:01,272 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 19:00:01,274 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 19:00:01,277 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 19:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 19:00:01,328 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 19:00:01,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 19:00:01,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 20:00:00 UTC)" executed successfully 2026-10-23 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 21:00:00 UTC)" (scheduled at 2026-10-23 20:00:00+00:00) 2026-10-23 20:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-23 20:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 20:00:01,231 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 20:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 20:00:01,237 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 20:00:01,238 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 20:00:01,312 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 20:00:01,392 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 20:00:01,393 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 21:00:00 UTC)" executed successfully 2026-10-23 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 22:00:00 UTC)" (scheduled at 2026-10-23 21:00:00+00:00) 2026-10-23 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 21:00:01,101 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 21:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 21:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 21:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 21:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 21:00:01,260 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 21:00:01,260 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 22:00:00 UTC)" executed successfully 2026-10-23 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 23:00:00 UTC)" (scheduled at 2026-10-23 22:00:00+00:00) 2026-10-23 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-23 22:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 22:00:01,232 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 22:00:01,234 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 22:00:01,236 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 22:00:01,236 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 22:00:01,291 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 22:00:01,348 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 22:00:01,348 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-23 23:00:00 UTC)" executed successfully 2026-10-23 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 00:00:00 UTC)" (scheduled at 2026-10-23 23:00:00+00:00) 2026-10-23 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-23 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-23 23:00:01,283 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-23 23:00:01,285 INFO [fb-sync.worker] Scraped 50 posts 2026-10-23 23:00:01,287 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-23 23:00:01,287 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-23 23:00:01,336 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-23 23:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-23 23:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 00:00:00 UTC)" executed successfully 2026-10-24 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 01:00:00 UTC)" (scheduled at 2026-10-24 00:00:00+00:00) 2026-10-24 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-24 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 00:00:01,340 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 00:00:01,343 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 00:00:01,346 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 00:00:01,346 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 00:00:01,417 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 00:00:01,489 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 00:00:01,489 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 01:00:00 UTC)" executed successfully 2026-10-24 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 02:00:00 UTC)" (scheduled at 2026-10-24 01:00:00+00:00) 2026-10-24 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-24 01:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 01:00:01,277 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 01:00:01,280 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 01:00:01,282 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 01:00:01,283 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 01:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 01:00:01,442 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 01:00:01,442 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 02:00:00 UTC)" executed successfully 2026-10-24 02:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 03:00:00 UTC)" (scheduled at 2026-10-24 02:00:00+00:00) 2026-10-24 02:00:00,022 INFO [fb-sync] Starting FB sync... 2026-10-24 02:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 02:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 02:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 02:00:01,163 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 02:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 02:00:01,221 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 02:00:01,284 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 02:00:01,284 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 03:00:00 UTC)" executed successfully 2026-10-24 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 04:00:00 UTC)" (scheduled at 2026-10-24 03:00:00+00:00) 2026-10-24 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 03:00:00,101 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 03:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 03:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 03:00:01,108 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 03:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 03:00:01,160 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 03:00:01,212 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 03:00:01,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 04:00:00 UTC)" executed successfully 2026-10-24 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 05:00:00 UTC)" (scheduled at 2026-10-24 04:00:00+00:00) 2026-10-24 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-24 04:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 04:00:01,160 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 04:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 04:00:01,164 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 04:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 04:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 04:00:01,266 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 04:00:01,267 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 05:00:00 UTC)" executed successfully 2026-10-24 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 06:00:00 UTC)" (scheduled at 2026-10-24 05:00:00+00:00) 2026-10-24 05:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-24 05:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 05:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 05:00:01,070 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 05:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 05:00:01,072 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 05:00:01,118 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 05:00:01,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 05:00:01,165 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 06:00:00 UTC)" executed successfully 2026-10-24 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 07:00:00 UTC)" (scheduled at 2026-10-24 06:00:00+00:00) 2026-10-24 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-24 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 06:00:01,447 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 06:00:01,450 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 06:00:01,453 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 06:00:01,453 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 06:00:01,527 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 06:00:01,604 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 06:00:01,605 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 07:00:00 UTC)" executed successfully 2026-10-24 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 08:00:00 UTC)" (scheduled at 2026-10-24 07:00:00+00:00) 2026-10-24 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-24 07:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 07:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 07:00:01,087 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 07:00:01,090 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 07:00:01,090 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 07:00:01,159 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 07:00:01,229 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 07:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 08:00:00 UTC)" executed successfully 2026-10-24 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 09:00:00 UTC)" (scheduled at 2026-10-24 08:00:00+00:00) 2026-10-24 08:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-24 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 08:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 08:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 08:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 08:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 08:00:01,073 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 08:00:01,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 08:00:01,137 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 09:00:00 UTC)" executed successfully 2026-10-24 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 10:00:00 UTC)" (scheduled at 2026-10-24 09:00:00+00:00) 2026-10-24 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-24 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 09:00:02,180 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 09:00:02,183 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 09:00:02,185 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 09:00:02,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 09:00:02,239 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 09:00:02,298 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 09:00:02,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 10:00:00 UTC)" executed successfully 2026-10-24 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 11:00:00 UTC)" (scheduled at 2026-10-24 10:00:00+00:00) 2026-10-24 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 10:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 10:00:01,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 10:00:01,136 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 10:00:01,137 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 10:00:01,138 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 10:00:01,193 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 10:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 10:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 11:00:00 UTC)" executed successfully 2026-10-24 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 12:00:00 UTC)" (scheduled at 2026-10-24 11:00:00+00:00) 2026-10-24 11:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-24 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 11:00:01,120 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 11:00:01,122 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 11:00:01,123 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 11:00:01,124 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 11:00:01,171 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 11:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 11:00:01,222 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 12:00:00 UTC)" executed successfully 2026-10-24 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 13:00:00 UTC)" (scheduled at 2026-10-24 12:00:00+00:00) 2026-10-24 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-24 12:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 12:00:01,458 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 12:00:01,460 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 12:00:01,463 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 12:00:01,463 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 12:00:01,513 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 12:00:01,570 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 12:00:01,571 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 13:00:00 UTC)" executed successfully 2026-10-24 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 14:00:00 UTC)" (scheduled at 2026-10-24 13:00:00+00:00) 2026-10-24 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-24 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 13:00:01,231 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 13:00:01,233 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 13:00:01,236 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 13:00:01,236 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 13:00:01,285 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 13:00:01,338 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 13:00:01,338 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 14:00:00 UTC)" executed successfully 2026-10-24 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 15:00:00 UTC)" (scheduled at 2026-10-24 14:00:00+00:00) 2026-10-24 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-24 14:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 14:00:01,212 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 14:00:01,214 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 14:00:01,217 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 14:00:01,217 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 14:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 14:00:01,312 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 14:00:01,313 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 15:00:00 UTC)" executed successfully 2026-10-24 15:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 16:00:00 UTC)" (scheduled at 2026-10-24 15:00:00+00:00) 2026-10-24 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-24 15:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 15:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 15:00:01,162 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 15:00:01,165 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 15:00:01,165 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 15:00:01,213 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 15:00:01,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 15:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 16:00:00 UTC)" executed successfully 2026-10-24 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 17:00:00 UTC)" (scheduled at 2026-10-24 16:00:00+00:00) 2026-10-24 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 16:00:01,343 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 16:00:01,345 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 16:00:01,348 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 16:00:01,348 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 16:00:01,407 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 16:00:01,463 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 16:00:01,464 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 17:00:00 UTC)" executed successfully 2026-10-24 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 18:00:00 UTC)" (scheduled at 2026-10-24 17:00:00+00:00) 2026-10-24 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-24 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 17:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 17:00:01,158 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 17:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 17:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 17:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 17:00:01,279 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 17:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 18:00:00 UTC)" executed successfully 2026-10-24 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 19:00:00 UTC)" (scheduled at 2026-10-24 18:00:00+00:00) 2026-10-24 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-24 18:00:00,060 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 18:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 18:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 18:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 18:00:01,114 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 18:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 18:00:01,211 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 18:00:01,211 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 19:00:00 UTC)" executed successfully 2026-10-24 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 20:00:00 UTC)" (scheduled at 2026-10-24 19:00:00+00:00) 2026-10-24 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-24 19:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 19:00:01,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 19:00:01,089 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 19:00:01,091 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 19:00:01,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 19:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 19:00:01,195 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 19:00:01,196 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 20:00:00 UTC)" executed successfully 2026-10-24 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 21:00:00 UTC)" (scheduled at 2026-10-24 20:00:00+00:00) 2026-10-24 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 20:00:00,965 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 20:00:00,967 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 20:00:00,969 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 20:00:00,969 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 20:00:01,028 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 20:00:01,081 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 20:00:01,082 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 21:00:00 UTC)" executed successfully 2026-10-24 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 22:00:00 UTC)" (scheduled at 2026-10-24 21:00:00+00:00) 2026-10-24 21:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-24 21:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 21:00:01,067 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 21:00:01,070 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 21:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 21:00:01,072 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 21:00:01,134 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 21:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 21:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 22:00:00 UTC)" executed successfully 2026-10-24 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 23:00:00 UTC)" (scheduled at 2026-10-24 22:00:00+00:00) 2026-10-24 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 22:00:01,768 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 22:00:01,771 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 22:00:01,773 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 22:00:01,773 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 22:00:01,825 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 22:00:01,878 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 22:00:01,878 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-24 23:00:00 UTC)" executed successfully 2026-10-24 23:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 00:00:00 UTC)" (scheduled at 2026-10-24 23:00:00+00:00) 2026-10-24 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-24 23:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-24 23:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-24 23:00:01,298 INFO [fb-sync.worker] Scraped 50 posts 2026-10-24 23:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-24 23:00:01,300 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-24 23:00:01,349 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-24 23:00:01,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-24 23:00:01,407 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 00:00:00 UTC)" executed successfully 2026-10-25 00:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 01:00:00 UTC)" (scheduled at 2026-10-25 00:00:00+00:00) 2026-10-25 00:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-25 00:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 00:00:01,757 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 00:00:01,760 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 00:00:01,763 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 00:00:01,764 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 00:00:01,845 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 00:00:01,937 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 00:00:01,937 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 01:00:00 UTC)" executed successfully 2026-10-25 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 02:00:00 UTC)" (scheduled at 2026-10-25 01:00:00+00:00) 2026-10-25 01:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-25 01:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 01:00:01,640 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 01:00:01,643 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 01:00:01,645 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 01:00:01,645 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 01:00:01,694 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 01:00:01,753 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 01:00:01,753 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 02:00:00 UTC)" executed successfully 2026-10-25 02:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 03:00:00 UTC)" (scheduled at 2026-10-25 02:00:00+00:00) 2026-10-25 02:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-25 02:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 02:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 02:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 02:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 02:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 02:00:01,216 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 02:00:01,289 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 02:00:01,289 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 03:00:00 UTC)" executed successfully 2026-10-25 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 04:00:00 UTC)" (scheduled at 2026-10-25 03:00:00+00:00) 2026-10-25 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-25 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 03:00:01,557 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 03:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 03:00:01,563 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 03:00:01,563 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 03:00:01,614 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 03:00:01,680 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 03:00:01,681 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 04:00:00 UTC)" executed successfully 2026-10-25 04:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 05:00:00 UTC)" (scheduled at 2026-10-25 04:00:00+00:00) 2026-10-25 04:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-25 04:00:00,114 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 04:00:01,466 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 04:00:01,469 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 04:00:01,471 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 04:00:01,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 04:00:01,525 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 04:00:01,582 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 04:00:01,583 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 05:00:00 UTC)" executed successfully 2026-10-25 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 06:00:00 UTC)" (scheduled at 2026-10-25 05:00:00+00:00) 2026-10-25 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-25 05:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 05:00:01,976 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 05:00:01,979 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 05:00:01,982 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 05:00:01,983 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 05:00:02,050 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 05:00:02,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 05:00:02,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 06:00:00 UTC)" executed successfully 2026-10-25 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 07:00:00 UTC)" (scheduled at 2026-10-25 06:00:00+00:00) 2026-10-25 06:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-25 06:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 06:00:01,407 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 06:00:01,410 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 06:00:01,413 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 06:00:01,414 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 06:00:01,489 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 06:00:01,571 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 06:00:01,571 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 07:00:00 UTC)" executed successfully 2026-10-25 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 08:00:00 UTC)" (scheduled at 2026-10-25 07:00:00+00:00) 2026-10-25 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-25 07:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 07:00:01,135 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 07:00:01,137 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 07:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 07:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 07:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 07:00:01,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 07:00:01,467 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 08:00:00 UTC)" executed successfully 2026-10-25 08:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 09:00:00 UTC)" (scheduled at 2026-10-25 08:00:00+00:00) 2026-10-25 08:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-25 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 08:00:02,169 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 08:00:02,172 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 08:00:02,175 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 08:00:02,175 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 08:00:02,231 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 08:00:02,280 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 08:00:02,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 09:00:00 UTC)" executed successfully 2026-10-25 09:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 10:00:00 UTC)" (scheduled at 2026-10-25 09:00:00+00:00) 2026-10-25 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-25 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 09:00:01,096 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 09:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 09:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 09:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 09:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 09:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 09:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 10:00:00 UTC)" executed successfully 2026-10-25 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 11:00:00 UTC)" (scheduled at 2026-10-25 10:00:00+00:00) 2026-10-25 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-25 10:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 10:00:01,259 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 10:00:01,262 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 10:00:01,264 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 10:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 10:00:01,322 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 10:00:01,376 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 10:00:01,377 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 11:00:00 UTC)" executed successfully 2026-10-25 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 12:00:00 UTC)" (scheduled at 2026-10-25 11:00:00+00:00) 2026-10-25 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-25 11:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 11:00:01,190 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 11:00:01,193 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 11:00:01,196 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 11:00:01,196 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 11:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 11:00:01,331 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 11:00:01,331 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 12:00:00 UTC)" executed successfully 2026-10-25 12:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 13:00:00 UTC)" (scheduled at 2026-10-25 12:00:00+00:00) 2026-10-25 12:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-25 12:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 12:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 12:00:01,134 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 12:00:01,138 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 12:00:01,138 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 12:00:01,195 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 12:00:01,253 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 12:00:01,253 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 13:00:00 UTC)" executed successfully 2026-10-25 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 14:00:00 UTC)" (scheduled at 2026-10-25 13:00:00+00:00) 2026-10-25 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-25 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 13:00:01,179 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 13:00:01,181 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 13:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 13:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 13:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 13:00:01,292 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 13:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 14:00:00 UTC)" executed successfully 2026-10-25 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 15:00:00 UTC)" (scheduled at 2026-10-25 14:00:00+00:00) 2026-10-25 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-25 14:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 14:00:01,988 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 14:00:01,990 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 14:00:01,992 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 14:00:01,993 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 14:00:02,064 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 14:00:02,136 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 14:00:02,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 15:00:00 UTC)" executed successfully 2026-10-25 15:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 16:00:00 UTC)" (scheduled at 2026-10-25 15:00:00+00:00) 2026-10-25 15:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-25 15:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 15:00:01,313 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 15:00:01,315 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 15:00:01,318 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 15:00:01,318 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 15:00:01,375 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 15:00:01,427 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 15:00:01,428 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 16:00:00 UTC)" executed successfully 2026-10-25 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 17:00:00 UTC)" (scheduled at 2026-10-25 16:00:00+00:00) 2026-10-25 16:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-25 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 16:00:01,217 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 16:00:01,219 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 16:00:01,221 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 16:00:01,221 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 16:00:01,284 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 16:00:01,337 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 16:00:01,337 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 17:00:00 UTC)" executed successfully 2026-10-25 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 18:00:00 UTC)" (scheduled at 2026-10-25 17:00:00+00:00) 2026-10-25 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-25 17:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 17:00:01,440 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 17:00:01,442 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 17:00:01,445 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 17:00:01,446 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 17:00:01,504 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 17:00:01,570 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 17:00:01,570 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 18:00:00 UTC)" executed successfully 2026-10-25 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 19:00:00 UTC)" (scheduled at 2026-10-25 18:00:00+00:00) 2026-10-25 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-25 18:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 18:00:01,511 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 18:00:01,516 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 18:00:01,520 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 18:00:01,521 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 18:00:01,608 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 18:00:01,686 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 18:00:01,687 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 19:00:00 UTC)" executed successfully 2026-10-25 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 20:00:00 UTC)" (scheduled at 2026-10-25 19:00:00+00:00) 2026-10-25 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-25 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 19:00:01,001 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 19:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 19:00:01,006 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 19:00:01,006 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 19:00:01,057 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 19:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 19:00:01,109 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 20:00:00 UTC)" executed successfully 2026-10-25 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 21:00:00 UTC)" (scheduled at 2026-10-25 20:00:00+00:00) 2026-10-25 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-25 20:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 20:00:01,799 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 20:00:01,802 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 20:00:01,806 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 20:00:01,806 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 20:00:01,878 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 20:00:01,957 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 20:00:01,958 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 21:00:00 UTC)" executed successfully 2026-10-25 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 22:00:00 UTC)" (scheduled at 2026-10-25 21:00:00+00:00) 2026-10-25 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-25 21:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 21:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 21:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 21:00:01,119 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 21:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 21:00:01,165 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 21:00:01,212 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 21:00:01,212 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 22:00:00 UTC)" executed successfully 2026-10-25 22:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 23:00:00 UTC)" (scheduled at 2026-10-25 22:00:00+00:00) 2026-10-25 22:00:00,020 INFO [fb-sync] Starting FB sync... 2026-10-25 22:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 22:00:01,024 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 22:00:01,027 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 22:00:01,029 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 22:00:01,029 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 22:00:01,094 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 22:00:01,155 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 22:00:01,156 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-25 23:00:00 UTC)" executed successfully 2026-10-25 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 00:00:00 UTC)" (scheduled at 2026-10-25 23:00:00+00:00) 2026-10-25 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-25 23:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-25 23:00:01,505 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-25 23:00:01,508 INFO [fb-sync.worker] Scraped 50 posts 2026-10-25 23:00:01,511 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-25 23:00:01,511 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-25 23:00:01,581 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-25 23:00:01,656 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-25 23:00:01,657 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 00:00:00 UTC)" executed successfully 2026-10-26 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 01:00:00 UTC)" (scheduled at 2026-10-26 00:00:00+00:00) 2026-10-26 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-26 00:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 00:00:01,980 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 00:00:01,983 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 00:00:01,986 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 00:00:01,986 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 00:00:02,061 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 00:00:02,140 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 00:00:02,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 01:00:00 UTC)" executed successfully 2026-10-26 01:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 02:00:00 UTC)" (scheduled at 2026-10-26 01:00:00+00:00) 2026-10-26 01:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-26 01:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 01:00:01,447 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 01:00:01,450 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 01:00:01,452 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 01:00:01,453 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 01:00:01,521 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 01:00:01,592 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 01:00:01,593 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 02:00:00 UTC)" executed successfully 2026-10-26 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 03:00:00 UTC)" (scheduled at 2026-10-26 02:00:00+00:00) 2026-10-26 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-26 02:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 02:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 02:00:01,040 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 02:00:01,043 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 02:00:01,044 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 02:00:01,120 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 02:00:01,187 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 02:00:01,187 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 03:00:00 UTC)" executed successfully 2026-10-26 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 04:00:00 UTC)" (scheduled at 2026-10-26 03:00:00+00:00) 2026-10-26 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-26 03:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 03:00:01,907 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 03:00:01,910 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 03:00:01,913 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 03:00:01,913 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 03:00:01,997 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 03:00:02,082 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 03:00:02,082 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 04:00:00 UTC)" executed successfully 2026-10-26 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 05:00:00 UTC)" (scheduled at 2026-10-26 04:00:00+00:00) 2026-10-26 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-26 04:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 04:00:01,032 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 04:00:01,033 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 04:00:01,036 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 04:00:01,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 04:00:01,104 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 04:00:01,161 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 04:00:01,161 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 05:00:00 UTC)" executed successfully 2026-10-26 05:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 06:00:00 UTC)" (scheduled at 2026-10-26 05:00:00+00:00) 2026-10-26 05:00:00,018 INFO [fb-sync] Starting FB sync... 2026-10-26 05:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 05:00:01,713 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 05:00:01,715 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 05:00:01,717 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 05:00:01,718 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 05:00:01,772 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 05:00:01,846 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 05:00:01,847 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 06:00:00 UTC)" executed successfully 2026-10-26 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 07:00:00 UTC)" (scheduled at 2026-10-26 06:00:00+00:00) 2026-10-26 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-26 06:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 06:00:01,307 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 06:00:01,309 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 06:00:01,311 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 06:00:01,312 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 06:00:01,373 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 06:00:01,455 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 06:00:01,456 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 07:00:00 UTC)" executed successfully 2026-10-26 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 08:00:00 UTC)" (scheduled at 2026-10-26 07:00:00+00:00) 2026-10-26 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-26 07:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 07:00:01,251 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 07:00:01,253 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 07:00:01,255 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 07:00:01,256 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 07:00:01,309 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 07:00:01,362 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 07:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 08:00:00 UTC)" executed successfully 2026-10-26 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 09:00:00 UTC)" (scheduled at 2026-10-26 08:00:00+00:00) 2026-10-26 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-26 08:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 08:00:01,702 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 08:00:01,704 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 08:00:01,706 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 08:00:01,706 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 08:00:01,761 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 08:00:01,819 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 08:00:01,819 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 09:00:00 UTC)" executed successfully 2026-10-26 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 10:00:00 UTC)" (scheduled at 2026-10-26 09:00:00+00:00) 2026-10-26 09:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-26 09:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 09:00:01,185 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 09:00:01,187 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 09:00:01,189 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 09:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 09:00:01,239 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 09:00:01,296 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 09:00:01,297 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 10:00:00 UTC)" executed successfully 2026-10-26 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 11:00:00 UTC)" (scheduled at 2026-10-26 10:00:00+00:00) 2026-10-26 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-26 10:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 10:00:01,268 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 10:00:01,270 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 10:00:01,272 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 10:00:01,273 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 10:00:01,339 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 10:00:01,406 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 10:00:01,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 11:00:00 UTC)" executed successfully 2026-10-26 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 12:00:00 UTC)" (scheduled at 2026-10-26 11:00:00+00:00) 2026-10-26 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-26 11:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 11:00:01,845 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 11:00:01,847 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 11:00:01,850 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 11:00:01,851 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 11:00:01,920 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 11:00:01,999 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 11:00:01,999 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 12:00:00 UTC)" executed successfully 2026-10-26 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 13:00:00 UTC)" (scheduled at 2026-10-26 12:00:00+00:00) 2026-10-26 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-26 12:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 12:00:01,343 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 12:00:01,345 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 12:00:01,347 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 12:00:01,347 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 12:00:01,399 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 12:00:01,457 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 12:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 13:00:00 UTC)" executed successfully 2026-10-26 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 14:00:00 UTC)" (scheduled at 2026-10-26 13:00:00+00:00) 2026-10-26 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-26 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 13:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 13:00:01,150 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 13:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 13:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 13:00:01,204 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 13:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 13:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 14:00:00 UTC)" executed successfully 2026-10-26 14:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 15:00:00 UTC)" (scheduled at 2026-10-26 14:00:00+00:00) 2026-10-26 14:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-26 14:00:00,107 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 14:00:01,462 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 14:00:01,464 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 14:00:01,468 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 14:00:01,468 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 14:00:01,537 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 14:00:01,610 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 14:00:01,610 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 15:00:00 UTC)" executed successfully 2026-10-26 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 16:00:00 UTC)" (scheduled at 2026-10-26 15:00:00+00:00) 2026-10-26 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-26 15:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 15:00:01,190 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 15:00:01,192 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 15:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 15:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 15:00:01,268 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 15:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 15:00:01,347 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 16:00:00 UTC)" executed successfully 2026-10-26 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 17:00:00 UTC)" (scheduled at 2026-10-26 16:00:00+00:00) 2026-10-26 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-26 16:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 16:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 16:00:01,265 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 16:00:01,268 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 16:00:01,268 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 16:00:01,337 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 16:00:01,394 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 16:00:01,397 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 17:00:00 UTC)" executed successfully 2026-10-26 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 18:00:00 UTC)" (scheduled at 2026-10-26 17:00:00+00:00) 2026-10-26 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-26 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 17:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 17:00:01,226 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 17:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 17:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 17:00:01,288 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 17:00:01,342 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 17:00:01,342 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 18:00:00 UTC)" executed successfully 2026-10-26 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 19:00:00 UTC)" (scheduled at 2026-10-26 18:00:00+00:00) 2026-10-26 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-26 18:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 18:00:01,147 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 18:00:01,149 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 18:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 18:00:01,152 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 18:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 18:00:01,255 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 18:00:01,256 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 19:00:00 UTC)" executed successfully 2026-10-26 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 20:00:00 UTC)" (scheduled at 2026-10-26 19:00:00+00:00) 2026-10-26 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-26 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 19:00:04,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 19:00:04,041 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 19:00:04,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 19:00:04,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 19:00:04,127 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 19:00:04,193 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 19:00:04,193 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 20:00:00 UTC)" executed successfully 2026-10-26 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 21:00:00 UTC)" (scheduled at 2026-10-26 20:00:00+00:00) 2026-10-26 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-26 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 20:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 20:00:01,311 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 20:00:01,316 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 20:00:01,317 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 20:00:01,377 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 20:00:01,425 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 20:00:01,425 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 21:00:00 UTC)" executed successfully 2026-10-26 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 22:00:00 UTC)" (scheduled at 2026-10-26 21:00:00+00:00) 2026-10-26 21:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-26 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 21:00:01,313 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 21:00:01,316 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 21:00:01,320 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 21:00:01,320 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 21:00:01,405 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 21:00:01,475 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 21:00:01,475 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 22:00:00 UTC)" executed successfully 2026-10-26 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 23:00:00 UTC)" (scheduled at 2026-10-26 22:00:00+00:00) 2026-10-26 22:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-26 22:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 22:00:01,238 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 22:00:01,240 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 22:00:01,243 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 22:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 22:00:01,299 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 22:00:01,356 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 22:00:01,356 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-26 23:00:00 UTC)" executed successfully 2026-10-26 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 00:00:00 UTC)" (scheduled at 2026-10-26 23:00:00+00:00) 2026-10-26 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-26 23:00:00,112 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-26 23:00:01,416 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-26 23:00:01,418 INFO [fb-sync.worker] Scraped 50 posts 2026-10-26 23:00:01,421 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-26 23:00:01,421 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-26 23:00:01,474 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-26 23:00:01,543 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-26 23:00:01,544 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 00:00:00 UTC)" executed successfully 2026-10-27 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 01:00:00 UTC)" (scheduled at 2026-10-27 00:00:00+00:00) 2026-10-27 00:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-27 00:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 00:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 00:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 00:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 00:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 00:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 00:00:01,334 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 00:00:01,335 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 01:00:00 UTC)" executed successfully 2026-10-27 01:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 02:00:00 UTC)" (scheduled at 2026-10-27 01:00:00+00:00) 2026-10-27 01:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-27 01:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 01:00:01,101 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 01:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 01:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 01:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 01:00:01,158 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 01:00:01,233 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 01:00:01,234 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 02:00:00 UTC)" executed successfully 2026-10-27 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 03:00:00 UTC)" (scheduled at 2026-10-27 02:00:00+00:00) 2026-10-27 02:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-27 02:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 02:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 02:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 02:00:01,159 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 02:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 02:00:01,208 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 02:00:01,264 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 02:00:01,265 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 03:00:00 UTC)" executed successfully 2026-10-27 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 04:00:00 UTC)" (scheduled at 2026-10-27 03:00:00+00:00) 2026-10-27 03:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-27 03:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 03:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 03:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 03:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 03:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 03:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 03:00:01,246 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 03:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 04:00:00 UTC)" executed successfully 2026-10-27 04:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 05:00:00 UTC)" (scheduled at 2026-10-27 04:00:00+00:00) 2026-10-27 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-27 04:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 04:00:01,570 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 04:00:01,572 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 04:00:01,574 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 04:00:01,575 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 04:00:01,633 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 04:00:01,702 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 04:00:01,703 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 05:00:00 UTC)" executed successfully 2026-10-27 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 06:00:00 UTC)" (scheduled at 2026-10-27 05:00:00+00:00) 2026-10-27 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-27 05:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 05:00:01,938 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 05:00:01,940 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 05:00:01,942 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 05:00:01,943 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 05:00:02,010 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 05:00:02,067 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 05:00:02,067 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 06:00:00 UTC)" executed successfully 2026-10-27 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 07:00:00 UTC)" (scheduled at 2026-10-27 06:00:00+00:00) 2026-10-27 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-27 06:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 06:00:01,358 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 06:00:01,360 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 06:00:01,362 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 06:00:01,362 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 06:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 06:00:01,487 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 06:00:01,488 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 07:00:00 UTC)" executed successfully 2026-10-27 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 08:00:00 UTC)" (scheduled at 2026-10-27 07:00:00+00:00) 2026-10-27 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-27 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 07:00:01,188 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 07:00:01,190 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 07:00:01,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 07:00:01,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 07:00:01,257 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 07:00:01,322 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 07:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 08:00:00 UTC)" executed successfully 2026-10-27 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 09:00:00 UTC)" (scheduled at 2026-10-27 08:00:00+00:00) 2026-10-27 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-27 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 08:00:01,527 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 08:00:01,530 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 08:00:01,532 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 08:00:01,532 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 08:00:01,584 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 08:00:01,649 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 08:00:01,649 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 09:00:00 UTC)" executed successfully 2026-10-27 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 10:00:00 UTC)" (scheduled at 2026-10-27 09:00:00+00:00) 2026-10-27 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-27 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 09:00:03,012 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 09:00:03,015 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 09:00:03,018 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 09:00:03,018 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 09:00:03,098 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 09:00:03,150 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 09:00:03,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 10:00:00 UTC)" executed successfully 2026-10-27 10:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 11:00:00 UTC)" (scheduled at 2026-10-27 10:00:00+00:00) 2026-10-27 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-27 10:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 10:00:01,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 10:00:01,164 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 10:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 10:00:01,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 10:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 10:00:01,291 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 10:00:01,292 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 11:00:00 UTC)" executed successfully 2026-10-27 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 12:00:00 UTC)" (scheduled at 2026-10-27 11:00:00+00:00) 2026-10-27 11:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-27 11:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 11:00:01,422 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 11:00:01,425 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 11:00:01,427 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 11:00:01,428 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 11:00:01,487 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 11:00:01,550 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 11:00:01,551 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 12:00:00 UTC)" executed successfully 2026-10-27 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 13:00:00 UTC)" (scheduled at 2026-10-27 12:00:00+00:00) 2026-10-27 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-27 12:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 12:00:01,339 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 12:00:01,341 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 12:00:01,343 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 12:00:01,343 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 12:00:01,394 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 12:00:01,441 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 12:00:01,441 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 13:00:00 UTC)" executed successfully 2026-10-27 13:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 14:00:00 UTC)" (scheduled at 2026-10-27 13:00:00+00:00) 2026-10-27 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-27 13:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 13:00:01,236 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 13:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 13:00:01,241 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 13:00:01,241 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 13:00:01,291 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 13:00:01,534 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 13:00:01,535 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 14:00:00 UTC)" executed successfully 2026-10-27 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 15:00:00 UTC)" (scheduled at 2026-10-27 14:00:00+00:00) 2026-10-27 14:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-27 14:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 14:00:01,227 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 14:00:01,230 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 14:00:01,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 14:00:01,233 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 14:00:01,294 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 14:00:01,346 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 14:00:01,346 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 15:00:00 UTC)" executed successfully 2026-10-27 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 16:00:00 UTC)" (scheduled at 2026-10-27 15:00:00+00:00) 2026-10-27 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-27 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 15:00:01,539 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 15:00:01,541 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 15:00:01,544 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 15:00:01,544 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 15:00:01,600 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 15:00:01,655 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 15:00:01,655 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 16:00:00 UTC)" executed successfully 2026-10-27 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 17:00:00 UTC)" (scheduled at 2026-10-27 16:00:00+00:00) 2026-10-27 16:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-27 16:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 16:00:01,464 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 16:00:01,467 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 16:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 16:00:01,471 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 16:00:01,547 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 16:00:01,607 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 16:00:01,608 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 17:00:00 UTC)" executed successfully 2026-10-27 17:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 18:00:00 UTC)" (scheduled at 2026-10-27 17:00:00+00:00) 2026-10-27 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-27 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 17:00:01,364 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 17:00:01,366 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 17:00:01,368 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 17:00:01,368 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 17:00:01,422 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 17:00:01,474 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 17:00:01,475 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 18:00:00 UTC)" executed successfully 2026-10-27 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 19:00:00 UTC)" (scheduled at 2026-10-27 18:00:00+00:00) 2026-10-27 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-27 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 18:00:01,387 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 18:00:01,389 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 18:00:01,391 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 18:00:01,391 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 18:00:01,445 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 18:00:01,505 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 18:00:01,506 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 19:00:00 UTC)" executed successfully 2026-10-27 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 20:00:00 UTC)" (scheduled at 2026-10-27 19:00:00+00:00) 2026-10-27 19:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-27 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 19:00:01,163 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 19:00:01,165 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 19:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 19:00:01,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 19:00:01,231 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 19:00:01,290 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 19:00:01,291 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 20:00:00 UTC)" executed successfully 2026-10-27 20:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 21:00:00 UTC)" (scheduled at 2026-10-27 20:00:00+00:00) 2026-10-27 20:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-27 20:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 20:00:01,165 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 20:00:01,166 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 20:00:01,168 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 20:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 20:00:01,218 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 20:00:01,282 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 20:00:01,283 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 21:00:00 UTC)" executed successfully 2026-10-27 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 22:00:00 UTC)" (scheduled at 2026-10-27 21:00:00+00:00) 2026-10-27 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-27 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 21:00:01,236 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 21:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 21:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 21:00:01,242 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 21:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 21:00:01,393 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 21:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 22:00:00 UTC)" executed successfully 2026-10-27 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 23:00:00 UTC)" (scheduled at 2026-10-27 22:00:00+00:00) 2026-10-27 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-27 22:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 22:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 22:00:01,104 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 22:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 22:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 22:00:01,157 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 22:00:01,228 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 22:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-27 23:00:00 UTC)" executed successfully 2026-10-27 23:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 00:00:00 UTC)" (scheduled at 2026-10-27 23:00:00+00:00) 2026-10-27 23:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-27 23:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-27 23:00:01,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-27 23:00:01,357 INFO [fb-sync.worker] Scraped 50 posts 2026-10-27 23:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-27 23:00:01,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-27 23:00:01,441 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-27 23:00:01,521 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-27 23:00:01,522 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 00:00:00 UTC)" executed successfully 2026-10-28 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 01:00:00 UTC)" (scheduled at 2026-10-28 00:00:00+00:00) 2026-10-28 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 00:00:01,730 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 00:00:01,732 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 00:00:01,735 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 00:00:01,735 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 00:00:01,805 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 00:00:01,880 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 00:00:01,881 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 01:00:00 UTC)" executed successfully 2026-10-28 01:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 02:00:00 UTC)" (scheduled at 2026-10-28 01:00:00+00:00) 2026-10-28 01:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-28 01:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 01:00:01,702 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 01:00:01,704 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 01:00:01,707 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 01:00:01,707 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 01:00:01,754 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 01:00:01,806 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 01:00:01,807 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 02:00:00 UTC)" executed successfully 2026-10-28 02:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 03:00:00 UTC)" (scheduled at 2026-10-28 02:00:00+00:00) 2026-10-28 02:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-28 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 02:00:01,106 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 02:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 02:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 02:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 02:00:01,159 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 02:00:01,209 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 02:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 03:00:00 UTC)" executed successfully 2026-10-28 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 04:00:00 UTC)" (scheduled at 2026-10-28 03:00:00+00:00) 2026-10-28 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-28 03:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 03:00:01,051 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 03:00:01,053 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 03:00:01,055 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 03:00:01,055 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 03:00:01,102 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 03:00:01,149 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 03:00:01,150 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 04:00:00 UTC)" executed successfully 2026-10-28 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 05:00:00 UTC)" (scheduled at 2026-10-28 04:00:00+00:00) 2026-10-28 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 04:00:01,074 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 04:00:01,075 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 04:00:01,078 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 04:00:01,078 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 04:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 04:00:01,218 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 04:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 05:00:00 UTC)" executed successfully 2026-10-28 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 06:00:00 UTC)" (scheduled at 2026-10-28 05:00:00+00:00) 2026-10-28 05:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-28 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 05:00:01,427 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 05:00:01,430 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 05:00:01,432 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 05:00:01,433 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 05:00:01,501 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 05:00:01,578 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 05:00:01,578 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 06:00:00 UTC)" executed successfully 2026-10-28 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 07:00:00 UTC)" (scheduled at 2026-10-28 06:00:00+00:00) 2026-10-28 06:00:00,017 INFO [fb-sync] Starting FB sync... 2026-10-28 06:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 06:00:01,358 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 06:00:01,360 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 06:00:01,363 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 06:00:01,363 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 06:00:01,439 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 06:00:01,514 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 06:00:01,514 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 07:00:00 UTC)" executed successfully 2026-10-28 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 08:00:00 UTC)" (scheduled at 2026-10-28 07:00:00+00:00) 2026-10-28 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 07:00:01,963 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 07:00:01,966 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 07:00:01,969 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 07:00:01,970 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 07:00:02,060 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 07:00:02,140 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 07:00:02,140 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 08:00:00 UTC)" executed successfully 2026-10-28 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 09:00:00 UTC)" (scheduled at 2026-10-28 08:00:00+00:00) 2026-10-28 08:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-28 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 08:00:01,116 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 08:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 08:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 08:00:01,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 08:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 08:00:01,245 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 08:00:01,246 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 09:00:00 UTC)" executed successfully 2026-10-28 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 10:00:00 UTC)" (scheduled at 2026-10-28 09:00:00+00:00) 2026-10-28 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-28 09:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 09:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 09:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 09:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 09:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 09:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 09:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 09:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 10:00:00 UTC)" executed successfully 2026-10-28 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 11:00:00 UTC)" (scheduled at 2026-10-28 10:00:00+00:00) 2026-10-28 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-28 10:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 10:00:01,260 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 10:00:01,263 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 10:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 10:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 10:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 10:00:01,416 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 10:00:01,417 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 11:00:00 UTC)" executed successfully 2026-10-28 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 12:00:00 UTC)" (scheduled at 2026-10-28 11:00:00+00:00) 2026-10-28 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-28 11:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 11:00:01,623 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 11:00:01,627 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 11:00:01,630 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 11:00:01,631 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 11:00:01,699 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 11:00:01,773 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 11:00:01,774 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 12:00:00 UTC)" executed successfully 2026-10-28 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 13:00:00 UTC)" (scheduled at 2026-10-28 12:00:00+00:00) 2026-10-28 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-28 12:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 12:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 12:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 12:00:01,133 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 12:00:01,133 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 12:00:01,188 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 12:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 12:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 13:00:00 UTC)" executed successfully 2026-10-28 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 14:00:00 UTC)" (scheduled at 2026-10-28 13:00:00+00:00) 2026-10-28 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-28 13:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 13:00:01,140 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 13:00:01,142 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 13:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 13:00:01,145 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 13:00:01,199 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 13:00:01,257 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 13:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 14:00:00 UTC)" executed successfully 2026-10-28 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 15:00:00 UTC)" (scheduled at 2026-10-28 14:00:00+00:00) 2026-10-28 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 14:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 14:00:01,231 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 14:00:01,233 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 14:00:01,236 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 14:00:01,236 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 14:00:01,293 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 14:00:01,358 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 14:00:01,359 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 15:00:00 UTC)" executed successfully 2026-10-28 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 16:00:00 UTC)" (scheduled at 2026-10-28 15:00:00+00:00) 2026-10-28 15:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-28 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 15:00:01,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 15:00:01,090 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 15:00:01,092 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 15:00:01,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 15:00:01,162 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 15:00:01,220 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 15:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 16:00:00 UTC)" executed successfully 2026-10-28 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 17:00:00 UTC)" (scheduled at 2026-10-28 16:00:00+00:00) 2026-10-28 16:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-28 16:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 16:00:01,387 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 16:00:01,390 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 16:00:01,392 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 16:00:01,392 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 16:00:01,445 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 16:00:01,498 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 16:00:01,498 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 17:00:00 UTC)" executed successfully 2026-10-28 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 18:00:00 UTC)" (scheduled at 2026-10-28 17:00:00+00:00) 2026-10-28 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-28 17:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 17:00:03,569 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 17:00:03,572 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 17:00:03,574 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 17:00:03,575 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 17:00:03,648 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 17:00:03,725 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 17:00:03,725 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 18:00:00 UTC)" executed successfully 2026-10-28 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 19:00:00 UTC)" (scheduled at 2026-10-28 18:00:00+00:00) 2026-10-28 18:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-28 18:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 18:00:03,075 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 18:00:03,077 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 18:00:03,080 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 18:00:03,081 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 18:00:03,138 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 18:00:03,193 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 18:00:03,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 19:00:00 UTC)" executed successfully 2026-10-28 19:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 20:00:00 UTC)" (scheduled at 2026-10-28 19:00:00+00:00) 2026-10-28 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-28 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 19:00:01,260 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 19:00:01,262 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 19:00:01,265 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 19:00:01,266 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 19:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 19:00:01,410 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 19:00:01,411 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 20:00:00 UTC)" executed successfully 2026-10-28 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 21:00:00 UTC)" (scheduled at 2026-10-28 20:00:00+00:00) 2026-10-28 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-28 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 20:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 20:00:01,104 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 20:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 20:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 20:00:01,161 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 20:00:01,220 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 20:00:01,220 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 21:00:00 UTC)" executed successfully 2026-10-28 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 22:00:00 UTC)" (scheduled at 2026-10-28 21:00:00+00:00) 2026-10-28 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 21:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 21:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 21:00:01,025 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 21:00:01,027 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 21:00:01,028 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 21:00:01,092 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 21:00:01,144 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 21:00:01,144 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 22:00:00 UTC)" executed successfully 2026-10-28 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 23:00:00 UTC)" (scheduled at 2026-10-28 22:00:00+00:00) 2026-10-28 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-28 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 22:00:01,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 22:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 22:00:01,141 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 22:00:01,141 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 22:00:01,207 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 22:00:01,285 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 22:00:01,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-28 23:00:00 UTC)" executed successfully 2026-10-28 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 00:00:00 UTC)" (scheduled at 2026-10-28 23:00:00+00:00) 2026-10-28 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-28 23:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-28 23:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-28 23:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-10-28 23:00:01,199 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-28 23:00:01,199 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-28 23:00:01,249 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-28 23:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-28 23:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 00:00:00 UTC)" executed successfully 2026-10-29 00:00:00,017 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 01:00:00 UTC)" (scheduled at 2026-10-29 00:00:00+00:00) 2026-10-29 00:00:00,019 INFO [fb-sync] Starting FB sync... 2026-10-29 00:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 00:00:02,081 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 00:00:02,084 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 00:00:02,087 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 00:00:02,088 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 00:00:02,172 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 00:00:02,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 00:00:02,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 01:00:00 UTC)" executed successfully 2026-10-29 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 02:00:00 UTC)" (scheduled at 2026-10-29 01:00:00+00:00) 2026-10-29 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-29 01:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 01:00:01,774 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 01:00:01,776 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 01:00:01,779 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 01:00:01,779 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 01:00:01,849 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 01:00:01,911 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 01:00:01,911 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 02:00:00 UTC)" executed successfully 2026-10-29 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 03:00:00 UTC)" (scheduled at 2026-10-29 02:00:00+00:00) 2026-10-29 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-29 02:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 02:00:01,347 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 02:00:01,350 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 02:00:01,353 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 02:00:01,353 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 02:00:01,411 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 02:00:01,482 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 02:00:01,482 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 03:00:00 UTC)" executed successfully 2026-10-29 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 04:00:00 UTC)" (scheduled at 2026-10-29 03:00:00+00:00) 2026-10-29 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-29 03:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 03:00:01,176 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 03:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 03:00:01,181 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 03:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 03:00:01,230 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 03:00:01,291 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 03:00:01,291 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 04:00:00 UTC)" executed successfully 2026-10-29 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 05:00:00 UTC)" (scheduled at 2026-10-29 04:00:00+00:00) 2026-10-29 04:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-29 04:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 04:00:01,162 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 04:00:01,164 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 04:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 04:00:01,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 04:00:01,233 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 04:00:01,287 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 04:00:01,288 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 05:00:00 UTC)" executed successfully 2026-10-29 05:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 06:00:00 UTC)" (scheduled at 2026-10-29 05:00:00+00:00) 2026-10-29 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-29 05:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 05:00:01,137 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 05:00:01,138 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 05:00:01,140 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 05:00:01,140 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 05:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 05:00:01,233 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 05:00:01,233 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 06:00:00 UTC)" executed successfully 2026-10-29 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 07:00:00 UTC)" (scheduled at 2026-10-29 06:00:00+00:00) 2026-10-29 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-29 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 06:00:01,292 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 06:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 06:00:01,296 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 06:00:01,296 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 06:00:01,352 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 06:00:01,426 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 06:00:01,426 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 07:00:00 UTC)" executed successfully 2026-10-29 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 08:00:00 UTC)" (scheduled at 2026-10-29 07:00:00+00:00) 2026-10-29 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-29 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 07:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 07:00:01,231 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 07:00:01,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 07:00:01,233 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 07:00:01,283 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 07:00:01,334 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 07:00:01,335 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 08:00:00 UTC)" executed successfully 2026-10-29 08:00:00,019 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 09:00:00 UTC)" (scheduled at 2026-10-29 08:00:00+00:00) 2026-10-29 08:00:00,024 INFO [fb-sync] Starting FB sync... 2026-10-29 08:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 08:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 08:00:01,118 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 08:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 08:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 08:00:01,188 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 08:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 08:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 09:00:00 UTC)" executed successfully 2026-10-29 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 10:00:00 UTC)" (scheduled at 2026-10-29 09:00:00+00:00) 2026-10-29 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-29 09:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 09:00:01,130 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 09:00:01,132 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 09:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 09:00:01,134 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 09:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 09:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 09:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 10:00:00 UTC)" executed successfully 2026-10-29 10:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 11:00:00 UTC)" (scheduled at 2026-10-29 10:00:00+00:00) 2026-10-29 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-29 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 10:00:01,057 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 10:00:01,059 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 10:00:01,061 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 10:00:01,062 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 10:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 10:00:01,171 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 10:00:01,171 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 11:00:00 UTC)" executed successfully 2026-10-29 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 12:00:00 UTC)" (scheduled at 2026-10-29 11:00:00+00:00) 2026-10-29 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-29 11:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 11:00:01,205 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 11:00:01,207 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 11:00:01,210 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 11:00:01,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 11:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 11:00:01,326 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 11:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 12:00:00 UTC)" executed successfully 2026-10-29 12:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 13:00:00 UTC)" (scheduled at 2026-10-29 12:00:00+00:00) 2026-10-29 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-29 12:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 12:00:02,269 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 12:00:02,272 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 12:00:02,274 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 12:00:02,275 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 12:00:02,344 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 12:00:02,418 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 12:00:02,418 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 13:00:00 UTC)" executed successfully 2026-10-29 13:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 14:00:00 UTC)" (scheduled at 2026-10-29 13:00:00+00:00) 2026-10-29 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-29 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 13:00:01,299 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 13:00:01,301 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 13:00:01,303 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 13:00:01,303 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 13:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 13:00:01,397 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 13:00:01,397 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 14:00:00 UTC)" executed successfully 2026-10-29 14:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 15:00:00 UTC)" (scheduled at 2026-10-29 14:00:00+00:00) 2026-10-29 14:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-29 14:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 14:00:01,752 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 14:00:01,754 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 14:00:01,756 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 14:00:01,756 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 14:00:01,816 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 14:00:01,873 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 14:00:01,873 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 15:00:00 UTC)" executed successfully 2026-10-29 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 16:00:00 UTC)" (scheduled at 2026-10-29 15:00:00+00:00) 2026-10-29 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-29 15:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 15:00:01,355 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 15:00:01,358 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 15:00:01,361 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 15:00:01,361 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 15:00:01,442 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 15:00:01,528 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 15:00:01,528 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 16:00:00 UTC)" executed successfully 2026-10-29 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 17:00:00 UTC)" (scheduled at 2026-10-29 16:00:00+00:00) 2026-10-29 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-29 16:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 16:00:01,765 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 16:00:01,768 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 16:00:01,770 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 16:00:01,770 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 16:00:01,819 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 16:00:01,884 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 16:00:01,884 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 17:00:00 UTC)" executed successfully 2026-10-29 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 18:00:00 UTC)" (scheduled at 2026-10-29 17:00:00+00:00) 2026-10-29 17:00:00,005 INFO [fb-sync] Starting FB sync... 2026-10-29 17:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 17:00:01,077 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 17:00:01,080 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 17:00:01,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 17:00:01,083 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 17:00:01,134 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 17:00:01,179 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 17:00:01,179 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 18:00:00 UTC)" executed successfully 2026-10-29 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 19:00:00 UTC)" (scheduled at 2026-10-29 18:00:00+00:00) 2026-10-29 18:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-29 18:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 18:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 18:00:01,311 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 18:00:01,313 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 18:00:01,313 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 18:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 18:00:01,423 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 18:00:01,423 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 19:00:00 UTC)" executed successfully 2026-10-29 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 20:00:00 UTC)" (scheduled at 2026-10-29 19:00:00+00:00) 2026-10-29 19:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-29 19:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 19:00:01,226 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 19:00:01,228 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 19:00:01,231 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 19:00:01,231 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 19:00:01,299 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 19:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 19:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 20:00:00 UTC)" executed successfully 2026-10-29 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 21:00:00 UTC)" (scheduled at 2026-10-29 20:00:00+00:00) 2026-10-29 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-29 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 20:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 20:00:01,025 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 20:00:01,028 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 20:00:01,028 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 20:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 20:00:01,148 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 20:00:01,149 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 21:00:00 UTC)" executed successfully 2026-10-29 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 22:00:00 UTC)" (scheduled at 2026-10-29 21:00:00+00:00) 2026-10-29 21:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-29 21:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 21:00:01,104 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 21:00:01,107 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 21:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 21:00:01,110 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 21:00:01,189 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 21:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 21:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 22:00:00 UTC)" executed successfully 2026-10-29 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 23:00:00 UTC)" (scheduled at 2026-10-29 22:00:00+00:00) 2026-10-29 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-29 22:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 22:00:01,257 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 22:00:01,260 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 22:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 22:00:01,263 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 22:00:01,320 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 22:00:01,393 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 22:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-29 23:00:00 UTC)" executed successfully 2026-10-29 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 00:00:00 UTC)" (scheduled at 2026-10-29 23:00:00+00:00) 2026-10-29 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-29 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-29 23:00:02,001 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-29 23:00:02,004 INFO [fb-sync.worker] Scraped 50 posts 2026-10-29 23:00:02,007 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-29 23:00:02,007 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-29 23:00:02,065 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-29 23:00:02,134 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-29 23:00:02,134 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 00:00:00 UTC)" executed successfully 2026-10-30 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 01:00:00 UTC)" (scheduled at 2026-10-30 00:00:00+00:00) 2026-10-30 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 00:00:02,955 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 00:00:02,957 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 00:00:02,959 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 00:00:02,960 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 00:00:03,013 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 00:00:03,070 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 00:00:03,070 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 01:00:00 UTC)" executed successfully 2026-10-30 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 02:00:00 UTC)" (scheduled at 2026-10-30 01:00:00+00:00) 2026-10-30 01:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-30 01:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 01:00:01,566 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 01:00:01,568 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 01:00:01,571 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 01:00:01,571 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 01:00:01,640 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 01:00:01,704 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 01:00:01,704 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 02:00:00 UTC)" executed successfully 2026-10-30 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 03:00:00 UTC)" (scheduled at 2026-10-30 02:00:00+00:00) 2026-10-30 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-30 02:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 02:00:01,392 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 02:00:01,394 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 02:00:01,395 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 02:00:01,395 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 02:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 02:00:01,531 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 02:00:01,531 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 03:00:00 UTC)" executed successfully 2026-10-30 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 04:00:00 UTC)" (scheduled at 2026-10-30 03:00:00+00:00) 2026-10-30 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-30 03:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 03:00:01,237 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 03:00:01,239 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 03:00:01,242 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 03:00:01,243 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 03:00:01,314 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 03:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 03:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 04:00:00 UTC)" executed successfully 2026-10-30 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 05:00:00 UTC)" (scheduled at 2026-10-30 04:00:00+00:00) 2026-10-30 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-30 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 04:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 04:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 04:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 04:00:01,202 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 04:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 04:00:01,324 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 04:00:01,325 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 05:00:00 UTC)" executed successfully 2026-10-30 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 06:00:00 UTC)" (scheduled at 2026-10-30 05:00:00+00:00) 2026-10-30 05:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 05:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 05:00:01,717 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 05:00:01,720 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 05:00:01,723 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 05:00:01,723 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 05:00:01,801 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 05:00:01,881 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 05:00:01,882 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 06:00:00 UTC)" executed successfully 2026-10-30 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 07:00:00 UTC)" (scheduled at 2026-10-30 06:00:00+00:00) 2026-10-30 06:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-30 06:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 06:00:01,288 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 06:00:01,291 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 06:00:01,293 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 06:00:01,293 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 06:00:01,342 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 06:00:01,395 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 06:00:01,395 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 07:00:00 UTC)" executed successfully 2026-10-30 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 08:00:00 UTC)" (scheduled at 2026-10-30 07:00:00+00:00) 2026-10-30 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 07:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 07:00:01,225 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 07:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 07:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 07:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 07:00:01,364 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 07:00:01,364 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 08:00:00 UTC)" executed successfully 2026-10-30 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 09:00:00 UTC)" (scheduled at 2026-10-30 08:00:00+00:00) 2026-10-30 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-30 08:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 08:00:01,194 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 08:00:01,196 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 08:00:01,198 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 08:00:01,198 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 08:00:01,265 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 08:00:01,340 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 08:00:01,340 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 09:00:00 UTC)" executed successfully 2026-10-30 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 10:00:00 UTC)" (scheduled at 2026-10-30 09:00:00+00:00) 2026-10-30 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-30 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 09:00:02,459 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 09:00:02,461 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 09:00:02,464 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 09:00:02,465 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 09:00:02,534 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 09:00:02,589 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 09:00:02,590 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 10:00:00 UTC)" executed successfully 2026-10-30 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 11:00:00 UTC)" (scheduled at 2026-10-30 10:00:00+00:00) 2026-10-30 10:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-30 10:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 10:00:01,305 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 10:00:01,308 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 10:00:01,311 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 10:00:01,311 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 10:00:01,388 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 10:00:01,469 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 10:00:01,469 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 11:00:00 UTC)" executed successfully 2026-10-30 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 12:00:00 UTC)" (scheduled at 2026-10-30 11:00:00+00:00) 2026-10-30 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-30 11:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 11:00:01,493 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 11:00:01,496 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 11:00:01,498 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 11:00:01,499 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 11:00:01,571 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 11:00:01,653 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 11:00:01,654 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 12:00:00 UTC)" executed successfully 2026-10-30 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 13:00:00 UTC)" (scheduled at 2026-10-30 12:00:00+00:00) 2026-10-30 12:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-30 12:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 12:00:01,404 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 12:00:01,406 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 12:00:01,409 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 12:00:01,409 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 12:00:01,468 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 12:00:01,528 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 12:00:01,529 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 13:00:00 UTC)" executed successfully 2026-10-30 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 14:00:00 UTC)" (scheduled at 2026-10-30 13:00:00+00:00) 2026-10-30 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-10-30 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 13:00:02,450 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 13:00:02,452 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 13:00:02,455 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 13:00:02,456 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 13:00:02,530 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 13:00:02,605 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 13:00:02,605 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 14:00:00 UTC)" executed successfully 2026-10-30 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 15:00:00 UTC)" (scheduled at 2026-10-30 14:00:00+00:00) 2026-10-30 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 14:00:01,523 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 14:00:01,526 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 14:00:01,529 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 14:00:01,529 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 14:00:01,601 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 14:00:01,653 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 14:00:01,653 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 15:00:00 UTC)" executed successfully 2026-10-30 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 16:00:00 UTC)" (scheduled at 2026-10-30 15:00:00+00:00) 2026-10-30 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-30 15:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 15:00:01,455 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 15:00:01,457 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 15:00:01,460 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 15:00:01,460 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 15:00:01,531 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 15:00:01,606 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 15:00:01,606 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 16:00:00 UTC)" executed successfully 2026-10-30 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 17:00:00 UTC)" (scheduled at 2026-10-30 16:00:00+00:00) 2026-10-30 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 16:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 16:00:01,444 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 16:00:01,447 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 16:00:01,450 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 16:00:01,450 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 16:00:01,523 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 16:00:01,602 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 16:00:01,602 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 17:00:00 UTC)" executed successfully 2026-10-30 17:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 18:00:00 UTC)" (scheduled at 2026-10-30 17:00:00+00:00) 2026-10-30 17:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 17:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 17:00:01,363 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 17:00:01,365 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 17:00:01,367 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 17:00:01,367 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 17:00:01,414 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 17:00:01,463 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 17:00:01,463 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 18:00:00 UTC)" executed successfully 2026-10-30 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 19:00:00 UTC)" (scheduled at 2026-10-30 18:00:00+00:00) 2026-10-30 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-30 18:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 18:00:01,307 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 18:00:01,309 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 18:00:01,312 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 18:00:01,312 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 18:00:01,369 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 18:00:01,430 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 18:00:01,430 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 19:00:00 UTC)" executed successfully 2026-10-30 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 20:00:00 UTC)" (scheduled at 2026-10-30 19:00:00+00:00) 2026-10-30 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-30 19:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 19:00:01,291 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 19:00:01,294 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 19:00:01,298 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 19:00:01,298 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 19:00:01,356 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 19:00:01,434 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 19:00:01,434 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 20:00:00 UTC)" executed successfully 2026-10-30 20:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 21:00:00 UTC)" (scheduled at 2026-10-30 20:00:00+00:00) 2026-10-30 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-30 20:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 20:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 20:00:01,094 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 20:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 20:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 20:00:01,142 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 20:00:01,196 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 20:00:01,196 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 21:00:00 UTC)" executed successfully 2026-10-30 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 22:00:00 UTC)" (scheduled at 2026-10-30 21:00:00+00:00) 2026-10-30 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-30 21:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 21:00:01,592 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 21:00:01,594 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 21:00:01,597 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 21:00:01,597 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 21:00:01,649 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 21:00:01,711 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 21:00:01,711 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 22:00:00 UTC)" executed successfully 2026-10-30 22:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 23:00:00 UTC)" (scheduled at 2026-10-30 22:00:00+00:00) 2026-10-30 22:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-30 22:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 22:00:01,480 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 22:00:01,482 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 22:00:01,484 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 22:00:01,484 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 22:00:01,538 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 22:00:01,593 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 22:00:01,594 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-30 23:00:00 UTC)" executed successfully 2026-10-30 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 00:00:00 UTC)" (scheduled at 2026-10-30 23:00:00+00:00) 2026-10-30 23:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-30 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-30 23:00:01,201 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-30 23:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-10-30 23:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-30 23:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-30 23:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-30 23:00:01,342 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-30 23:00:01,343 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 00:00:00 UTC)" executed successfully 2026-10-31 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 01:00:00 UTC)" (scheduled at 2026-10-31 00:00:00+00:00) 2026-10-31 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 00:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 00:00:00,982 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 00:00:00,985 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 00:00:00,988 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 00:00:00,988 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 00:00:01,045 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 00:00:01,109 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 00:00:01,109 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 01:00:00 UTC)" executed successfully 2026-10-31 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 02:00:00 UTC)" (scheduled at 2026-10-31 01:00:00+00:00) 2026-10-31 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-31 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 01:00:01,089 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 01:00:01,092 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 01:00:01,094 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 01:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 01:00:01,141 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 01:00:01,195 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 01:00:01,196 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 02:00:00 UTC)" executed successfully 2026-10-31 02:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 03:00:00 UTC)" (scheduled at 2026-10-31 02:00:00+00:00) 2026-10-31 02:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-31 02:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 02:00:01,087 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 02:00:01,090 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 02:00:01,093 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 02:00:01,094 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 02:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 02:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 02:00:01,205 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 03:00:00 UTC)" executed successfully 2026-10-31 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 04:00:00 UTC)" (scheduled at 2026-10-31 03:00:00+00:00) 2026-10-31 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 03:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 03:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 03:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 03:00:01,065 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 03:00:01,065 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 03:00:01,132 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 03:00:01,207 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 03:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 04:00:00 UTC)" executed successfully 2026-10-31 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 05:00:00 UTC)" (scheduled at 2026-10-31 04:00:00+00:00) 2026-10-31 04:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-31 04:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 04:00:01,468 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 04:00:01,471 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 04:00:01,474 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 04:00:01,474 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 04:00:01,546 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 04:00:01,624 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 04:00:01,625 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 05:00:00 UTC)" executed successfully 2026-10-31 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 06:00:00 UTC)" (scheduled at 2026-10-31 05:00:00+00:00) 2026-10-31 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-31 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 05:00:01,057 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 05:00:01,059 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 05:00:01,061 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 05:00:01,061 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 05:00:01,108 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 05:00:01,155 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 05:00:01,155 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 06:00:00 UTC)" executed successfully 2026-10-31 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 07:00:00 UTC)" (scheduled at 2026-10-31 06:00:00+00:00) 2026-10-31 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-31 06:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 06:00:01,108 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 06:00:01,110 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 06:00:01,112 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 06:00:01,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 06:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 06:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 06:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 07:00:00 UTC)" executed successfully 2026-10-31 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 08:00:00 UTC)" (scheduled at 2026-10-31 07:00:00+00:00) 2026-10-31 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 07:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 07:00:01,026 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 07:00:01,029 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 07:00:01,032 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 07:00:01,032 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 07:00:01,106 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 07:00:01,177 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 07:00:01,177 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 08:00:00 UTC)" executed successfully 2026-10-31 08:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 09:00:00 UTC)" (scheduled at 2026-10-31 08:00:00+00:00) 2026-10-31 08:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-31 08:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 08:00:01,105 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 08:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 08:00:01,111 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 08:00:01,112 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 08:00:01,176 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 08:00:01,229 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 08:00:01,229 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 09:00:00 UTC)" executed successfully 2026-10-31 09:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 10:00:00 UTC)" (scheduled at 2026-10-31 09:00:00+00:00) 2026-10-31 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-31 09:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 09:00:01,151 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 09:00:01,153 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 09:00:01,156 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 09:00:01,157 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 09:00:01,206 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 09:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 09:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 10:00:00 UTC)" executed successfully 2026-10-31 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 11:00:00 UTC)" (scheduled at 2026-10-31 10:00:00+00:00) 2026-10-31 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-31 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 10:00:01,074 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 10:00:01,075 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 10:00:01,077 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 10:00:01,078 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 10:00:01,125 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 10:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 10:00:01,175 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 11:00:00 UTC)" executed successfully 2026-10-31 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 12:00:00 UTC)" (scheduled at 2026-10-31 11:00:00+00:00) 2026-10-31 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 11:00:01,773 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 11:00:01,775 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 11:00:01,777 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 11:00:01,777 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 11:00:01,835 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 11:00:01,903 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 11:00:01,903 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 12:00:00 UTC)" executed successfully 2026-10-31 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 13:00:00 UTC)" (scheduled at 2026-10-31 12:00:00+00:00) 2026-10-31 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-10-31 12:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 12:00:01,413 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 12:00:01,416 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 12:00:01,419 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 12:00:01,419 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 12:00:01,493 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 12:00:01,554 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 12:00:01,555 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 13:00:00 UTC)" executed successfully 2026-10-31 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 14:00:00 UTC)" (scheduled at 2026-10-31 13:00:00+00:00) 2026-10-31 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 13:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 13:00:01,361 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 13:00:01,363 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 13:00:01,365 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 13:00:01,365 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 13:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 13:00:01,490 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 13:00:01,490 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 14:00:00 UTC)" executed successfully 2026-10-31 14:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 15:00:00 UTC)" (scheduled at 2026-10-31 14:00:00+00:00) 2026-10-31 14:00:00,016 INFO [fb-sync] Starting FB sync... 2026-10-31 14:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 14:00:01,169 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 14:00:01,178 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 14:00:01,181 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 14:00:01,182 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 14:00:01,259 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 14:00:01,339 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 14:00:01,340 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 15:00:00 UTC)" executed successfully 2026-10-31 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 16:00:00 UTC)" (scheduled at 2026-10-31 15:00:00+00:00) 2026-10-31 15:00:00,007 INFO [fb-sync] Starting FB sync... 2026-10-31 15:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 15:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 15:00:01,105 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 15:00:01,108 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 15:00:01,109 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 15:00:01,185 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 15:00:01,270 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 15:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 16:00:00 UTC)" executed successfully 2026-10-31 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 17:00:00 UTC)" (scheduled at 2026-10-31 16:00:00+00:00) 2026-10-31 16:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-31 16:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 16:00:01,168 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 16:00:01,171 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 16:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 16:00:01,174 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 16:00:01,223 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 16:00:01,290 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 16:00:01,291 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 17:00:00 UTC)" executed successfully 2026-10-31 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 18:00:00 UTC)" (scheduled at 2026-10-31 17:00:00+00:00) 2026-10-31 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-10-31 17:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 17:00:01,896 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 17:00:01,899 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 17:00:01,901 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 17:00:01,901 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 17:00:01,960 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 17:00:02,028 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 17:00:02,028 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 18:00:00 UTC)" executed successfully 2026-10-31 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 19:00:00 UTC)" (scheduled at 2026-10-31 18:00:00+00:00) 2026-10-31 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-10-31 18:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 18:00:02,271 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 18:00:02,274 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 18:00:02,277 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 18:00:02,278 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 18:00:02,351 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 18:00:02,431 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 18:00:02,431 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 19:00:00 UTC)" executed successfully 2026-10-31 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 20:00:00 UTC)" (scheduled at 2026-10-31 19:00:00+00:00) 2026-10-31 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-10-31 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 19:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 19:00:01,086 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 19:00:01,088 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 19:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 19:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 19:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 19:00:01,247 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 20:00:00 UTC)" executed successfully 2026-10-31 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 21:00:00 UTC)" (scheduled at 2026-10-31 20:00:00+00:00) 2026-10-31 20:00:00,010 INFO [fb-sync] Starting FB sync... 2026-10-31 20:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 20:00:00,991 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 20:00:00,993 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 20:00:00,995 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 20:00:00,995 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 20:00:01,044 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 20:00:01,096 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 20:00:01,096 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 21:00:00 UTC)" executed successfully 2026-10-31 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 22:00:00 UTC)" (scheduled at 2026-10-31 21:00:00+00:00) 2026-10-31 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-10-31 21:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 21:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 21:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 21:00:01,152 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 21:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 21:00:01,202 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 21:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 21:00:01,252 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 22:00:00 UTC)" executed successfully 2026-10-31 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 23:00:00 UTC)" (scheduled at 2026-10-31 22:00:00+00:00) 2026-10-31 22:00:00,015 INFO [fb-sync] Starting FB sync... 2026-10-31 22:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 22:00:01,018 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 22:00:01,020 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 22:00:01,027 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 22:00:01,028 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 22:00:01,076 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 22:00:01,124 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 22:00:01,124 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-10-31 23:00:00 UTC)" executed successfully 2026-10-31 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 00:00:00 UTC)" (scheduled at 2026-10-31 23:00:00+00:00) 2026-10-31 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-10-31 23:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-10-31 23:00:01,229 INFO [fb-sync.worker] Graph API returned 50 posts 2026-10-31 23:00:01,232 INFO [fb-sync.worker] Scraped 50 posts 2026-10-31 23:00:01,234 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-10-31 23:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-10-31 23:00:01,282 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-10-31 23:00:01,356 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-10-31 23:00:01,356 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 00:00:00 UTC)" executed successfully 2026-11-01 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 01:00:00 UTC)" (scheduled at 2026-11-01 00:00:00+00:00) 2026-11-01 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-01 00:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 00:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 00:00:01,184 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 00:00:01,188 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 00:00:01,189 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 00:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 00:00:01,350 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 00:00:01,352 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 01:00:00 UTC)" executed successfully 2026-11-01 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 02:00:00 UTC)" (scheduled at 2026-11-01 01:00:00+00:00) 2026-11-01 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-01 01:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 01:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 01:00:01,203 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 01:00:01,206 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 01:00:01,206 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 01:00:01,253 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 01:00:01,315 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 01:00:01,315 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 02:00:00 UTC)" executed successfully 2026-11-01 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 03:00:00 UTC)" (scheduled at 2026-11-01 02:00:00+00:00) 2026-11-01 02:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-01 02:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 02:00:01,079 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 02:00:01,081 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 02:00:01,083 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 02:00:01,083 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 02:00:01,139 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 02:00:01,219 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 02:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 03:00:00 UTC)" executed successfully 2026-11-01 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 04:00:00 UTC)" (scheduled at 2026-11-01 03:00:00+00:00) 2026-11-01 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-01 03:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 03:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 03:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 03:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 03:00:01,118 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 03:00:01,164 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 03:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 03:00:01,233 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 04:00:00 UTC)" executed successfully 2026-11-01 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 04:00:00 UTC)" (scheduled at 2026-11-01 04:00:00+00:00) 2026-11-01 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-01 04:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 04:00:02,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 04:00:02,279 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 04:00:02,282 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 04:00:02,282 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 04:00:02,355 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 04:00:02,405 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 04:00:02,406 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 05:00:00 UTC)" executed successfully 2026-11-01 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 06:00:00 UTC)" (scheduled at 2026-11-01 05:00:00+00:00) 2026-11-01 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-01 05:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 05:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 05:00:01,129 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 05:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 05:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 05:00:01,176 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 05:00:01,224 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 05:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 06:00:00 UTC)" executed successfully 2026-11-01 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 07:00:00 UTC)" (scheduled at 2026-11-01 06:00:00+00:00) 2026-11-01 06:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-01 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 06:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 06:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 06:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 06:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 06:00:01,150 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 06:00:01,209 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 06:00:01,209 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 07:00:00 UTC)" executed successfully 2026-11-01 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 08:00:00 UTC)" (scheduled at 2026-11-01 07:00:00+00:00) 2026-11-01 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-01 07:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 07:00:01,310 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 07:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 07:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 07:00:01,315 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 07:00:01,373 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 07:00:01,427 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 07:00:01,427 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 08:00:00 UTC)" executed successfully 2026-11-01 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 09:00:00 UTC)" (scheduled at 2026-11-01 08:00:00+00:00) 2026-11-01 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-01 08:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 08:00:01,078 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 08:00:01,080 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 08:00:01,083 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 08:00:01,083 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 08:00:01,130 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 08:00:01,180 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 08:00:01,180 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 09:00:00 UTC)" executed successfully 2026-11-01 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 10:00:00 UTC)" (scheduled at 2026-11-01 09:00:00+00:00) 2026-11-01 09:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-01 09:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 09:00:01,324 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 09:00:01,326 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 09:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 09:00:01,329 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 09:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 09:00:01,477 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 09:00:01,477 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 10:00:00 UTC)" executed successfully 2026-11-01 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 11:00:00 UTC)" (scheduled at 2026-11-01 10:00:00+00:00) 2026-11-01 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-01 10:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 10:00:01,314 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 10:00:01,317 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 10:00:01,320 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 10:00:01,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 10:00:01,393 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 10:00:01,468 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 10:00:01,468 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 11:00:00 UTC)" executed successfully 2026-11-01 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 12:00:00 UTC)" (scheduled at 2026-11-01 11:00:00+00:00) 2026-11-01 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-01 11:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 11:00:01,435 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 11:00:01,437 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 11:00:01,439 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 11:00:01,439 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 11:00:01,492 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 11:00:01,549 INFO [fb-sync.journal] Retention: dropped 4 record(s) older than 30d 2026-11-01 11:00:01,549 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 12:00:00 UTC)" executed successfully 2026-11-01 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 13:00:00 UTC)" (scheduled at 2026-11-01 12:00:00+00:00) 2026-11-01 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-01 12:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 12:00:01,342 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 12:00:01,346 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 12:00:01,349 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 12:00:01,349 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 12:00:01,428 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 12:00:01,492 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 12:00:01,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 13:00:00 UTC)" executed successfully 2026-11-01 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 14:00:00 UTC)" (scheduled at 2026-11-01 13:00:00+00:00) 2026-11-01 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-01 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 13:00:01,156 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 13:00:01,157 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 13:00:01,160 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 13:00:01,160 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 13:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 13:00:01,303 INFO [fb-sync.journal] Retention: dropped 3 record(s) older than 30d 2026-11-01 13:00:01,304 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 14:00:00 UTC)" executed successfully 2026-11-01 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 15:00:00 UTC)" (scheduled at 2026-11-01 14:00:00+00:00) 2026-11-01 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-01 14:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 14:00:01,284 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 14:00:01,286 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 14:00:01,288 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 14:00:01,289 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 14:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 14:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 14:00:01,388 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 15:00:00 UTC)" executed successfully 2026-11-01 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 16:00:00 UTC)" (scheduled at 2026-11-01 15:00:00+00:00) 2026-11-01 15:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-01 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 15:00:02,402 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 15:00:02,404 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 15:00:02,407 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 15:00:02,407 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 15:00:02,467 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 15:00:02,522 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 15:00:02,522 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 16:00:00 UTC)" executed successfully 2026-11-01 16:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 17:00:00 UTC)" (scheduled at 2026-11-01 16:00:00+00:00) 2026-11-01 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-01 16:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 16:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 16:00:01,202 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 16:00:01,205 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 16:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 16:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 16:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 16:00:01,353 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 17:00:00 UTC)" executed successfully 2026-11-01 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 18:00:00 UTC)" (scheduled at 2026-11-01 17:00:00+00:00) 2026-11-01 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-01 17:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 17:00:01,611 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 17:00:01,613 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 17:00:01,614 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 17:00:01,615 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 17:00:01,667 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 17:00:01,734 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 17:00:01,734 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 18:00:00 UTC)" executed successfully 2026-11-01 18:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 19:00:00 UTC)" (scheduled at 2026-11-01 18:00:00+00:00) 2026-11-01 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-01 18:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 18:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 18:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 18:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 18:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 18:00:01,194 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 18:00:01,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 18:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 19:00:00 UTC)" executed successfully 2026-11-01 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 20:00:00 UTC)" (scheduled at 2026-11-01 19:00:00+00:00) 2026-11-01 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-01 19:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 19:00:01,187 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 19:00:01,189 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 19:00:01,192 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 19:00:01,192 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 19:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 19:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 19:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 20:00:00 UTC)" executed successfully 2026-11-01 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 21:00:00 UTC)" (scheduled at 2026-11-01 20:00:00+00:00) 2026-11-01 20:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-01 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 20:00:01,143 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 20:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 20:00:01,148 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 20:00:01,148 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 20:00:01,210 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 20:00:01,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 20:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 21:00:00 UTC)" executed successfully 2026-11-01 21:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 22:00:00 UTC)" (scheduled at 2026-11-01 21:00:00+00:00) 2026-11-01 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-01 21:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 21:00:01,153 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 21:00:01,155 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 21:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 21:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 21:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 21:00:01,299 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 21:00:01,299 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 22:00:00 UTC)" executed successfully 2026-11-01 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 23:00:00 UTC)" (scheduled at 2026-11-01 22:00:00+00:00) 2026-11-01 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-01 22:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 22:00:01,033 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 22:00:01,035 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 22:00:01,037 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 22:00:01,037 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 22:00:01,097 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 22:00:01,173 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 22:00:01,173 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-01 23:00:00 UTC)" executed successfully 2026-11-01 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 00:00:00 UTC)" (scheduled at 2026-11-01 23:00:00+00:00) 2026-11-01 23:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-01 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-01 23:00:03,489 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-01 23:00:03,491 INFO [fb-sync.worker] Scraped 50 posts 2026-11-01 23:00:03,493 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-01 23:00:03,493 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-01 23:00:03,541 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-01 23:00:03,590 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-01 23:00:03,591 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 00:00:00 UTC)" executed successfully 2026-11-02 00:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 01:00:00 UTC)" (scheduled at 2026-11-02 00:00:00+00:00) 2026-11-02 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-02 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 00:00:02,100 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 00:00:02,103 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 00:00:02,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 00:00:02,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 00:00:02,199 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 00:00:02,294 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 00:00:02,295 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 01:00:00 UTC)" executed successfully 2026-11-02 01:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 02:00:00 UTC)" (scheduled at 2026-11-02 01:00:00+00:00) 2026-11-02 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-02 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 01:00:01,269 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 01:00:01,272 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 01:00:01,275 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 01:00:01,275 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 01:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 01:00:01,393 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 01:00:01,394 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 02:00:00 UTC)" executed successfully 2026-11-02 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 03:00:00 UTC)" (scheduled at 2026-11-02 02:00:00+00:00) 2026-11-02 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-02 02:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 02:00:01,083 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 02:00:01,084 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 02:00:01,086 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 02:00:01,086 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 02:00:01,133 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 02:00:01,206 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 02:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 03:00:00 UTC)" executed successfully 2026-11-02 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 04:00:00 UTC)" (scheduled at 2026-11-02 03:00:00+00:00) 2026-11-02 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-02 03:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 03:00:01,022 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 03:00:01,024 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 03:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 03:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 03:00:01,082 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 03:00:01,131 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 03:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 04:00:00 UTC)" executed successfully 2026-11-02 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 05:00:00 UTC)" (scheduled at 2026-11-02 04:00:00+00:00) 2026-11-02 04:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-02 04:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 04:00:00,970 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 04:00:00,972 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 04:00:00,974 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 04:00:00,974 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 04:00:01,024 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 04:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 04:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 05:00:00 UTC)" executed successfully 2026-11-02 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 06:00:00 UTC)" (scheduled at 2026-11-02 05:00:00+00:00) 2026-11-02 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-02 05:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 05:00:01,234 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 05:00:01,237 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 05:00:01,240 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 05:00:01,240 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 05:00:01,315 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 05:00:01,395 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 05:00:01,395 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 06:00:00 UTC)" executed successfully 2026-11-02 06:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 07:00:00 UTC)" (scheduled at 2026-11-02 06:00:00+00:00) 2026-11-02 06:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-02 06:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 06:00:00,964 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 06:00:00,966 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 06:00:00,968 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 06:00:00,968 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 06:00:01,027 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 06:00:01,076 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 06:00:01,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 07:00:00 UTC)" executed successfully 2026-11-02 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 08:00:00 UTC)" (scheduled at 2026-11-02 07:00:00+00:00) 2026-11-02 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-02 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 07:00:01,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 07:00:01,278 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 07:00:01,281 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 07:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 07:00:01,349 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 07:00:01,420 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 07:00:01,421 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 08:00:00 UTC)" executed successfully 2026-11-02 08:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 09:00:00 UTC)" (scheduled at 2026-11-02 08:00:00+00:00) 2026-11-02 08:00:00,020 INFO [fb-sync] Starting FB sync... 2026-11-02 08:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 08:00:01,164 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 08:00:01,166 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 08:00:01,168 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 08:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 08:00:01,218 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 08:00:01,271 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 08:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 09:00:00 UTC)" executed successfully 2026-11-02 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 10:00:00 UTC)" (scheduled at 2026-11-02 09:00:00+00:00) 2026-11-02 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-02 09:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 09:00:01,017 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 09:00:01,019 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 09:00:01,022 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 09:00:01,022 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 09:00:01,073 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 09:00:01,124 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 09:00:01,125 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 10:00:00 UTC)" executed successfully 2026-11-02 10:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 11:00:00 UTC)" (scheduled at 2026-11-02 10:00:00+00:00) 2026-11-02 10:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-02 10:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 10:00:02,345 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 10:00:02,347 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 10:00:02,349 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 10:00:02,349 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 10:00:02,410 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 10:00:02,467 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 10:00:02,467 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 11:00:00 UTC)" executed successfully 2026-11-02 11:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 12:00:00 UTC)" (scheduled at 2026-11-02 11:00:00+00:00) 2026-11-02 11:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-02 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 11:00:01,128 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 11:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 11:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 11:00:01,135 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 11:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 11:00:01,311 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 11:00:01,311 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 12:00:00 UTC)" executed successfully 2026-11-02 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 13:00:00 UTC)" (scheduled at 2026-11-02 12:00:00+00:00) 2026-11-02 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-02 12:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 12:00:01,283 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 12:00:01,285 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 12:00:01,287 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 12:00:01,288 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 12:00:01,345 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 12:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 12:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 13:00:00 UTC)" executed successfully 2026-11-02 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 14:00:00 UTC)" (scheduled at 2026-11-02 13:00:00+00:00) 2026-11-02 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-02 13:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 13:00:01,397 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 13:00:01,399 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 13:00:01,401 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 13:00:01,401 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 13:00:01,447 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 13:00:01,499 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 13:00:01,499 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 14:00:00 UTC)" executed successfully 2026-11-02 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 15:00:00 UTC)" (scheduled at 2026-11-02 14:00:00+00:00) 2026-11-02 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-02 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 14:00:01,767 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 14:00:01,770 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 14:00:01,772 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 14:00:01,773 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 14:00:01,842 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 14:00:01,916 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 14:00:01,917 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 15:00:00 UTC)" executed successfully 2026-11-02 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 16:00:00 UTC)" (scheduled at 2026-11-02 15:00:00+00:00) 2026-11-02 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-02 15:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 15:00:01,517 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 15:00:01,520 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 15:00:01,523 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 15:00:01,524 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 15:00:01,600 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 15:00:01,678 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 15:00:01,678 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 16:00:00 UTC)" executed successfully 2026-11-02 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 17:00:00 UTC)" (scheduled at 2026-11-02 16:00:00+00:00) 2026-11-02 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-02 16:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 16:00:02,838 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 16:00:02,840 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 16:00:02,842 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 16:00:02,842 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 16:00:02,889 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 16:00:02,940 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 16:00:02,940 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 17:00:00 UTC)" executed successfully 2026-11-02 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 18:00:00 UTC)" (scheduled at 2026-11-02 17:00:00+00:00) 2026-11-02 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-02 17:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 17:00:01,170 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 17:00:01,172 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 17:00:01,175 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 17:00:01,175 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 17:00:01,227 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 17:00:01,276 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 17:00:01,276 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 18:00:00 UTC)" executed successfully 2026-11-02 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 19:00:00 UTC)" (scheduled at 2026-11-02 18:00:00+00:00) 2026-11-02 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-02 18:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 18:00:02,085 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 18:00:02,087 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 18:00:02,091 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 18:00:02,092 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 18:00:02,148 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 18:00:02,199 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 18:00:02,199 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 19:00:00 UTC)" executed successfully 2026-11-02 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 20:00:00 UTC)" (scheduled at 2026-11-02 19:00:00+00:00) 2026-11-02 19:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-02 19:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 19:00:01,178 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 19:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 19:00:01,183 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 19:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 19:00:01,256 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 19:00:01,335 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 19:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 20:00:00 UTC)" executed successfully 2026-11-02 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 21:00:00 UTC)" (scheduled at 2026-11-02 20:00:00+00:00) 2026-11-02 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-02 20:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 20:00:01,263 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 20:00:01,267 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 20:00:01,270 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 20:00:01,271 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 20:00:01,325 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 20:00:01,379 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 20:00:01,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 21:00:00 UTC)" executed successfully 2026-11-02 21:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 22:00:00 UTC)" (scheduled at 2026-11-02 21:00:00+00:00) 2026-11-02 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-02 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 21:00:01,121 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 21:00:01,123 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 21:00:01,126 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 21:00:01,127 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 21:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 21:00:01,251 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 21:00:01,251 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 22:00:00 UTC)" executed successfully 2026-11-02 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 23:00:00 UTC)" (scheduled at 2026-11-02 22:00:00+00:00) 2026-11-02 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-02 22:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 22:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 22:00:01,101 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 22:00:01,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 22:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 22:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 22:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 22:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-02 23:00:00 UTC)" executed successfully 2026-11-02 23:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 00:00:00 UTC)" (scheduled at 2026-11-02 23:00:00+00:00) 2026-11-02 23:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-02 23:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-02 23:00:01,936 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-02 23:00:01,938 INFO [fb-sync.worker] Scraped 50 posts 2026-11-02 23:00:01,941 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-02 23:00:01,941 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-02 23:00:02,007 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-02 23:00:02,058 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-02 23:00:02,058 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 00:00:00 UTC)" executed successfully 2026-11-03 00:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 01:00:00 UTC)" (scheduled at 2026-11-03 00:00:00+00:00) 2026-11-03 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-03 00:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 00:00:01,270 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 00:00:01,273 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 00:00:01,275 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 00:00:01,276 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 00:00:01,335 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 00:00:01,395 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 00:00:01,396 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 01:00:00 UTC)" executed successfully 2026-11-03 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 02:00:00 UTC)" (scheduled at 2026-11-03 01:00:00+00:00) 2026-11-03 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-03 01:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 01:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 01:00:01,224 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 01:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 01:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 01:00:01,275 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 01:00:01,323 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 01:00:01,323 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 02:00:00 UTC)" executed successfully 2026-11-03 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 03:00:00 UTC)" (scheduled at 2026-11-03 02:00:00+00:00) 2026-11-03 02:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-03 02:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 02:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 02:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 02:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 02:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 02:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 02:00:01,299 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 02:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 03:00:00 UTC)" executed successfully 2026-11-03 03:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 04:00:00 UTC)" (scheduled at 2026-11-03 03:00:00+00:00) 2026-11-03 03:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-03 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 03:00:01,312 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 03:00:01,314 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 03:00:01,317 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 03:00:01,317 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 03:00:01,378 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 03:00:01,432 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 03:00:01,432 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 04:00:00 UTC)" executed successfully 2026-11-03 04:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 05:00:00 UTC)" (scheduled at 2026-11-03 04:00:00+00:00) 2026-11-03 04:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-03 04:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 04:00:01,048 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 04:00:01,050 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 04:00:01,053 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 04:00:01,053 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 04:00:01,120 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 04:00:01,193 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 04:00:01,193 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 05:00:00 UTC)" executed successfully 2026-11-03 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 06:00:00 UTC)" (scheduled at 2026-11-03 05:00:00+00:00) 2026-11-03 05:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-03 05:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 05:00:01,066 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 05:00:01,068 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 05:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 05:00:01,072 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 05:00:01,132 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 05:00:01,181 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 05:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 06:00:00 UTC)" executed successfully 2026-11-03 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 07:00:00 UTC)" (scheduled at 2026-11-03 06:00:00+00:00) 2026-11-03 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-03 06:00:00,090 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 06:00:01,540 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 06:00:01,543 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 06:00:01,546 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 06:00:01,546 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 06:00:01,616 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 06:00:01,690 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 06:00:01,690 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 07:00:00 UTC)" executed successfully 2026-11-03 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 08:00:00 UTC)" (scheduled at 2026-11-03 07:00:00+00:00) 2026-11-03 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-03 07:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 07:00:01,393 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 07:00:01,395 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 07:00:01,397 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 07:00:01,398 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 07:00:01,456 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 07:00:01,537 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 07:00:01,538 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 08:00:00 UTC)" executed successfully 2026-11-03 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 09:00:00 UTC)" (scheduled at 2026-11-03 08:00:00+00:00) 2026-11-03 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-03 08:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 08:00:02,619 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 08:00:02,621 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 08:00:02,623 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 08:00:02,623 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 08:00:02,671 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 08:00:02,721 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 08:00:02,721 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 09:00:00 UTC)" executed successfully 2026-11-03 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 10:00:00 UTC)" (scheduled at 2026-11-03 09:00:00+00:00) 2026-11-03 09:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-03 09:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 09:00:01,195 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 09:00:01,197 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 09:00:01,200 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 09:00:01,200 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 09:00:01,256 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 09:00:01,307 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 09:00:01,307 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 10:00:00 UTC)" executed successfully 2026-11-03 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 11:00:00 UTC)" (scheduled at 2026-11-03 10:00:00+00:00) 2026-11-03 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-03 10:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 10:00:01,250 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 10:00:01,253 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 10:00:01,256 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 10:00:01,256 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 10:00:01,337 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 10:00:01,400 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 10:00:01,401 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 11:00:00 UTC)" executed successfully 2026-11-03 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 12:00:00 UTC)" (scheduled at 2026-11-03 11:00:00+00:00) 2026-11-03 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-03 11:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 11:00:01,114 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 11:00:01,117 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 11:00:01,120 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 11:00:01,120 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 11:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 11:00:01,231 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 11:00:01,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 12:00:00 UTC)" executed successfully 2026-11-03 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 13:00:00 UTC)" (scheduled at 2026-11-03 12:00:00+00:00) 2026-11-03 12:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-03 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 12:00:01,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 12:00:01,375 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 12:00:01,377 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 12:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 12:00:01,440 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 12:00:01,510 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 12:00:01,510 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 13:00:00 UTC)" executed successfully 2026-11-03 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 14:00:00 UTC)" (scheduled at 2026-11-03 13:00:00+00:00) 2026-11-03 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-03 13:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 13:00:01,314 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 13:00:01,317 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 13:00:01,320 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 13:00:01,321 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 13:00:01,398 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 13:00:01,481 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 13:00:01,481 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 14:00:00 UTC)" executed successfully 2026-11-03 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 15:00:00 UTC)" (scheduled at 2026-11-03 14:00:00+00:00) 2026-11-03 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-03 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 14:00:01,256 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 14:00:01,259 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 14:00:01,262 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 14:00:01,262 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 14:00:01,338 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 14:00:01,424 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 14:00:01,425 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 15:00:00 UTC)" executed successfully 2026-11-03 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 16:00:00 UTC)" (scheduled at 2026-11-03 15:00:00+00:00) 2026-11-03 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-03 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 15:00:01,246 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 15:00:01,249 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 15:00:01,251 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 15:00:01,252 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 15:00:01,301 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 15:00:01,362 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 15:00:01,363 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 16:00:00 UTC)" executed successfully 2026-11-03 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 17:00:00 UTC)" (scheduled at 2026-11-03 16:00:00+00:00) 2026-11-03 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-03 16:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 16:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 16:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 16:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 16:00:01,208 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 16:00:01,264 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 16:00:01,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 16:00:01,321 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 17:00:00 UTC)" executed successfully 2026-11-03 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 18:00:00 UTC)" (scheduled at 2026-11-03 17:00:00+00:00) 2026-11-03 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-03 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 17:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 17:00:01,103 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 17:00:01,105 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 17:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 17:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 17:00:01,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 17:00:01,203 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 18:00:00 UTC)" executed successfully 2026-11-03 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 19:00:00 UTC)" (scheduled at 2026-11-03 18:00:00+00:00) 2026-11-03 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-03 18:00:00,057 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 18:00:01,153 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 18:00:01,155 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 18:00:01,157 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 18:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 18:00:01,219 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 18:00:01,273 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 18:00:01,273 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 19:00:00 UTC)" executed successfully 2026-11-03 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 20:00:00 UTC)" (scheduled at 2026-11-03 19:00:00+00:00) 2026-11-03 19:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-03 19:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 19:00:01,203 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 19:00:01,205 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 19:00:01,207 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 19:00:01,207 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 19:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 19:00:01,305 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 19:00:01,305 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 20:00:00 UTC)" executed successfully 2026-11-03 20:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 21:00:00 UTC)" (scheduled at 2026-11-03 20:00:00+00:00) 2026-11-03 20:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-03 20:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 20:00:01,325 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 20:00:01,327 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 20:00:01,329 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 20:00:01,330 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 20:00:01,385 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 20:00:01,443 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 20:00:01,444 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 21:00:00 UTC)" executed successfully 2026-11-03 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 22:00:00 UTC)" (scheduled at 2026-11-03 21:00:00+00:00) 2026-11-03 21:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-03 21:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 21:00:01,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 21:00:01,160 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 21:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 21:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 21:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 21:00:01,266 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 21:00:01,267 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 22:00:00 UTC)" executed successfully 2026-11-03 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 23:00:00 UTC)" (scheduled at 2026-11-03 22:00:00+00:00) 2026-11-03 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-03 22:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 22:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 22:00:01,096 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 22:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 22:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 22:00:01,148 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 22:00:01,204 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 22:00:01,205 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-03 23:00:00 UTC)" executed successfully 2026-11-03 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 00:00:00 UTC)" (scheduled at 2026-11-03 23:00:00+00:00) 2026-11-03 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-03 23:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-03 23:00:01,193 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-03 23:00:01,195 INFO [fb-sync.worker] Scraped 50 posts 2026-11-03 23:00:01,197 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-03 23:00:01,197 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-03 23:00:01,253 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-03 23:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-03 23:00:01,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 00:00:00 UTC)" executed successfully 2026-11-04 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 01:00:00 UTC)" (scheduled at 2026-11-04 00:00:00+00:00) 2026-11-04 00:00:00,022 INFO [fb-sync] Starting FB sync... 2026-11-04 00:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 00:00:02,740 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 00:00:02,743 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 00:00:02,746 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 00:00:02,746 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 00:00:02,798 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 00:00:02,860 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 00:00:02,860 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 01:00:00 UTC)" executed successfully 2026-11-04 01:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 02:00:00 UTC)" (scheduled at 2026-11-04 01:00:00+00:00) 2026-11-04 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-04 01:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 01:00:00,987 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 01:00:00,989 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 01:00:00,991 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 01:00:00,991 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 01:00:01,051 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 01:00:01,121 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 01:00:01,121 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 02:00:00 UTC)" executed successfully 2026-11-04 02:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 03:00:00 UTC)" (scheduled at 2026-11-04 02:00:00+00:00) 2026-11-04 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-04 02:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 02:00:01,178 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 02:00:01,180 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 02:00:01,182 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 02:00:01,183 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 02:00:01,236 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 02:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 02:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 03:00:00 UTC)" executed successfully 2026-11-04 03:00:00,015 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 04:00:00 UTC)" (scheduled at 2026-11-04 03:00:00+00:00) 2026-11-04 03:00:00,020 INFO [fb-sync] Starting FB sync... 2026-11-04 03:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 03:00:02,136 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 03:00:02,138 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 03:00:02,142 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 03:00:02,142 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 03:00:02,226 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 03:00:02,293 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 03:00:02,294 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 04:00:00 UTC)" executed successfully 2026-11-04 04:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 05:00:00 UTC)" (scheduled at 2026-11-04 04:00:00+00:00) 2026-11-04 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-04 04:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 04:00:01,703 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 04:00:01,705 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 04:00:01,707 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 04:00:01,707 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 04:00:01,758 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 04:00:01,812 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 04:00:01,812 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 05:00:00 UTC)" executed successfully 2026-11-04 05:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 06:00:00 UTC)" (scheduled at 2026-11-04 05:00:00+00:00) 2026-11-04 05:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-04 05:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 05:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 05:00:01,025 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 05:00:01,027 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 05:00:01,027 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 05:00:01,079 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 05:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 05:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 06:00:00 UTC)" executed successfully 2026-11-04 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 07:00:00 UTC)" (scheduled at 2026-11-04 06:00:00+00:00) 2026-11-04 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-04 06:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 06:00:01,365 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 06:00:01,368 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 06:00:01,370 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 06:00:01,370 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 06:00:01,426 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 06:00:01,472 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 06:00:01,472 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 07:00:00 UTC)" executed successfully 2026-11-04 07:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 08:00:00 UTC)" (scheduled at 2026-11-04 07:00:00+00:00) 2026-11-04 07:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-04 07:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 07:00:01,450 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 07:00:01,453 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 07:00:01,456 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 07:00:01,456 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 07:00:01,519 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 07:00:01,576 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 07:00:01,576 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 08:00:00 UTC)" executed successfully 2026-11-04 08:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 09:00:00 UTC)" (scheduled at 2026-11-04 08:00:00+00:00) 2026-11-04 08:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-04 08:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 08:00:01,464 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 08:00:01,467 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 08:00:01,470 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 08:00:01,470 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 08:00:01,545 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 08:00:01,600 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 08:00:01,601 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 09:00:00 UTC)" executed successfully 2026-11-04 09:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 10:00:00 UTC)" (scheduled at 2026-11-04 09:00:00+00:00) 2026-11-04 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-04 09:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 09:00:01,359 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 09:00:01,361 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 09:00:01,364 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 09:00:01,364 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 09:00:01,412 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 09:00:01,456 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 09:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 10:00:00 UTC)" executed successfully 2026-11-04 10:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 11:00:00 UTC)" (scheduled at 2026-11-04 10:00:00+00:00) 2026-11-04 10:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-04 10:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 10:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 10:00:01,116 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 10:00:01,119 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 10:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 10:00:01,187 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 10:00:01,259 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 10:00:01,259 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 11:00:00 UTC)" executed successfully 2026-11-04 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 12:00:00 UTC)" (scheduled at 2026-11-04 11:00:00+00:00) 2026-11-04 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-04 11:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 11:00:01,425 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 11:00:01,428 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 11:00:01,431 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 11:00:01,431 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 11:00:01,484 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 11:00:01,535 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 11:00:01,535 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 12:00:00 UTC)" executed successfully 2026-11-04 12:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 13:00:00 UTC)" (scheduled at 2026-11-04 12:00:00+00:00) 2026-11-04 12:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-04 12:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 12:00:01,130 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 12:00:01,131 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 12:00:01,134 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 12:00:01,135 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 12:00:01,183 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 12:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 12:00:01,240 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 13:00:00 UTC)" executed successfully 2026-11-04 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 14:00:00 UTC)" (scheduled at 2026-11-04 13:00:00+00:00) 2026-11-04 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-04 13:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 13:00:01,238 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 13:00:01,240 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 13:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 13:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 13:00:01,295 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 13:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 13:00:01,355 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 14:00:00 UTC)" executed successfully 2026-11-04 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 15:00:00 UTC)" (scheduled at 2026-11-04 14:00:00+00:00) 2026-11-04 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-04 14:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 14:00:01,131 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 14:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 14:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 14:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 14:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 14:00:01,256 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 14:00:01,256 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 15:00:00 UTC)" executed successfully 2026-11-04 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 16:00:00 UTC)" (scheduled at 2026-11-04 15:00:00+00:00) 2026-11-04 15:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-04 15:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 15:00:03,096 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 15:00:03,098 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 15:00:03,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 15:00:03,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 15:00:03,151 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 15:00:03,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 15:00:03,203 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 16:00:00 UTC)" executed successfully 2026-11-04 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 17:00:00 UTC)" (scheduled at 2026-11-04 16:00:00+00:00) 2026-11-04 16:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-04 16:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 16:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 16:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 16:00:01,117 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 16:00:01,117 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 16:00:01,190 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 16:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 16:00:01,269 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 17:00:00 UTC)" executed successfully 2026-11-04 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 18:00:00 UTC)" (scheduled at 2026-11-04 17:00:00+00:00) 2026-11-04 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-04 17:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 17:00:01,620 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 17:00:01,623 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 17:00:01,626 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 17:00:01,626 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 17:00:01,695 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 17:00:01,768 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 17:00:01,768 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 18:00:00 UTC)" executed successfully 2026-11-04 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 19:00:00 UTC)" (scheduled at 2026-11-04 18:00:00+00:00) 2026-11-04 18:00:00,004 INFO [fb-sync] Starting FB sync... 2026-11-04 18:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 18:00:01,166 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 18:00:01,167 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 18:00:01,169 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 18:00:01,170 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 18:00:01,216 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 18:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 18:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 19:00:00 UTC)" executed successfully 2026-11-04 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 20:00:00 UTC)" (scheduled at 2026-11-04 19:00:00+00:00) 2026-11-04 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-04 19:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 19:00:01,214 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 19:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 19:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 19:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 19:00:01,271 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 19:00:01,341 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 19:00:01,341 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 20:00:00 UTC)" executed successfully 2026-11-04 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 21:00:00 UTC)" (scheduled at 2026-11-04 20:00:00+00:00) 2026-11-04 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-04 20:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 20:00:01,167 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 20:00:01,170 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 20:00:01,173 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 20:00:01,173 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 20:00:01,247 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 20:00:01,318 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 20:00:01,319 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 21:00:00 UTC)" executed successfully 2026-11-04 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 22:00:00 UTC)" (scheduled at 2026-11-04 21:00:00+00:00) 2026-11-04 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-04 21:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 21:00:01,274 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 21:00:01,277 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 21:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 21:00:01,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 21:00:01,333 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 21:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 21:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 22:00:00 UTC)" executed successfully 2026-11-04 22:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 23:00:00 UTC)" (scheduled at 2026-11-04 22:00:00+00:00) 2026-11-04 22:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-04 22:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 22:00:01,041 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 22:00:01,043 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 22:00:01,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 22:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 22:00:01,089 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 22:00:01,135 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 22:00:01,136 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-04 23:00:00 UTC)" executed successfully 2026-11-04 23:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 00:00:00 UTC)" (scheduled at 2026-11-04 23:00:00+00:00) 2026-11-04 23:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-04 23:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-04 23:00:02,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-04 23:00:02,099 INFO [fb-sync.worker] Scraped 50 posts 2026-11-04 23:00:02,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-04 23:00:02,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-04 23:00:02,174 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-04 23:00:02,248 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-04 23:00:02,248 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 00:00:00 UTC)" executed successfully 2026-11-05 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 01:00:00 UTC)" (scheduled at 2026-11-05 00:00:00+00:00) 2026-11-05 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-05 00:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 00:00:02,534 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 00:00:02,537 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 00:00:02,540 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 00:00:02,541 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 00:00:02,620 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 00:00:02,701 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 00:00:02,702 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 01:00:00 UTC)" executed successfully 2026-11-05 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 02:00:00 UTC)" (scheduled at 2026-11-05 01:00:00+00:00) 2026-11-05 01:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-05 01:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 01:00:01,390 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 01:00:01,392 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 01:00:01,394 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 01:00:01,394 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 01:00:01,452 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 01:00:01,518 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 01:00:01,518 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 02:00:00 UTC)" executed successfully 2026-11-05 02:00:00,017 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 03:00:00 UTC)" (scheduled at 2026-11-05 02:00:00+00:00) 2026-11-05 02:00:00,021 INFO [fb-sync] Starting FB sync... 2026-11-05 02:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 02:00:01,273 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 02:00:01,276 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 02:00:01,279 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 02:00:01,279 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 02:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 02:00:01,426 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 02:00:01,427 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 03:00:00 UTC)" executed successfully 2026-11-05 03:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 04:00:00 UTC)" (scheduled at 2026-11-05 03:00:00+00:00) 2026-11-05 03:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-05 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 03:00:01,146 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 03:00:01,148 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 03:00:01,151 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 03:00:01,151 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 03:00:01,222 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 03:00:01,299 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 03:00:01,299 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 04:00:00 UTC)" executed successfully 2026-11-05 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 05:00:00 UTC)" (scheduled at 2026-11-05 04:00:00+00:00) 2026-11-05 04:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-05 04:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 04:00:00,977 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 04:00:00,978 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 04:00:00,980 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 04:00:00,980 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 04:00:01,026 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 04:00:01,072 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 04:00:01,073 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 05:00:00 UTC)" executed successfully 2026-11-05 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 06:00:00 UTC)" (scheduled at 2026-11-05 05:00:00+00:00) 2026-11-05 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-05 05:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 05:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 05:00:01,420 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 05:00:01,422 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 05:00:01,422 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 05:00:01,466 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 05:00:01,512 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 05:00:01,512 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 06:00:00 UTC)" executed successfully 2026-11-05 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 07:00:00 UTC)" (scheduled at 2026-11-05 06:00:00+00:00) 2026-11-05 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-05 06:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 06:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 06:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 06:00:01,150 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 06:00:01,151 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 06:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 06:00:01,300 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 06:00:01,300 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 07:00:00 UTC)" executed successfully 2026-11-05 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 08:00:00 UTC)" (scheduled at 2026-11-05 07:00:00+00:00) 2026-11-05 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-05 07:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 07:00:01,034 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 07:00:01,036 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 07:00:01,039 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 07:00:01,039 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 07:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 07:00:01,194 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 07:00:01,194 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 08:00:00 UTC)" executed successfully 2026-11-05 08:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 09:00:00 UTC)" (scheduled at 2026-11-05 08:00:00+00:00) 2026-11-05 08:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-05 08:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 08:00:01,011 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 08:00:01,013 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 08:00:01,016 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 08:00:01,017 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 08:00:01,086 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 08:00:01,161 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 08:00:01,162 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 09:00:00 UTC)" executed successfully 2026-11-05 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 10:00:00 UTC)" (scheduled at 2026-11-05 09:00:00+00:00) 2026-11-05 09:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-05 09:00:00,058 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 09:00:00,969 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 09:00:00,971 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 09:00:00,973 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 09:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 09:00:01,026 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 09:00:01,077 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 09:00:01,077 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 10:00:00 UTC)" executed successfully 2026-11-05 10:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 11:00:00 UTC)" (scheduled at 2026-11-05 10:00:00+00:00) 2026-11-05 10:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-05 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 10:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 10:00:01,005 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 10:00:01,008 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 10:00:01,008 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 10:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 10:00:01,132 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 10:00:01,132 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 11:00:00 UTC)" executed successfully 2026-11-05 11:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 12:00:00 UTC)" (scheduled at 2026-11-05 11:00:00+00:00) 2026-11-05 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-05 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 11:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 11:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 11:00:01,102 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 11:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 11:00:01,181 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 11:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 11:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 12:00:00 UTC)" executed successfully 2026-11-05 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 13:00:00 UTC)" (scheduled at 2026-11-05 12:00:00+00:00) 2026-11-05 12:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-05 12:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 12:00:01,115 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 12:00:01,117 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 12:00:01,121 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 12:00:01,121 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 12:00:01,180 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 12:00:01,253 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 12:00:01,253 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 13:00:00 UTC)" executed successfully 2026-11-05 13:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 14:00:00 UTC)" (scheduled at 2026-11-05 13:00:00+00:00) 2026-11-05 13:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-05 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 13:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 13:00:01,284 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 13:00:01,288 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 13:00:01,288 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 13:00:01,367 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 13:00:01,427 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 13:00:01,427 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 14:00:00 UTC)" executed successfully 2026-11-05 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 15:00:00 UTC)" (scheduled at 2026-11-05 14:00:00+00:00) 2026-11-05 14:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-05 14:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 14:00:01,040 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 14:00:01,042 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 14:00:01,044 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 14:00:01,045 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 14:00:01,096 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 14:00:01,164 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 14:00:01,164 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 15:00:00 UTC)" executed successfully 2026-11-05 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 16:00:00 UTC)" (scheduled at 2026-11-05 15:00:00+00:00) 2026-11-05 15:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-05 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 15:00:01,041 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 15:00:01,043 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 15:00:01,046 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 15:00:01,046 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 15:00:01,117 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 15:00:01,170 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 15:00:01,170 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 16:00:00 UTC)" executed successfully 2026-11-05 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 17:00:00 UTC)" (scheduled at 2026-11-05 16:00:00+00:00) 2026-11-05 16:00:00,018 INFO [fb-sync] Starting FB sync... 2026-11-05 16:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 16:00:00,929 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 16:00:00,931 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 16:00:00,934 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 16:00:00,934 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 16:00:01,001 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 16:00:01,053 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 16:00:01,053 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 17:00:00 UTC)" executed successfully 2026-11-05 17:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 18:00:00 UTC)" (scheduled at 2026-11-05 17:00:00+00:00) 2026-11-05 17:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-05 17:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 17:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 17:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 17:00:01,005 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 17:00:01,005 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 17:00:01,049 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 17:00:01,094 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 17:00:01,095 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 18:00:00 UTC)" executed successfully 2026-11-05 18:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 19:00:00 UTC)" (scheduled at 2026-11-05 18:00:00+00:00) 2026-11-05 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-05 18:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 18:00:01,327 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 18:00:01,329 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 18:00:01,332 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 18:00:01,333 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 18:00:01,392 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 18:00:01,464 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 18:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 19:00:00 UTC)" executed successfully 2026-11-05 19:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 20:00:00 UTC)" (scheduled at 2026-11-05 19:00:00+00:00) 2026-11-05 19:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-05 19:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 19:00:01,029 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 19:00:01,031 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 19:00:01,033 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 19:00:01,033 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 19:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 19:00:01,146 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 19:00:01,146 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 20:00:00 UTC)" executed successfully 2026-11-05 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 21:00:00 UTC)" (scheduled at 2026-11-05 20:00:00+00:00) 2026-11-05 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-05 20:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 20:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 20:00:01,056 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 20:00:01,058 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 20:00:01,059 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 20:00:01,107 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 20:00:01,157 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 20:00:01,158 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 21:00:00 UTC)" executed successfully 2026-11-05 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 22:00:00 UTC)" (scheduled at 2026-11-05 21:00:00+00:00) 2026-11-05 21:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-05 21:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 21:00:00,922 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 21:00:00,925 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 21:00:00,928 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 21:00:00,928 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 21:00:00,975 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 21:00:01,023 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 21:00:01,023 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 22:00:00 UTC)" executed successfully 2026-11-05 22:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 23:00:00 UTC)" (scheduled at 2026-11-05 22:00:00+00:00) 2026-11-05 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-05 22:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 22:00:01,362 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 22:00:01,364 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 22:00:01,366 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 22:00:01,367 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 22:00:01,438 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 22:00:01,495 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 22:00:01,495 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-05 23:00:00 UTC)" executed successfully 2026-11-05 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 00:00:00 UTC)" (scheduled at 2026-11-05 23:00:00+00:00) 2026-11-05 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-05 23:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-05 23:00:00,860 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-05 23:00:00,862 INFO [fb-sync.worker] Scraped 50 posts 2026-11-05 23:00:00,865 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-05 23:00:00,866 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-05 23:00:00,934 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-05 23:00:01,000 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-05 23:00:01,000 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 00:00:00 UTC)" executed successfully 2026-11-06 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 01:00:00 UTC)" (scheduled at 2026-11-06 00:00:00+00:00) 2026-11-06 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-06 00:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 00:00:00,936 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 00:00:00,938 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 00:00:00,940 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 00:00:00,940 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 00:00:01,002 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 00:00:01,072 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 00:00:01,072 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 01:00:00 UTC)" executed successfully 2026-11-06 01:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 02:00:00 UTC)" (scheduled at 2026-11-06 01:00:00+00:00) 2026-11-06 01:00:00,020 INFO [fb-sync] Starting FB sync... 2026-11-06 01:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 01:00:00,907 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 01:00:00,908 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 01:00:00,910 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 01:00:00,911 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 01:00:00,955 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 01:00:01,001 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 01:00:01,001 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 02:00:00 UTC)" executed successfully 2026-11-06 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 03:00:00 UTC)" (scheduled at 2026-11-06 02:00:00+00:00) 2026-11-06 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-06 02:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 02:00:00,939 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 02:00:00,942 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 02:00:00,945 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 02:00:00,945 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 02:00:00,996 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 02:00:01,048 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 02:00:01,048 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 03:00:00 UTC)" executed successfully 2026-11-06 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 04:00:00 UTC)" (scheduled at 2026-11-06 03:00:00+00:00) 2026-11-06 03:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-06 03:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 03:00:00,925 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 03:00:00,928 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 03:00:00,931 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 03:00:00,931 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 03:00:00,992 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 03:00:01,038 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 03:00:01,038 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 04:00:00 UTC)" executed successfully 2026-11-06 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 05:00:00 UTC)" (scheduled at 2026-11-06 04:00:00+00:00) 2026-11-06 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-06 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 04:00:01,354 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 04:00:01,357 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 04:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 04:00:01,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 04:00:01,429 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 04:00:01,514 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 04:00:01,514 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 05:00:00 UTC)" executed successfully 2026-11-06 05:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 06:00:00 UTC)" (scheduled at 2026-11-06 05:00:00+00:00) 2026-11-06 05:00:00,020 INFO [fb-sync] Starting FB sync... 2026-11-06 05:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 05:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 05:00:01,096 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 05:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 05:00:01,098 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 05:00:01,151 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 05:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 05:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 06:00:00 UTC)" executed successfully 2026-11-06 06:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 07:00:00 UTC)" (scheduled at 2026-11-06 06:00:00+00:00) 2026-11-06 06:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-06 06:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 06:00:02,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 06:00:02,121 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 06:00:02,124 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 06:00:02,124 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 06:00:02,180 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 06:00:02,230 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 06:00:02,231 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 07:00:00 UTC)" executed successfully 2026-11-06 07:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 08:00:00 UTC)" (scheduled at 2026-11-06 07:00:00+00:00) 2026-11-06 07:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-06 07:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 07:00:00,978 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 07:00:00,980 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 07:00:00,983 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 07:00:00,984 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 07:00:01,055 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 07:00:01,131 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 07:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 08:00:00 UTC)" executed successfully 2026-11-06 08:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 09:00:00 UTC)" (scheduled at 2026-11-06 08:00:00+00:00) 2026-11-06 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-06 08:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 08:00:01,015 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 08:00:01,017 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 08:00:01,020 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 08:00:01,021 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 08:00:01,095 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 08:00:01,178 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 08:00:01,178 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 09:00:00 UTC)" executed successfully 2026-11-06 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 10:00:00 UTC)" (scheduled at 2026-11-06 09:00:00+00:00) 2026-11-06 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-06 09:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 09:00:00,982 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 09:00:00,984 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 09:00:00,987 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 09:00:00,988 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 09:00:01,041 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 09:00:01,103 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 09:00:01,103 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 10:00:00 UTC)" executed successfully 2026-11-06 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 11:00:00 UTC)" (scheduled at 2026-11-06 10:00:00+00:00) 2026-11-06 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-06 10:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 10:00:01,096 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 10:00:01,098 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 10:00:01,100 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 10:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 10:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 10:00:01,203 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 10:00:01,204 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 11:00:00 UTC)" executed successfully 2026-11-06 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 12:00:00 UTC)" (scheduled at 2026-11-06 11:00:00+00:00) 2026-11-06 11:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-06 11:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 11:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 11:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 11:00:01,066 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 11:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 11:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 11:00:01,176 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 11:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 12:00:00 UTC)" executed successfully 2026-11-06 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 13:00:00 UTC)" (scheduled at 2026-11-06 12:00:00+00:00) 2026-11-06 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-06 12:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 12:00:01,298 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 12:00:01,301 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 12:00:01,304 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 12:00:01,304 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 12:00:01,381 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 12:00:01,461 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 12:00:01,462 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 13:00:00 UTC)" executed successfully 2026-11-06 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 14:00:00 UTC)" (scheduled at 2026-11-06 13:00:00+00:00) 2026-11-06 13:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-06 13:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 13:00:01,139 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 13:00:01,141 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 13:00:01,144 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 13:00:01,144 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 13:00:01,191 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 13:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 13:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 14:00:00 UTC)" executed successfully 2026-11-06 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 15:00:00 UTC)" (scheduled at 2026-11-06 14:00:00+00:00) 2026-11-06 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-06 14:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 14:00:01,020 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 14:00:01,022 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 14:00:01,024 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 14:00:01,024 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 14:00:01,078 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 14:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 14:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 15:00:00 UTC)" executed successfully 2026-11-06 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 16:00:00 UTC)" (scheduled at 2026-11-06 15:00:00+00:00) 2026-11-06 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-06 15:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 15:00:01,119 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 15:00:01,121 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 15:00:01,125 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 15:00:01,125 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 15:00:01,195 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 15:00:01,270 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 15:00:01,270 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 16:00:00 UTC)" executed successfully 2026-11-06 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 17:00:00 UTC)" (scheduled at 2026-11-06 16:00:00+00:00) 2026-11-06 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-06 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 16:00:00,985 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 16:00:00,986 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 16:00:00,988 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 16:00:00,988 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 16:00:01,055 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 16:00:01,135 INFO [fb-sync.journal] Retention: dropped 3 record(s) older than 30d 2026-11-06 16:00:01,135 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 17:00:00 UTC)" executed successfully 2026-11-06 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 18:00:00 UTC)" (scheduled at 2026-11-06 17:00:00+00:00) 2026-11-06 17:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-06 17:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 17:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 17:00:01,175 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 17:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 17:00:01,178 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 17:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 17:00:01,271 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 17:00:01,271 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 18:00:00 UTC)" executed successfully 2026-11-06 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 19:00:00 UTC)" (scheduled at 2026-11-06 18:00:00+00:00) 2026-11-06 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-06 18:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 18:00:01,039 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 18:00:01,042 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 18:00:01,046 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 18:00:01,046 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 18:00:01,124 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 18:00:01,186 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 18:00:01,186 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 19:00:00 UTC)" executed successfully 2026-11-06 19:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 20:00:00 UTC)" (scheduled at 2026-11-06 19:00:00+00:00) 2026-11-06 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-06 19:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 19:00:01,500 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 19:00:01,502 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 19:00:01,505 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 19:00:01,505 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 19:00:01,574 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 19:00:01,641 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 19:00:01,642 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 20:00:00 UTC)" executed successfully 2026-11-06 20:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 21:00:00 UTC)" (scheduled at 2026-11-06 20:00:00+00:00) 2026-11-06 20:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-06 20:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 20:00:01,356 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 20:00:01,358 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 20:00:01,360 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 20:00:01,360 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 20:00:01,406 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 20:00:01,454 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 20:00:01,454 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 21:00:00 UTC)" executed successfully 2026-11-06 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 22:00:00 UTC)" (scheduled at 2026-11-06 21:00:00+00:00) 2026-11-06 21:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-06 21:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 21:00:01,218 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 21:00:01,220 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 21:00:01,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 21:00:01,223 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 21:00:01,276 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 21:00:01,327 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 21:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 22:00:00 UTC)" executed successfully 2026-11-06 22:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 23:00:00 UTC)" (scheduled at 2026-11-06 22:00:00+00:00) 2026-11-06 22:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-06 22:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 22:00:02,188 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 22:00:02,190 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 22:00:02,193 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 22:00:02,193 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 22:00:02,253 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 22:00:02,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 22:00:02,309 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-06 23:00:00 UTC)" executed successfully 2026-11-06 23:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 00:00:00 UTC)" (scheduled at 2026-11-06 23:00:00+00:00) 2026-11-06 23:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-06 23:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-06 23:00:02,344 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-06 23:00:02,346 INFO [fb-sync.worker] Scraped 50 posts 2026-11-06 23:00:02,348 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-06 23:00:02,349 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-06 23:00:02,410 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-06 23:00:02,477 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-06 23:00:02,477 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 00:00:00 UTC)" executed successfully 2026-11-07 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 01:00:00 UTC)" (scheduled at 2026-11-07 00:00:00+00:00) 2026-11-07 00:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-07 00:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 00:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 00:00:01,245 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 00:00:01,249 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 00:00:01,250 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 00:00:01,316 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 00:00:01,381 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 00:00:01,382 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 01:00:00 UTC)" executed successfully 2026-11-07 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 02:00:00 UTC)" (scheduled at 2026-11-07 01:00:00+00:00) 2026-11-07 01:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-07 01:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 01:00:00,933 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 01:00:00,936 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 01:00:00,938 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 01:00:00,938 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 01:00:00,989 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 01:00:01,041 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 01:00:01,041 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 02:00:00 UTC)" executed successfully 2026-11-07 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 03:00:00 UTC)" (scheduled at 2026-11-07 02:00:00+00:00) 2026-11-07 02:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-07 02:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 02:00:01,084 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 02:00:01,085 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 02:00:01,089 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 02:00:01,089 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 02:00:01,156 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 02:00:01,232 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 02:00:01,232 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 03:00:00 UTC)" executed successfully 2026-11-07 03:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 04:00:00 UTC)" (scheduled at 2026-11-07 03:00:00+00:00) 2026-11-07 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-07 03:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 03:00:01,073 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 03:00:01,074 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 03:00:01,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 03:00:01,077 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 03:00:01,123 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 03:00:01,168 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 03:00:01,169 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 04:00:00 UTC)" executed successfully 2026-11-07 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 05:00:00 UTC)" (scheduled at 2026-11-07 04:00:00+00:00) 2026-11-07 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 04:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 04:00:01,013 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 04:00:01,015 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 04:00:01,017 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 04:00:01,017 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 04:00:01,060 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 04:00:01,104 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 04:00:01,105 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 05:00:00 UTC)" executed successfully 2026-11-07 05:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 06:00:00 UTC)" (scheduled at 2026-11-07 05:00:00+00:00) 2026-11-07 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-07 05:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 05:00:01,622 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 05:00:01,625 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 05:00:01,627 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 05:00:01,627 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 05:00:01,674 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 05:00:01,720 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 05:00:01,720 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 06:00:00 UTC)" executed successfully 2026-11-07 06:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 07:00:00 UTC)" (scheduled at 2026-11-07 06:00:00+00:00) 2026-11-07 06:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-07 06:00:00,106 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 06:00:00,984 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 06:00:00,986 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 06:00:00,988 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 06:00:00,988 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 06:00:01,048 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 06:00:01,101 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 06:00:01,102 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 07:00:00 UTC)" executed successfully 2026-11-07 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 08:00:00 UTC)" (scheduled at 2026-11-07 07:00:00+00:00) 2026-11-07 07:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-07 07:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 07:00:01,472 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 07:00:01,474 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 07:00:01,476 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 07:00:01,476 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 07:00:01,524 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 07:00:01,574 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 07:00:01,575 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 08:00:00 UTC)" executed successfully 2026-11-07 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 09:00:00 UTC)" (scheduled at 2026-11-07 08:00:00+00:00) 2026-11-07 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-07 08:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 08:00:01,549 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 08:00:01,550 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 08:00:01,552 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 08:00:01,553 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 08:00:01,605 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 08:00:01,653 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 08:00:01,654 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 09:00:00 UTC)" executed successfully 2026-11-07 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 10:00:00 UTC)" (scheduled at 2026-11-07 09:00:00+00:00) 2026-11-07 09:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-07 09:00:00,062 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 09:00:01,106 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 09:00:01,108 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 09:00:01,110 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 09:00:01,111 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 09:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 09:00:01,218 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 09:00:01,218 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 10:00:00 UTC)" executed successfully 2026-11-07 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 11:00:00 UTC)" (scheduled at 2026-11-07 10:00:00+00:00) 2026-11-07 10:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 10:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 10:00:01,215 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 10:00:01,217 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 10:00:01,220 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 10:00:01,220 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 10:00:01,289 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 10:00:01,362 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 10:00:01,362 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 11:00:00 UTC)" executed successfully 2026-11-07 11:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 12:00:00 UTC)" (scheduled at 2026-11-07 11:00:00+00:00) 2026-11-07 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-07 11:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 11:00:01,099 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 11:00:01,101 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 11:00:01,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 11:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 11:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 11:00:01,214 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 11:00:01,214 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 12:00:00 UTC)" executed successfully 2026-11-07 12:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 13:00:00 UTC)" (scheduled at 2026-11-07 12:00:00+00:00) 2026-11-07 12:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 12:00:01,354 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 12:00:01,360 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 12:00:01,364 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 12:00:01,364 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 12:00:01,418 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 12:00:01,469 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 12:00:01,470 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 13:00:00 UTC)" executed successfully 2026-11-07 13:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 14:00:00 UTC)" (scheduled at 2026-11-07 13:00:00+00:00) 2026-11-07 13:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-07 13:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 13:00:01,266 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 13:00:01,268 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 13:00:01,271 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 13:00:01,272 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 13:00:01,341 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 13:00:01,415 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 13:00:01,416 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 14:00:00 UTC)" executed successfully 2026-11-07 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 15:00:00 UTC)" (scheduled at 2026-11-07 14:00:00+00:00) 2026-11-07 14:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-07 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 14:00:01,631 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 14:00:01,633 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 14:00:01,635 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 14:00:01,635 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 14:00:01,681 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 14:00:01,730 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 14:00:01,730 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 15:00:00 UTC)" executed successfully 2026-11-07 15:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 16:00:00 UTC)" (scheduled at 2026-11-07 15:00:00+00:00) 2026-11-07 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-07 15:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 15:00:01,072 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 15:00:01,074 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 15:00:01,076 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 15:00:01,076 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 15:00:01,121 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 15:00:01,181 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 15:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 16:00:00 UTC)" executed successfully 2026-11-07 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 17:00:00 UTC)" (scheduled at 2026-11-07 16:00:00+00:00) 2026-11-07 16:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 16:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 16:00:01,150 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 16:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 16:00:01,154 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 16:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 16:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 16:00:01,279 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 16:00:01,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 17:00:00 UTC)" executed successfully 2026-11-07 17:00:00,012 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 18:00:00 UTC)" (scheduled at 2026-11-07 17:00:00+00:00) 2026-11-07 17:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-07 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 17:00:01,126 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 17:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 17:00:01,130 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 17:00:01,130 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 17:00:01,187 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 17:00:01,238 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 17:00:01,238 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 18:00:00 UTC)" executed successfully 2026-11-07 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 19:00:00 UTC)" (scheduled at 2026-11-07 18:00:00+00:00) 2026-11-07 18:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-07 18:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 18:00:01,149 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 18:00:01,152 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 18:00:01,155 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 18:00:01,155 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 18:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 18:00:01,268 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 18:00:01,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 19:00:00 UTC)" executed successfully 2026-11-07 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 20:00:00 UTC)" (scheduled at 2026-11-07 19:00:00+00:00) 2026-11-07 19:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 19:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 19:00:03,160 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 19:00:03,163 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 19:00:03,166 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 19:00:03,167 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 19:00:03,216 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 19:00:03,274 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 19:00:03,274 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 20:00:00 UTC)" executed successfully 2026-11-07 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 21:00:00 UTC)" (scheduled at 2026-11-07 20:00:00+00:00) 2026-11-07 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-07 20:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 20:00:01,518 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 20:00:01,521 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 20:00:01,524 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 20:00:01,524 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 20:00:01,577 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 20:00:01,628 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 20:00:01,628 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 21:00:00 UTC)" executed successfully 2026-11-07 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 22:00:00 UTC)" (scheduled at 2026-11-07 21:00:00+00:00) 2026-11-07 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-07 21:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 21:00:01,097 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 21:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 21:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 21:00:01,101 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 21:00:01,150 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 21:00:01,197 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 21:00:01,197 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 22:00:00 UTC)" executed successfully 2026-11-07 22:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 23:00:00 UTC)" (scheduled at 2026-11-07 22:00:00+00:00) 2026-11-07 22:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-07 22:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 22:00:01,010 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 22:00:01,012 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 22:00:01,014 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 22:00:01,015 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 22:00:01,078 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 22:00:01,152 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 22:00:01,153 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-07 23:00:00 UTC)" executed successfully 2026-11-07 23:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 00:00:00 UTC)" (scheduled at 2026-11-07 23:00:00+00:00) 2026-11-07 23:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-07 23:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-07 23:00:01,568 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-07 23:00:01,570 INFO [fb-sync.worker] Scraped 50 posts 2026-11-07 23:00:01,573 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-07 23:00:01,573 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-07 23:00:01,641 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-07 23:00:01,711 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-07 23:00:01,712 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 00:00:00 UTC)" executed successfully 2026-11-08 00:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 01:00:00 UTC)" (scheduled at 2026-11-08 00:00:00+00:00) 2026-11-08 00:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-08 00:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 00:00:00,920 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 00:00:00,923 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 00:00:00,925 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 00:00:00,926 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 00:00:00,981 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 00:00:01,042 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 00:00:01,042 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 01:00:00 UTC)" executed successfully 2026-11-08 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 02:00:00 UTC)" (scheduled at 2026-11-08 01:00:00+00:00) 2026-11-08 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-08 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 01:00:01,761 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 01:00:01,763 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 01:00:01,765 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 01:00:01,765 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 01:00:01,831 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 01:00:01,905 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 01:00:01,905 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 02:00:00 UTC)" executed successfully 2026-11-08 02:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 03:00:00 UTC)" (scheduled at 2026-11-08 02:00:00+00:00) 2026-11-08 02:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-08 02:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 02:00:01,009 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 02:00:01,011 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 02:00:01,014 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 02:00:01,014 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 02:00:01,061 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 02:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 02:00:01,108 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 03:00:00 UTC)" executed successfully 2026-11-08 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 04:00:00 UTC)" (scheduled at 2026-11-08 03:00:00+00:00) 2026-11-08 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-08 03:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 03:00:01,002 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 03:00:01,004 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 03:00:01,006 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 03:00:01,007 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 03:00:01,051 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 03:00:01,097 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 03:00:01,097 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 04:00:00 UTC)" executed successfully 2026-11-08 04:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 05:00:00 UTC)" (scheduled at 2026-11-08 04:00:00+00:00) 2026-11-08 04:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-08 04:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 04:00:00,954 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 04:00:00,955 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 04:00:00,957 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 04:00:00,957 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 04:00:01,004 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 04:00:01,053 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 04:00:01,053 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 05:00:00 UTC)" executed successfully 2026-11-08 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 06:00:00 UTC)" (scheduled at 2026-11-08 05:00:00+00:00) 2026-11-08 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-08 05:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 05:00:01,069 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 05:00:01,072 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 05:00:01,074 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 05:00:01,074 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 05:00:01,129 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 05:00:01,184 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 05:00:01,185 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 06:00:00 UTC)" executed successfully 2026-11-08 06:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 07:00:00 UTC)" (scheduled at 2026-11-08 06:00:00+00:00) 2026-11-08 06:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-08 06:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 06:00:01,099 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 06:00:01,102 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 06:00:01,106 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 06:00:01,106 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 06:00:01,176 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 06:00:01,218 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 06:00:01,219 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 07:00:00 UTC)" executed successfully 2026-11-08 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 08:00:00 UTC)" (scheduled at 2026-11-08 07:00:00+00:00) 2026-11-08 07:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-08 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 07:00:01,302 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 07:00:01,304 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 07:00:01,306 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 07:00:01,307 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 07:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 07:00:01,414 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 07:00:01,414 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 08:00:00 UTC)" executed successfully 2026-11-08 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 09:00:00 UTC)" (scheduled at 2026-11-08 08:00:00+00:00) 2026-11-08 08:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-08 08:00:00,102 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 08:00:01,015 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 08:00:01,018 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 08:00:01,020 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 08:00:01,020 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 08:00:01,074 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 08:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 08:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 09:00:00 UTC)" executed successfully 2026-11-08 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 10:00:00 UTC)" (scheduled at 2026-11-08 09:00:00+00:00) 2026-11-08 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-08 09:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 09:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 09:00:01,125 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 09:00:01,127 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 09:00:01,128 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 09:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 09:00:01,221 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 09:00:01,221 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 10:00:00 UTC)" executed successfully 2026-11-08 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 11:00:00 UTC)" (scheduled at 2026-11-08 10:00:00+00:00) 2026-11-08 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-08 10:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 10:00:01,031 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 10:00:01,034 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 10:00:01,036 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 10:00:01,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 10:00:01,093 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 10:00:01,147 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 10:00:01,148 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 11:00:00 UTC)" executed successfully 2026-11-08 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 12:00:00 UTC)" (scheduled at 2026-11-08 11:00:00+00:00) 2026-11-08 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-08 11:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 11:00:01,014 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 11:00:01,015 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 11:00:01,017 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 11:00:01,017 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 11:00:01,069 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 11:00:01,117 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 11:00:01,117 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 12:00:00 UTC)" executed successfully 2026-11-08 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 13:00:00 UTC)" (scheduled at 2026-11-08 12:00:00+00:00) 2026-11-08 12:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-08 12:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 12:00:01,441 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 12:00:01,442 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 12:00:01,444 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 12:00:01,444 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 12:00:01,489 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 12:00:01,533 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 12:00:01,533 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 13:00:00 UTC)" executed successfully 2026-11-08 13:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 14:00:00 UTC)" (scheduled at 2026-11-08 13:00:00+00:00) 2026-11-08 13:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-08 13:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 13:00:01,098 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 13:00:01,099 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 13:00:01,101 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 13:00:01,102 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 13:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 13:00:01,191 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 13:00:01,191 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 14:00:00 UTC)" executed successfully 2026-11-08 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 15:00:00 UTC)" (scheduled at 2026-11-08 14:00:00+00:00) 2026-11-08 14:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-08 14:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 14:00:01,322 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 14:00:01,324 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 14:00:01,327 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 14:00:01,328 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 14:00:01,395 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 14:00:01,465 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 14:00:01,465 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 15:00:00 UTC)" executed successfully 2026-11-08 15:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 16:00:00 UTC)" (scheduled at 2026-11-08 15:00:00+00:00) 2026-11-08 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-08 15:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 15:00:01,332 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 15:00:01,335 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 15:00:01,338 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 15:00:01,338 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 15:00:01,393 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 15:00:01,444 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 15:00:01,445 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 16:00:00 UTC)" executed successfully 2026-11-08 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 17:00:00 UTC)" (scheduled at 2026-11-08 16:00:00+00:00) 2026-11-08 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-08 16:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 16:00:02,078 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 16:00:02,080 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 16:00:02,082 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 16:00:02,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 16:00:02,151 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 16:00:02,226 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 16:00:02,227 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 17:00:00 UTC)" executed successfully 2026-11-08 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 18:00:00 UTC)" (scheduled at 2026-11-08 17:00:00+00:00) 2026-11-08 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-08 17:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 17:00:01,322 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 17:00:01,324 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 17:00:01,327 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 17:00:01,328 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 17:00:01,398 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 17:00:01,473 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 17:00:01,474 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 18:00:00 UTC)" executed successfully 2026-11-08 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 19:00:00 UTC)" (scheduled at 2026-11-08 18:00:00+00:00) 2026-11-08 18:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-08 18:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 18:00:04,157 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 18:00:04,159 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 18:00:04,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 18:00:04,162 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 18:00:04,211 INFO [fb-sync] Sync done: 0 new posts in 4s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 18:00:04,267 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 18:00:04,268 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 19:00:00 UTC)" executed successfully 2026-11-08 19:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 20:00:00 UTC)" (scheduled at 2026-11-08 19:00:00+00:00) 2026-11-08 19:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-08 19:00:00,099 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 19:00:01,322 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 19:00:01,328 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 19:00:01,331 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 19:00:01,332 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 19:00:01,399 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 19:00:01,457 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 19:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 20:00:00 UTC)" executed successfully 2026-11-08 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 21:00:00 UTC)" (scheduled at 2026-11-08 20:00:00+00:00) 2026-11-08 20:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-08 20:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 20:00:01,124 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 20:00:01,126 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 20:00:01,129 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 20:00:01,129 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 20:00:01,216 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 20:00:01,276 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 20:00:01,277 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 21:00:00 UTC)" executed successfully 2026-11-08 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 22:00:00 UTC)" (scheduled at 2026-11-08 21:00:00+00:00) 2026-11-08 21:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-08 21:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 21:00:01,143 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 21:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 21:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 21:00:01,147 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 21:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 21:00:01,242 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 21:00:01,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 22:00:00 UTC)" executed successfully 2026-11-08 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 23:00:00 UTC)" (scheduled at 2026-11-08 22:00:00+00:00) 2026-11-08 22:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-08 22:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 22:00:01,127 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 22:00:01,128 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 22:00:01,131 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 22:00:01,131 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 22:00:01,177 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 22:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 22:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-08 23:00:00 UTC)" executed successfully 2026-11-08 23:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 00:00:00 UTC)" (scheduled at 2026-11-08 23:00:00+00:00) 2026-11-08 23:00:00,021 INFO [fb-sync] Starting FB sync... 2026-11-08 23:00:00,098 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-08 23:00:01,532 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-08 23:00:01,535 INFO [fb-sync.worker] Scraped 50 posts 2026-11-08 23:00:01,538 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-08 23:00:01,538 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-08 23:00:01,614 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-08 23:00:01,699 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-08 23:00:01,699 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 00:00:00 UTC)" executed successfully 2026-11-09 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 01:00:00 UTC)" (scheduled at 2026-11-09 00:00:00+00:00) 2026-11-09 00:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-09 00:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 00:00:01,206 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 00:00:01,208 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 00:00:01,211 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 00:00:01,212 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 00:00:01,287 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 00:00:01,355 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 00:00:01,356 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 01:00:00 UTC)" executed successfully 2026-11-09 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 02:00:00 UTC)" (scheduled at 2026-11-09 01:00:00+00:00) 2026-11-09 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-09 01:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 01:00:02,510 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 01:00:02,512 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 01:00:02,515 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 01:00:02,515 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 01:00:02,574 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 01:00:02,633 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 01:00:02,634 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 02:00:00 UTC)" executed successfully 2026-11-09 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 03:00:00 UTC)" (scheduled at 2026-11-09 02:00:00+00:00) 2026-11-09 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-09 02:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 02:00:00,985 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 02:00:00,987 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 02:00:00,990 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 02:00:00,990 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 02:00:01,252 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 02:00:01,304 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 02:00:01,304 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 03:00:00 UTC)" executed successfully 2026-11-09 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 04:00:00 UTC)" (scheduled at 2026-11-09 03:00:00+00:00) 2026-11-09 03:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-09 03:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 03:00:00,932 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 03:00:00,934 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 03:00:00,937 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 03:00:00,937 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 03:00:01,006 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 03:00:01,080 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 03:00:01,080 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 04:00:00 UTC)" executed successfully 2026-11-09 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 05:00:00 UTC)" (scheduled at 2026-11-09 04:00:00+00:00) 2026-11-09 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-09 04:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 04:00:00,959 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 04:00:00,960 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 04:00:00,962 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 04:00:00,962 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 04:00:01,011 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 04:00:01,059 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 04:00:01,059 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 05:00:00 UTC)" executed successfully 2026-11-09 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 06:00:00 UTC)" (scheduled at 2026-11-09 05:00:00+00:00) 2026-11-09 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-09 05:00:00,096 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 05:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 05:00:01,113 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 05:00:01,115 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 05:00:01,115 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 05:00:01,172 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 05:00:01,244 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 05:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 06:00:00 UTC)" executed successfully 2026-11-09 06:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 07:00:00 UTC)" (scheduled at 2026-11-09 06:00:00+00:00) 2026-11-09 06:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-09 06:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 06:00:01,998 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 06:00:02,000 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 06:00:02,003 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 06:00:02,003 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 06:00:02,050 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 06:00:02,098 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 06:00:02,098 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 07:00:00 UTC)" executed successfully 2026-11-09 07:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 08:00:00 UTC)" (scheduled at 2026-11-09 07:00:00+00:00) 2026-11-09 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-09 07:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 07:00:01,004 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 07:00:01,007 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 07:00:01,009 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 07:00:01,009 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 07:00:01,061 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 07:00:01,114 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 07:00:01,114 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 08:00:00 UTC)" executed successfully 2026-11-09 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 09:00:00 UTC)" (scheduled at 2026-11-09 08:00:00+00:00) 2026-11-09 08:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-09 08:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 08:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 08:00:01,121 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 08:00:01,124 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 08:00:01,124 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 08:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 08:00:01,253 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 08:00:01,253 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 09:00:00 UTC)" executed successfully 2026-11-09 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 10:00:00 UTC)" (scheduled at 2026-11-09 09:00:00+00:00) 2026-11-09 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 09:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 09:00:00,928 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 09:00:00,931 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 09:00:00,934 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 09:00:00,934 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 09:00:01,006 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 09:00:01,084 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 09:00:01,084 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 10:00:00 UTC)" executed successfully 2026-11-09 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 11:00:00 UTC)" (scheduled at 2026-11-09 10:00:00+00:00) 2026-11-09 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 10:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 10:00:00,851 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 10:00:00,854 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 10:00:00,856 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 10:00:00,856 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 10:00:00,912 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 10:00:00,971 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 10:00:00,972 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 11:00:00 UTC)" executed successfully 2026-11-09 11:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 12:00:00 UTC)" (scheduled at 2026-11-09 11:00:00+00:00) 2026-11-09 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-09 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 11:00:01,506 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 11:00:01,507 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 11:00:01,509 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 11:00:01,509 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 11:00:01,573 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 11:00:01,639 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 11:00:01,640 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 12:00:00 UTC)" executed successfully 2026-11-09 12:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 13:00:00 UTC)" (scheduled at 2026-11-09 12:00:00+00:00) 2026-11-09 12:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-09 12:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 12:00:00,969 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 12:00:00,971 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 12:00:00,973 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 12:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 12:00:01,029 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 12:00:01,074 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 12:00:01,075 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 13:00:00 UTC)" executed successfully 2026-11-09 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 14:00:00 UTC)" (scheduled at 2026-11-09 13:00:00+00:00) 2026-11-09 13:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-09 13:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 13:00:01,207 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 13:00:01,209 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 13:00:01,212 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 13:00:01,212 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 13:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 13:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 13:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 14:00:00 UTC)" executed successfully 2026-11-09 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 15:00:00 UTC)" (scheduled at 2026-11-09 14:00:00+00:00) 2026-11-09 14:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-09 14:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 14:00:01,233 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 14:00:01,235 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 14:00:01,238 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 14:00:01,239 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 14:00:01,311 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 14:00:01,388 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 14:00:01,389 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 15:00:00 UTC)" executed successfully 2026-11-09 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 16:00:00 UTC)" (scheduled at 2026-11-09 15:00:00+00:00) 2026-11-09 15:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 15:00:01,254 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 15:00:01,256 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 15:00:01,259 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 15:00:01,259 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 15:00:01,317 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 15:00:01,365 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 15:00:01,366 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 16:00:00 UTC)" executed successfully 2026-11-09 16:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 17:00:00 UTC)" (scheduled at 2026-11-09 16:00:00+00:00) 2026-11-09 16:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-09 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 16:00:01,171 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 16:00:01,173 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 16:00:01,175 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 16:00:01,176 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 16:00:01,226 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 16:00:01,282 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 16:00:01,282 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 17:00:00 UTC)" executed successfully 2026-11-09 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 18:00:00 UTC)" (scheduled at 2026-11-09 17:00:00+00:00) 2026-11-09 17:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-09 17:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 17:00:01,052 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 17:00:01,054 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 17:00:01,057 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 17:00:01,057 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 17:00:01,125 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 17:00:01,200 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 17:00:01,200 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 18:00:00 UTC)" executed successfully 2026-11-09 18:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 19:00:00 UTC)" (scheduled at 2026-11-09 18:00:00+00:00) 2026-11-09 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-09 18:00:00,059 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 18:00:01,067 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 18:00:01,068 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 18:00:01,070 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 18:00:01,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 18:00:01,115 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 18:00:01,160 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 18:00:01,161 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 19:00:00 UTC)" executed successfully 2026-11-09 19:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 20:00:00 UTC)" (scheduled at 2026-11-09 19:00:00+00:00) 2026-11-09 19:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-09 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 19:00:01,451 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 19:00:01,453 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 19:00:01,457 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 19:00:01,457 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 19:00:01,512 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 19:00:01,563 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 19:00:01,564 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 20:00:00 UTC)" executed successfully 2026-11-09 20:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 21:00:00 UTC)" (scheduled at 2026-11-09 20:00:00+00:00) 2026-11-09 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 20:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 20:00:01,365 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 20:00:01,367 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 20:00:01,369 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 20:00:01,370 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 20:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 20:00:01,482 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 20:00:01,482 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 21:00:00 UTC)" executed successfully 2026-11-09 21:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 22:00:00 UTC)" (scheduled at 2026-11-09 21:00:00+00:00) 2026-11-09 21:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-09 21:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 21:00:01,276 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 21:00:01,278 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 21:00:01,281 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 21:00:01,281 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 21:00:01,333 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 21:00:01,397 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 21:00:01,398 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 22:00:00 UTC)" executed successfully 2026-11-09 22:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 23:00:00 UTC)" (scheduled at 2026-11-09 22:00:00+00:00) 2026-11-09 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 22:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 22:00:01,054 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 22:00:01,056 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 22:00:01,058 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 22:00:01,058 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 22:00:01,100 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 22:00:01,145 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 22:00:01,145 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-09 23:00:00 UTC)" executed successfully 2026-11-09 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 00:00:00 UTC)" (scheduled at 2026-11-09 23:00:00+00:00) 2026-11-09 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-09 23:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-09 23:00:01,491 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-09 23:00:01,493 INFO [fb-sync.worker] Scraped 50 posts 2026-11-09 23:00:01,496 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-09 23:00:01,497 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-09 23:00:01,565 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-09 23:00:01,640 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-09 23:00:01,640 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 00:00:00 UTC)" executed successfully 2026-11-10 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 01:00:00 UTC)" (scheduled at 2026-11-10 00:00:00+00:00) 2026-11-10 00:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-10 00:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 00:00:00,910 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 00:00:00,913 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 00:00:00,916 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 00:00:00,916 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 00:00:00,977 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 00:00:01,029 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 00:00:01,030 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 01:00:00 UTC)" executed successfully 2026-11-10 01:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 02:00:00 UTC)" (scheduled at 2026-11-10 01:00:00+00:00) 2026-11-10 01:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-10 01:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 01:00:01,038 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 01:00:01,040 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 01:00:01,043 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 01:00:01,043 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 01:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 01:00:01,175 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 01:00:01,176 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 02:00:00 UTC)" executed successfully 2026-11-10 02:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 03:00:00 UTC)" (scheduled at 2026-11-10 02:00:00+00:00) 2026-11-10 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-10 02:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 02:00:00,969 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 02:00:00,970 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 02:00:00,973 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 02:00:00,973 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 02:00:01,020 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 02:00:01,067 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 02:00:01,067 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 03:00:00 UTC)" executed successfully 2026-11-10 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 04:00:00 UTC)" (scheduled at 2026-11-10 03:00:00+00:00) 2026-11-10 03:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-10 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 03:00:01,035 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 03:00:01,037 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 03:00:01,039 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 03:00:01,040 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 03:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 03:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 03:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 04:00:00 UTC)" executed successfully 2026-11-10 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 05:00:00 UTC)" (scheduled at 2026-11-10 04:00:00+00:00) 2026-11-10 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-10 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 04:00:01,309 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 04:00:01,312 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 04:00:01,314 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 04:00:01,315 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 04:00:01,378 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 04:00:01,434 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 04:00:01,435 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 05:00:00 UTC)" executed successfully 2026-11-10 05:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 06:00:00 UTC)" (scheduled at 2026-11-10 05:00:00+00:00) 2026-11-10 05:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-10 05:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 05:00:01,130 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 05:00:01,133 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 05:00:01,136 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 05:00:01,136 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 05:00:01,212 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 05:00:01,262 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 05:00:01,262 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 06:00:00 UTC)" executed successfully 2026-11-10 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 07:00:00 UTC)" (scheduled at 2026-11-10 06:00:00+00:00) 2026-11-10 06:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-10 06:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 06:00:01,145 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 06:00:01,147 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 06:00:01,149 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 06:00:01,149 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 06:00:01,195 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 06:00:01,239 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 06:00:01,239 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 07:00:00 UTC)" executed successfully 2026-11-10 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 08:00:00 UTC)" (scheduled at 2026-11-10 07:00:00+00:00) 2026-11-10 07:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-10 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 07:00:00,811 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 07:00:00,814 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 07:00:00,817 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 07:00:00,817 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 07:00:00,892 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 07:00:00,957 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 07:00:00,957 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 08:00:00 UTC)" executed successfully 2026-11-10 08:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 09:00:00 UTC)" (scheduled at 2026-11-10 08:00:00+00:00) 2026-11-10 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-10 08:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 08:00:03,491 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 08:00:03,492 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 08:00:03,495 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 08:00:03,495 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 08:00:03,542 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 08:00:03,596 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 08:00:03,596 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 09:00:00 UTC)" executed successfully 2026-11-10 09:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 10:00:00 UTC)" (scheduled at 2026-11-10 09:00:00+00:00) 2026-11-10 09:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-10 09:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 09:00:00,928 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 09:00:00,930 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 09:00:00,933 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 09:00:00,933 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 09:00:01,002 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 09:00:01,079 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 09:00:01,080 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 10:00:00 UTC)" executed successfully 2026-11-10 10:00:00,002 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 11:00:00 UTC)" (scheduled at 2026-11-10 10:00:00+00:00) 2026-11-10 10:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-10 10:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 10:00:01,819 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 10:00:01,821 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 10:00:01,823 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 10:00:01,823 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 10:00:01,880 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 10:00:01,957 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 10:00:01,957 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 11:00:00 UTC)" executed successfully 2026-11-10 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 12:00:00 UTC)" (scheduled at 2026-11-10 11:00:00+00:00) 2026-11-10 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-10 11:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 11:00:01,064 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 11:00:01,067 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 11:00:01,070 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 11:00:01,070 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 11:00:01,147 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 11:00:01,207 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 11:00:01,207 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 12:00:00 UTC)" executed successfully 2026-11-10 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 13:00:00 UTC)" (scheduled at 2026-11-10 12:00:00+00:00) 2026-11-10 12:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-10 12:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 12:00:00,991 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 12:00:00,993 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 12:00:00,995 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 12:00:00,995 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 12:00:01,054 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 12:00:01,117 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 12:00:01,117 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 13:00:00 UTC)" executed successfully 2026-11-10 13:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 14:00:00 UTC)" (scheduled at 2026-11-10 13:00:00+00:00) 2026-11-10 13:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-10 13:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 13:00:01,000 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 13:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 13:00:01,005 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 13:00:01,006 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 13:00:01,066 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 13:00:01,139 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 13:00:01,139 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 14:00:00 UTC)" executed successfully 2026-11-10 14:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 15:00:00 UTC)" (scheduled at 2026-11-10 14:00:00+00:00) 2026-11-10 14:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-10 14:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 14:00:01,001 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 14:00:01,003 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 14:00:01,005 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 14:00:01,005 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 14:00:01,053 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 14:00:01,105 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 14:00:01,105 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 15:00:00 UTC)" executed successfully 2026-11-10 15:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 16:00:00 UTC)" (scheduled at 2026-11-10 15:00:00+00:00) 2026-11-10 15:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-10 15:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 15:00:01,077 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 15:00:01,079 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 15:00:01,081 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 15:00:01,082 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 15:00:01,128 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 15:00:01,173 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 15:00:01,173 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 16:00:00 UTC)" executed successfully 2026-11-10 16:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 17:00:00 UTC)" (scheduled at 2026-11-10 16:00:00+00:00) 2026-11-10 16:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-10 16:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 16:00:01,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 16:00:01,375 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 16:00:01,378 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 16:00:01,378 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 16:00:01,425 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 16:00:01,474 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 16:00:01,474 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 17:00:00 UTC)" executed successfully 2026-11-10 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 18:00:00 UTC)" (scheduled at 2026-11-10 17:00:00+00:00) 2026-11-10 17:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-10 17:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 17:00:01,537 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 17:00:01,539 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 17:00:01,541 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 17:00:01,542 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 17:00:01,599 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 17:00:01,669 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 17:00:01,669 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 18:00:00 UTC)" executed successfully 2026-11-10 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 19:00:00 UTC)" (scheduled at 2026-11-10 18:00:00+00:00) 2026-11-10 18:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-10 18:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 18:00:01,313 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 18:00:01,315 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 18:00:01,317 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 18:00:01,318 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 18:00:01,367 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 18:00:01,422 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 18:00:01,423 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 19:00:00 UTC)" executed successfully 2026-11-10 19:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 20:00:00 UTC)" (scheduled at 2026-11-10 19:00:00+00:00) 2026-11-10 19:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-10 19:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 19:00:01,293 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 19:00:01,295 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 19:00:01,299 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 19:00:01,299 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 19:00:01,345 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 19:00:01,389 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 19:00:01,390 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 20:00:00 UTC)" executed successfully 2026-11-10 20:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 21:00:00 UTC)" (scheduled at 2026-11-10 20:00:00+00:00) 2026-11-10 20:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-10 20:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 20:00:01,224 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 20:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 20:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 20:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 20:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 20:00:01,324 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 20:00:01,324 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 21:00:00 UTC)" executed successfully 2026-11-10 21:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 22:00:00 UTC)" (scheduled at 2026-11-10 21:00:00+00:00) 2026-11-10 21:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-10 21:00:00,100 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 21:00:01,060 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 21:00:01,062 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 21:00:01,064 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 21:00:01,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 21:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 21:00:01,153 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 21:00:01,154 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 22:00:00 UTC)" executed successfully 2026-11-10 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 23:00:00 UTC)" (scheduled at 2026-11-10 22:00:00+00:00) 2026-11-10 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-10 22:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 22:00:01,396 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 22:00:01,398 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 22:00:01,401 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 22:00:01,402 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 22:00:01,455 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 22:00:01,507 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 22:00:01,508 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-10 23:00:00 UTC)" executed successfully 2026-11-10 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 00:00:00 UTC)" (scheduled at 2026-11-10 23:00:00+00:00) 2026-11-10 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-10 23:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-10 23:00:01,173 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-10 23:00:01,175 INFO [fb-sync.worker] Scraped 50 posts 2026-11-10 23:00:01,177 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-10 23:00:01,177 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-10 23:00:01,228 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-10 23:00:01,284 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-10 23:00:01,285 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 00:00:00 UTC)" executed successfully 2026-11-11 00:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 01:00:00 UTC)" (scheduled at 2026-11-11 00:00:00+00:00) 2026-11-11 00:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-11 00:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 00:00:01,009 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 00:00:01,012 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 00:00:01,015 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 00:00:01,016 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 00:00:01,072 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 00:00:01,116 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 00:00:01,116 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 01:00:00 UTC)" executed successfully 2026-11-11 01:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 02:00:00 UTC)" (scheduled at 2026-11-11 01:00:00+00:00) 2026-11-11 01:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-11 01:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 01:00:01,373 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 01:00:01,376 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 01:00:01,379 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 01:00:01,379 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 01:00:01,431 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 01:00:01,480 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 01:00:01,480 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 02:00:00 UTC)" executed successfully 2026-11-11 02:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 03:00:00 UTC)" (scheduled at 2026-11-11 02:00:00+00:00) 2026-11-11 02:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-11 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 02:00:00,974 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 02:00:00,976 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 02:00:00,978 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 02:00:00,979 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 02:00:01,028 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 02:00:01,079 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 02:00:01,080 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 03:00:00 UTC)" executed successfully 2026-11-11 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 04:00:00 UTC)" (scheduled at 2026-11-11 03:00:00+00:00) 2026-11-11 03:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-11 03:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 03:00:01,339 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 03:00:01,341 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 03:00:01,344 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 03:00:01,344 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 03:00:01,415 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 03:00:01,472 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 03:00:01,472 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 04:00:00 UTC)" executed successfully 2026-11-11 04:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 05:00:00 UTC)" (scheduled at 2026-11-11 04:00:00+00:00) 2026-11-11 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-11 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 04:00:00,980 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 04:00:00,982 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 04:00:00,984 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 04:00:00,984 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 04:00:01,038 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 04:00:01,108 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 04:00:01,109 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 05:00:00 UTC)" executed successfully 2026-11-11 05:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 06:00:00 UTC)" (scheduled at 2026-11-11 05:00:00+00:00) 2026-11-11 05:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-11 05:00:00,066 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 05:00:01,399 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 05:00:01,400 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 05:00:01,403 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 05:00:01,403 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 05:00:01,447 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 05:00:01,494 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 05:00:01,494 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 06:00:00 UTC)" executed successfully 2026-11-11 06:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 07:00:00 UTC)" (scheduled at 2026-11-11 06:00:00+00:00) 2026-11-11 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-11 06:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 06:00:01,007 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 06:00:01,009 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 06:00:01,012 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 06:00:01,012 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 06:00:01,069 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 06:00:01,130 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 06:00:01,131 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 07:00:00 UTC)" executed successfully 2026-11-11 07:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 08:00:00 UTC)" (scheduled at 2026-11-11 07:00:00+00:00) 2026-11-11 07:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-11 07:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 07:00:01,287 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 07:00:01,289 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 07:00:01,291 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 07:00:01,291 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 07:00:01,340 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 07:00:01,392 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 07:00:01,392 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 08:00:00 UTC)" executed successfully 2026-11-11 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 09:00:00 UTC)" (scheduled at 2026-11-11 08:00:00+00:00) 2026-11-11 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-11 08:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 08:00:00,852 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 08:00:00,853 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 08:00:00,855 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 08:00:00,856 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 08:00:00,900 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 08:00:00,949 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 08:00:00,950 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 09:00:00 UTC)" executed successfully 2026-11-11 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 10:00:00 UTC)" (scheduled at 2026-11-11 09:00:00+00:00) 2026-11-11 09:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-11 09:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 09:00:01,112 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 09:00:01,114 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 09:00:01,116 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 09:00:01,116 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 09:00:01,173 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 09:00:01,229 INFO [fb-sync.journal] Retention: dropped 4 record(s) older than 30d 2026-11-11 09:00:01,230 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 10:00:00 UTC)" executed successfully 2026-11-11 10:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 11:00:00 UTC)" (scheduled at 2026-11-11 10:00:00+00:00) 2026-11-11 10:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-11 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 10:00:01,023 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 10:00:01,024 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 10:00:01,026 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 10:00:01,026 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 10:00:01,071 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 10:00:01,129 INFO [fb-sync.journal] Retention: dropped 3 record(s) older than 30d 2026-11-11 10:00:01,129 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 11:00:00 UTC)" executed successfully 2026-11-11 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 12:00:00 UTC)" (scheduled at 2026-11-11 11:00:00+00:00) 2026-11-11 11:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-11 11:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 11:00:01,198 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 11:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 11:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 11:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 11:00:01,260 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 11:00:01,316 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 11:00:01,316 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 12:00:00 UTC)" executed successfully 2026-11-11 12:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 13:00:00 UTC)" (scheduled at 2026-11-11 12:00:00+00:00) 2026-11-11 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-11 12:00:00,061 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 12:00:03,219 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 12:00:03,221 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 12:00:03,223 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 12:00:03,223 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 12:00:03,271 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 12:00:03,320 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 12:00:03,320 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 13:00:00 UTC)" executed successfully 2026-11-11 13:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 14:00:00 UTC)" (scheduled at 2026-11-11 13:00:00+00:00) 2026-11-11 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-11 13:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 13:00:01,455 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 13:00:01,457 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 13:00:01,461 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 13:00:01,461 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 13:00:01,529 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 13:00:01,606 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 13:00:01,607 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 14:00:00 UTC)" executed successfully 2026-11-11 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 15:00:00 UTC)" (scheduled at 2026-11-11 14:00:00+00:00) 2026-11-11 14:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-11 14:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 14:00:01,102 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 14:00:01,104 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 14:00:01,107 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 14:00:01,107 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 14:00:01,174 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 14:00:01,245 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 14:00:01,245 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 15:00:00 UTC)" executed successfully 2026-11-11 15:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 16:00:00 UTC)" (scheduled at 2026-11-11 15:00:00+00:00) 2026-11-11 15:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-11 15:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 15:00:01,113 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 15:00:01,115 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 15:00:01,118 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 15:00:01,119 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 15:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 15:00:01,234 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 15:00:01,235 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 16:00:00 UTC)" executed successfully 2026-11-11 16:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 17:00:00 UTC)" (scheduled at 2026-11-11 16:00:00+00:00) 2026-11-11 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-11 16:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 16:00:01,142 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 16:00:01,145 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 16:00:01,147 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 16:00:01,147 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 16:00:01,196 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 16:00:01,243 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 16:00:01,244 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 17:00:00 UTC)" executed successfully 2026-11-11 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 18:00:00 UTC)" (scheduled at 2026-11-11 17:00:00+00:00) 2026-11-11 17:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-11 17:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 17:00:01,429 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 17:00:01,431 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 17:00:01,434 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 17:00:01,434 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 17:00:01,496 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 17:00:01,568 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 17:00:01,569 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 18:00:00 UTC)" executed successfully 2026-11-11 18:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 19:00:00 UTC)" (scheduled at 2026-11-11 18:00:00+00:00) 2026-11-11 18:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-11 18:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 18:00:01,013 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 18:00:01,015 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 18:00:01,018 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 18:00:01,018 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 18:00:01,085 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 18:00:01,158 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 18:00:01,158 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 19:00:00 UTC)" executed successfully 2026-11-11 19:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 20:00:00 UTC)" (scheduled at 2026-11-11 19:00:00+00:00) 2026-11-11 19:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-11 19:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 19:00:01,336 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 19:00:01,338 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 19:00:01,342 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 19:00:01,342 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 19:00:01,397 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 19:00:01,448 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 19:00:01,449 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 20:00:00 UTC)" executed successfully 2026-11-11 20:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 21:00:00 UTC)" (scheduled at 2026-11-11 20:00:00+00:00) 2026-11-11 20:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-11 20:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 20:00:01,059 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 20:00:01,062 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 20:00:01,065 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 20:00:01,065 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 20:00:01,116 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 20:00:01,163 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 20:00:01,163 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 21:00:00 UTC)" executed successfully 2026-11-11 21:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 22:00:00 UTC)" (scheduled at 2026-11-11 21:00:00+00:00) 2026-11-11 21:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-11 21:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 21:00:01,242 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 21:00:01,244 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 21:00:01,246 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 21:00:01,246 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 21:00:01,298 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 21:00:01,353 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 21:00:01,353 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 22:00:00 UTC)" executed successfully 2026-11-11 22:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 23:00:00 UTC)" (scheduled at 2026-11-11 22:00:00+00:00) 2026-11-11 22:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-11 22:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 22:00:01,093 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 22:00:01,095 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 22:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 22:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 22:00:01,145 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 22:00:01,192 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 22:00:01,192 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-11 23:00:00 UTC)" executed successfully 2026-11-11 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 00:00:00 UTC)" (scheduled at 2026-11-11 23:00:00+00:00) 2026-11-11 23:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-11 23:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-11 23:00:01,092 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-11 23:00:01,093 INFO [fb-sync.worker] Scraped 50 posts 2026-11-11 23:00:01,096 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-11 23:00:01,096 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-11 23:00:01,394 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-11 23:00:01,474 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-11 23:00:01,475 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 00:00:00 UTC)" executed successfully 2026-11-12 00:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 01:00:00 UTC)" (scheduled at 2026-11-12 00:00:00+00:00) 2026-11-12 00:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-12 00:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 00:00:01,398 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 00:00:01,400 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 00:00:01,402 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 00:00:01,403 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 00:00:01,470 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 00:00:01,547 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 00:00:01,547 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 01:00:00 UTC)" executed successfully 2026-11-12 01:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 02:00:00 UTC)" (scheduled at 2026-11-12 01:00:00+00:00) 2026-11-12 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-12 01:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 01:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 01:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 01:00:01,163 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 01:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 01:00:01,211 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 01:00:01,279 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 01:00:01,279 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 02:00:00 UTC)" executed successfully 2026-11-12 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 03:00:00 UTC)" (scheduled at 2026-11-12 02:00:00+00:00) 2026-11-12 02:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-12 02:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 02:00:01,495 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 02:00:01,497 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 02:00:01,500 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 02:00:01,500 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 02:00:01,559 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 02:00:01,624 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 02:00:01,624 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 03:00:00 UTC)" executed successfully 2026-11-12 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 04:00:00 UTC)" (scheduled at 2026-11-12 03:00:00+00:00) 2026-11-12 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-12 03:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 03:00:01,099 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 03:00:01,101 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 03:00:01,103 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 03:00:01,103 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 03:00:01,152 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 03:00:01,222 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 03:00:01,223 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 04:00:00 UTC)" executed successfully 2026-11-12 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 05:00:00 UTC)" (scheduled at 2026-11-12 04:00:00+00:00) 2026-11-12 04:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-12 04:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 04:00:01,221 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 04:00:01,223 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 04:00:01,226 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 04:00:01,226 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 04:00:01,289 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 04:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 04:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 05:00:00 UTC)" executed successfully 2026-11-12 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 06:00:00 UTC)" (scheduled at 2026-11-12 05:00:00+00:00) 2026-11-12 05:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-12 05:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 05:00:01,055 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 05:00:01,057 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 05:00:01,060 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 05:00:01,060 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 05:00:01,107 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 05:00:01,170 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 05:00:01,170 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 06:00:00 UTC)" executed successfully 2026-11-12 06:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 07:00:00 UTC)" (scheduled at 2026-11-12 06:00:00+00:00) 2026-11-12 06:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-12 06:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 06:00:01,125 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 06:00:01,127 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 06:00:01,129 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 06:00:01,129 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 06:00:01,179 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 06:00:01,225 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 06:00:01,225 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 07:00:00 UTC)" executed successfully 2026-11-12 07:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 08:00:00 UTC)" (scheduled at 2026-11-12 07:00:00+00:00) 2026-11-12 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-12 07:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 07:00:00,946 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 07:00:00,948 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 07:00:00,951 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 07:00:00,951 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 07:00:01,021 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 07:00:01,090 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 07:00:01,090 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 08:00:00 UTC)" executed successfully 2026-11-12 08:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 09:00:00 UTC)" (scheduled at 2026-11-12 08:00:00+00:00) 2026-11-12 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-12 08:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 08:00:01,279 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 08:00:01,282 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 08:00:01,287 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 08:00:01,287 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 08:00:01,360 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 08:00:01,439 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 08:00:01,439 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 09:00:00 UTC)" executed successfully 2026-11-12 09:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 10:00:00 UTC)" (scheduled at 2026-11-12 09:00:00+00:00) 2026-11-12 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-12 09:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 09:00:01,103 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 09:00:01,106 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 09:00:01,108 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 09:00:01,108 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 09:00:01,158 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 09:00:01,210 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 09:00:01,210 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 10:00:00 UTC)" executed successfully 2026-11-12 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 11:00:00 UTC)" (scheduled at 2026-11-12 10:00:00+00:00) 2026-11-12 10:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-12 10:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 10:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 10:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 10:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 10:00:01,123 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 10:00:01,184 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 10:00:01,241 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 10:00:01,242 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 11:00:00 UTC)" executed successfully 2026-11-12 11:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 12:00:00 UTC)" (scheduled at 2026-11-12 11:00:00+00:00) 2026-11-12 11:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-12 11:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 11:00:01,600 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 11:00:01,603 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 11:00:01,606 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 11:00:01,607 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 11:00:01,683 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 11:00:01,775 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 11:00:01,776 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 12:00:00 UTC)" executed successfully 2026-11-12 12:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 13:00:00 UTC)" (scheduled at 2026-11-12 12:00:00+00:00) 2026-11-12 12:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-12 12:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 12:00:02,665 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 12:00:02,668 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 12:00:02,670 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 12:00:02,670 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 12:00:02,727 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 12:00:02,788 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 12:00:02,789 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 13:00:00 UTC)" executed successfully 2026-11-12 13:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 14:00:00 UTC)" (scheduled at 2026-11-12 13:00:00+00:00) 2026-11-12 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-12 13:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 13:00:01,302 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 13:00:01,304 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 13:00:01,306 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 13:00:01,307 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 13:00:01,351 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 13:00:01,399 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 13:00:01,399 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 14:00:00 UTC)" executed successfully 2026-11-12 14:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 15:00:00 UTC)" (scheduled at 2026-11-12 14:00:00+00:00) 2026-11-12 14:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-12 14:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 14:00:01,065 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 14:00:01,067 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 14:00:01,069 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 14:00:01,069 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 14:00:01,137 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 14:00:01,192 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 14:00:01,193 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 15:00:00 UTC)" executed successfully 2026-11-12 15:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 16:00:00 UTC)" (scheduled at 2026-11-12 15:00:00+00:00) 2026-11-12 15:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-12 15:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 15:00:01,539 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 15:00:01,542 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 15:00:01,545 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 15:00:01,545 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 15:00:01,622 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 15:00:01,677 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 15:00:01,677 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 16:00:00 UTC)" executed successfully 2026-11-12 16:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 17:00:00 UTC)" (scheduled at 2026-11-12 16:00:00+00:00) 2026-11-12 16:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-12 16:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 16:00:01,235 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 16:00:01,238 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 16:00:01,241 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 16:00:01,241 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 16:00:01,315 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 16:00:01,392 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 16:00:01,393 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 17:00:00 UTC)" executed successfully 2026-11-12 17:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 18:00:00 UTC)" (scheduled at 2026-11-12 17:00:00+00:00) 2026-11-12 17:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-12 17:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 17:00:01,531 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 17:00:01,533 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 17:00:01,535 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 17:00:01,535 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 17:00:01,588 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 17:00:01,644 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 17:00:01,644 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 18:00:00 UTC)" executed successfully 2026-11-12 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 19:00:00 UTC)" (scheduled at 2026-11-12 18:00:00+00:00) 2026-11-12 18:00:00,005 INFO [fb-sync] Starting FB sync... 2026-11-12 18:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 18:00:01,337 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 18:00:01,339 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 18:00:01,342 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 18:00:01,342 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 18:00:01,398 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 18:00:01,469 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 18:00:01,469 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 19:00:00 UTC)" executed successfully 2026-11-12 19:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 20:00:00 UTC)" (scheduled at 2026-11-12 19:00:00+00:00) 2026-11-12 19:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-12 19:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 19:00:01,191 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 19:00:01,192 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 19:00:01,195 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 19:00:01,195 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 19:00:01,262 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 19:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 19:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 20:00:00 UTC)" executed successfully 2026-11-12 20:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 21:00:00 UTC)" (scheduled at 2026-11-12 20:00:00+00:00) 2026-11-12 20:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-12 20:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 20:00:01,161 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 20:00:01,163 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 20:00:01,166 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 20:00:01,166 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 20:00:01,234 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 20:00:01,308 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 20:00:01,308 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 21:00:00 UTC)" executed successfully 2026-11-12 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 22:00:00 UTC)" (scheduled at 2026-11-12 21:00:00+00:00) 2026-11-12 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-12 21:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 21:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 21:00:01,111 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 21:00:01,114 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 21:00:01,114 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 21:00:01,186 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 21:00:01,263 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 21:00:01,263 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 22:00:00 UTC)" executed successfully 2026-11-12 22:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 23:00:00 UTC)" (scheduled at 2026-11-12 22:00:00+00:00) 2026-11-12 22:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-12 22:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 22:00:01,275 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 22:00:01,278 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 22:00:01,280 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 22:00:01,280 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 22:00:01,333 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 22:00:01,398 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 22:00:01,398 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-12 23:00:00 UTC)" executed successfully 2026-11-12 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 00:00:00 UTC)" (scheduled at 2026-11-12 23:00:00+00:00) 2026-11-12 23:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-12 23:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-12 23:00:01,873 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-12 23:00:01,875 INFO [fb-sync.worker] Scraped 50 posts 2026-11-12 23:00:01,877 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-12 23:00:01,878 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-12 23:00:01,934 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-12 23:00:02,006 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-12 23:00:02,007 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 00:00:00 UTC)" executed successfully 2026-11-13 00:00:00,016 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 01:00:00 UTC)" (scheduled at 2026-11-13 00:00:00+00:00) 2026-11-13 00:00:00,019 INFO [fb-sync] Starting FB sync... 2026-11-13 00:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 00:00:01,200 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 00:00:01,202 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 00:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 00:00:01,204 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 00:00:01,253 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 00:00:01,304 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 00:00:01,305 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 01:00:00 UTC)" executed successfully 2026-11-13 01:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 02:00:00 UTC)" (scheduled at 2026-11-13 01:00:00+00:00) 2026-11-13 01:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-13 01:00:00,085 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 01:00:01,419 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 01:00:01,422 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 01:00:01,425 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 01:00:01,426 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 01:00:01,502 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 01:00:01,583 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 01:00:01,584 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 02:00:00 UTC)" executed successfully 2026-11-13 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 03:00:00 UTC)" (scheduled at 2026-11-13 02:00:00+00:00) 2026-11-13 02:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-13 02:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 02:00:00,935 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 02:00:00,938 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 02:00:00,941 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 02:00:00,941 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 02:00:01,011 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 02:00:01,082 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 02:00:01,083 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 03:00:00 UTC)" executed successfully 2026-11-13 03:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 04:00:00 UTC)" (scheduled at 2026-11-13 03:00:00+00:00) 2026-11-13 03:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-13 03:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 03:00:01,094 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 03:00:01,096 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 03:00:01,098 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 03:00:01,099 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 03:00:01,153 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 03:00:01,197 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 03:00:01,198 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 04:00:00 UTC)" executed successfully 2026-11-13 04:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 05:00:00 UTC)" (scheduled at 2026-11-13 04:00:00+00:00) 2026-11-13 04:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-13 04:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 04:00:00,920 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 04:00:00,922 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 04:00:00,925 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 04:00:00,925 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 04:00:00,974 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 04:00:01,023 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 04:00:01,023 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 05:00:00 UTC)" executed successfully 2026-11-13 05:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 06:00:00 UTC)" (scheduled at 2026-11-13 05:00:00+00:00) 2026-11-13 05:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-13 05:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 05:00:01,159 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 05:00:01,161 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 05:00:01,162 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 05:00:01,163 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 05:00:01,209 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 05:00:01,257 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 05:00:01,257 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 06:00:00 UTC)" executed successfully 2026-11-13 06:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 07:00:00 UTC)" (scheduled at 2026-11-13 06:00:00+00:00) 2026-11-13 06:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-13 06:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 06:00:00,947 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 06:00:00,948 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 06:00:00,950 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 06:00:00,951 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 06:00:00,995 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 06:00:01,043 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 06:00:01,043 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 07:00:00 UTC)" executed successfully 2026-11-13 07:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 08:00:00 UTC)" (scheduled at 2026-11-13 07:00:00+00:00) 2026-11-13 07:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 07:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 07:00:01,215 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 07:00:01,216 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 07:00:01,219 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 07:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 07:00:01,273 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 07:00:01,322 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 07:00:01,322 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 08:00:00 UTC)" executed successfully 2026-11-13 08:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 09:00:00 UTC)" (scheduled at 2026-11-13 08:00:00+00:00) 2026-11-13 08:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-13 08:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 08:00:01,234 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 08:00:01,237 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 08:00:01,240 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 08:00:01,240 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 08:00:01,298 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 08:00:01,343 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 08:00:01,343 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 09:00:00 UTC)" executed successfully 2026-11-13 09:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 10:00:00 UTC)" (scheduled at 2026-11-13 09:00:00+00:00) 2026-11-13 09:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 09:00:00,091 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 09:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 09:00:01,069 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 09:00:01,071 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 09:00:01,071 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 09:00:01,114 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 09:00:01,165 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 09:00:01,166 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 10:00:00 UTC)" executed successfully 2026-11-13 10:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 11:00:00 UTC)" (scheduled at 2026-11-13 10:00:00+00:00) 2026-11-13 10:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 10:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 10:00:01,239 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 10:00:01,241 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 10:00:01,244 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 10:00:01,244 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 10:00:01,291 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 10:00:01,336 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 10:00:01,336 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 11:00:00 UTC)" executed successfully 2026-11-13 11:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 12:00:00 UTC)" (scheduled at 2026-11-13 11:00:00+00:00) 2026-11-13 11:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-13 11:00:00,097 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 11:00:01,108 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 11:00:01,110 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 11:00:01,113 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 11:00:01,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 11:00:01,163 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 11:00:01,229 INFO [fb-sync.journal] Retention: dropped 3 record(s) older than 30d 2026-11-13 11:00:01,230 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 12:00:00 UTC)" executed successfully 2026-11-13 12:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 13:00:00 UTC)" (scheduled at 2026-11-13 12:00:00+00:00) 2026-11-13 12:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-13 12:00:00,069 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 12:00:02,951 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 12:00:02,953 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 12:00:02,954 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 12:00:02,955 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 12:00:02,999 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 12:00:03,044 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 12:00:03,044 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 13:00:00 UTC)" executed successfully 2026-11-13 13:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 14:00:00 UTC)" (scheduled at 2026-11-13 13:00:00+00:00) 2026-11-13 13:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 13:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 13:00:01,193 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 13:00:01,195 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 13:00:01,198 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 13:00:01,199 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 13:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 13:00:01,329 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 13:00:01,329 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 14:00:00 UTC)" executed successfully 2026-11-13 14:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 15:00:00 UTC)" (scheduled at 2026-11-13 14:00:00+00:00) 2026-11-13 14:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-13 14:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 14:00:01,841 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 14:00:01,844 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 14:00:01,847 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 14:00:01,847 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 14:00:01,907 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 14:00:01,973 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 14:00:01,974 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 15:00:00 UTC)" executed successfully 2026-11-13 15:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 16:00:00 UTC)" (scheduled at 2026-11-13 15:00:00+00:00) 2026-11-13 15:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-13 15:00:00,083 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 15:00:01,281 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 15:00:01,283 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 15:00:01,285 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 15:00:01,285 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 15:00:01,334 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 15:00:01,380 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 15:00:01,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 16:00:00 UTC)" executed successfully 2026-11-13 16:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 17:00:00 UTC)" (scheduled at 2026-11-13 16:00:00+00:00) 2026-11-13 16:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-13 16:00:00,087 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 16:00:01,199 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 16:00:01,201 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 16:00:01,204 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 16:00:01,205 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 16:00:01,274 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 16:00:01,349 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 16:00:01,350 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 17:00:00 UTC)" executed successfully 2026-11-13 17:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 18:00:00 UTC)" (scheduled at 2026-11-13 17:00:00+00:00) 2026-11-13 17:00:00,015 INFO [fb-sync] Starting FB sync... 2026-11-13 17:00:00,088 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 17:00:01,458 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 17:00:01,460 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 17:00:01,462 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 17:00:01,462 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 17:00:01,507 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 17:00:01,579 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 17:00:01,579 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 18:00:00 UTC)" executed successfully 2026-11-13 18:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 19:00:00 UTC)" (scheduled at 2026-11-13 18:00:00+00:00) 2026-11-13 18:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-13 18:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 18:00:01,185 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 18:00:01,187 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 18:00:01,190 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 18:00:01,190 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 18:00:01,239 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 18:00:01,280 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 18:00:01,280 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 19:00:00 UTC)" executed successfully 2026-11-13 19:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 20:00:00 UTC)" (scheduled at 2026-11-13 19:00:00+00:00) 2026-11-13 19:00:00,006 INFO [fb-sync] Starting FB sync... 2026-11-13 19:00:00,064 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 19:00:01,061 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 19:00:01,063 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 19:00:01,065 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 19:00:01,066 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 19:00:01,109 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 19:00:01,154 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 19:00:01,154 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 20:00:00 UTC)" executed successfully 2026-11-13 20:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 21:00:00 UTC)" (scheduled at 2026-11-13 20:00:00+00:00) 2026-11-13 20:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 20:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 20:00:01,350 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 20:00:01,351 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 20:00:01,354 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 20:00:01,354 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 20:00:01,407 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 20:00:01,456 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 20:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 21:00:00 UTC)" executed successfully 2026-11-13 21:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 22:00:00 UTC)" (scheduled at 2026-11-13 21:00:00+00:00) 2026-11-13 21:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-13 21:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 21:00:01,197 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 21:00:01,200 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 21:00:01,202 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 21:00:01,203 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 21:00:01,253 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 21:00:01,298 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 21:00:01,298 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 22:00:00 UTC)" executed successfully 2026-11-13 22:00:00,013 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 23:00:00 UTC)" (scheduled at 2026-11-13 22:00:00+00:00) 2026-11-13 22:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-13 22:00:00,093 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 22:00:01,258 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 22:00:01,261 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 22:00:01,264 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 22:00:01,265 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 22:00:01,309 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 22:00:01,354 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 22:00:01,354 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-13 23:00:00 UTC)" executed successfully 2026-11-13 23:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 00:00:00 UTC)" (scheduled at 2026-11-13 23:00:00+00:00) 2026-11-13 23:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-13 23:00:00,079 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-13 23:00:01,068 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-13 23:00:01,070 INFO [fb-sync.worker] Scraped 50 posts 2026-11-13 23:00:01,072 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-13 23:00:01,073 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-13 23:00:01,121 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-13 23:00:01,168 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-13 23:00:01,168 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 00:00:00 UTC)" executed successfully 2026-11-14 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 01:00:00 UTC)" (scheduled at 2026-11-14 00:00:00+00:00) 2026-11-14 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-14 00:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 00:00:01,851 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 00:00:01,854 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 00:00:01,856 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 00:00:01,857 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 00:00:01,920 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 00:00:01,977 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 00:00:01,977 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 01:00:00 UTC)" executed successfully 2026-11-14 01:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 02:00:00 UTC)" (scheduled at 2026-11-14 01:00:00+00:00) 2026-11-14 01:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-14 01:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 01:00:01,030 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 01:00:01,033 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 01:00:01,035 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 01:00:01,036 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 01:00:01,084 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 01:00:01,129 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 01:00:01,130 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 02:00:00 UTC)" executed successfully 2026-11-14 02:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 03:00:00 UTC)" (scheduled at 2026-11-14 02:00:00+00:00) 2026-11-14 02:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-14 02:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 02:00:00,942 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 02:00:00,944 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 02:00:00,946 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 02:00:00,946 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 02:00:00,988 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 02:00:01,031 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 02:00:01,031 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 03:00:00 UTC)" executed successfully 2026-11-14 03:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 04:00:00 UTC)" (scheduled at 2026-11-14 03:00:00+00:00) 2026-11-14 03:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-14 03:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 03:00:00,969 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 03:00:00,971 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 03:00:00,974 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 03:00:00,974 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 03:00:01,021 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 03:00:01,062 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 03:00:01,062 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 04:00:00 UTC)" executed successfully 2026-11-14 04:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 05:00:00 UTC)" (scheduled at 2026-11-14 04:00:00+00:00) 2026-11-14 04:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-14 04:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 04:00:00,941 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 04:00:00,943 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 04:00:00,945 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 04:00:00,945 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 04:00:00,988 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 04:00:01,035 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 04:00:01,035 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 05:00:00 UTC)" executed successfully 2026-11-14 05:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 06:00:00 UTC)" (scheduled at 2026-11-14 05:00:00+00:00) 2026-11-14 05:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-14 05:00:00,065 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 05:00:01,710 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 05:00:01,711 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 05:00:01,713 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 05:00:01,714 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 05:00:01,755 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 05:00:01,805 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 05:00:01,806 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 06:00:00 UTC)" executed successfully 2026-11-14 06:00:00,018 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 07:00:00 UTC)" (scheduled at 2026-11-14 06:00:00+00:00) 2026-11-14 06:00:00,022 INFO [fb-sync] Starting FB sync... 2026-11-14 06:00:00,095 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 06:00:00,964 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 06:00:00,967 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 06:00:00,970 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 06:00:00,971 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 06:00:01,031 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 06:00:01,076 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 06:00:01,076 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 07:00:00 UTC)" executed successfully 2026-11-14 07:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 08:00:00 UTC)" (scheduled at 2026-11-14 07:00:00+00:00) 2026-11-14 07:00:00,018 INFO [fb-sync] Starting FB sync... 2026-11-14 07:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 07:00:00,979 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 07:00:00,981 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 07:00:00,984 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 07:00:00,984 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 07:00:01,043 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 07:00:01,099 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 07:00:01,099 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 08:00:00 UTC)" executed successfully 2026-11-14 08:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 09:00:00 UTC)" (scheduled at 2026-11-14 08:00:00+00:00) 2026-11-14 08:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-14 08:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 08:00:01,044 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 08:00:01,046 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 08:00:01,048 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 08:00:01,049 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 08:00:01,093 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 08:00:01,148 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 08:00:01,148 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 09:00:00 UTC)" executed successfully 2026-11-14 09:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 10:00:00 UTC)" (scheduled at 2026-11-14 09:00:00+00:00) 2026-11-14 09:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-14 09:00:00,089 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 09:00:01,351 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 09:00:01,353 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 09:00:01,355 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 09:00:01,355 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 09:00:01,403 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 09:00:01,457 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 09:00:01,457 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 10:00:00 UTC)" executed successfully 2026-11-14 10:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 11:00:00 UTC)" (scheduled at 2026-11-14 10:00:00+00:00) 2026-11-14 10:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-14 10:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 10:00:01,073 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 10:00:01,076 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 10:00:01,078 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 10:00:01,079 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 10:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 10:00:01,169 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 10:00:01,170 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 11:00:00 UTC)" executed successfully 2026-11-14 11:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 12:00:00 UTC)" (scheduled at 2026-11-14 11:00:00+00:00) 2026-11-14 11:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-14 11:00:00,081 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 11:00:01,174 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 11:00:01,177 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 11:00:01,179 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 11:00:01,179 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 11:00:01,225 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 11:00:01,270 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 11:00:01,270 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 12:00:00 UTC)" executed successfully 2026-11-14 12:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 13:00:00 UTC)" (scheduled at 2026-11-14 12:00:00+00:00) 2026-11-14 12:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-14 12:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 12:00:01,295 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 12:00:01,298 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 12:00:01,300 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 12:00:01,301 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 12:00:01,350 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 12:00:01,396 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 12:00:01,397 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 13:00:00 UTC)" executed successfully 2026-11-14 13:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 14:00:00 UTC)" (scheduled at 2026-11-14 13:00:00+00:00) 2026-11-14 13:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-14 13:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 13:00:01,154 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 13:00:01,156 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 13:00:01,158 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 13:00:01,158 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 13:00:01,205 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 13:00:01,247 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 13:00:01,247 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 14:00:00 UTC)" executed successfully 2026-11-14 14:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 15:00:00 UTC)" (scheduled at 2026-11-14 14:00:00+00:00) 2026-11-14 14:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-14 14:00:00,092 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 14:00:01,367 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 14:00:01,370 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 14:00:01,373 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 14:00:01,373 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 14:00:01,442 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 14:00:01,520 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 14:00:01,521 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 15:00:00 UTC)" executed successfully 2026-11-14 15:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 16:00:00 UTC)" (scheduled at 2026-11-14 15:00:00+00:00) 2026-11-14 15:00:00,017 INFO [fb-sync] Starting FB sync... 2026-11-14 15:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 15:00:01,163 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 15:00:01,165 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 15:00:01,167 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 15:00:01,168 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 15:00:01,214 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 15:00:01,261 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 15:00:01,261 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 16:00:00 UTC)" executed successfully 2026-11-14 16:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 17:00:00 UTC)" (scheduled at 2026-11-14 16:00:00+00:00) 2026-11-14 16:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-14 16:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 16:00:01,272 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 16:00:01,274 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 16:00:01,276 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 16:00:01,277 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 16:00:01,323 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 16:00:01,380 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 16:00:01,380 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 17:00:00 UTC)" executed successfully 2026-11-14 17:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 18:00:00 UTC)" (scheduled at 2026-11-14 17:00:00+00:00) 2026-11-14 17:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-14 17:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 17:00:01,575 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 17:00:01,577 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 17:00:01,580 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 17:00:01,580 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 17:00:01,649 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 17:00:01,722 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 17:00:01,722 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 18:00:00 UTC)" executed successfully 2026-11-14 18:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 19:00:00 UTC)" (scheduled at 2026-11-14 18:00:00+00:00) 2026-11-14 18:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-14 18:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 18:00:01,228 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 18:00:01,230 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 18:00:01,233 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 18:00:01,234 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 18:00:01,281 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 18:00:01,332 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 18:00:01,333 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 19:00:00 UTC)" executed successfully 2026-11-14 19:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 20:00:00 UTC)" (scheduled at 2026-11-14 19:00:00+00:00) 2026-11-14 19:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-14 19:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 19:00:01,076 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 19:00:01,077 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 19:00:01,080 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 19:00:01,080 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 19:00:01,126 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 19:00:01,180 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 19:00:01,181 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 20:00:00 UTC)" executed successfully 2026-11-14 20:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 21:00:00 UTC)" (scheduled at 2026-11-14 20:00:00+00:00) 2026-11-14 20:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-14 20:00:00,073 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 20:00:01,222 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 20:00:01,225 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 20:00:01,227 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 20:00:01,227 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 20:00:01,277 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 20:00:01,351 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 20:00:01,351 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 21:00:00 UTC)" executed successfully 2026-11-14 21:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 22:00:00 UTC)" (scheduled at 2026-11-14 21:00:00+00:00) 2026-11-14 21:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-14 21:00:00,086 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 21:00:01,208 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 21:00:01,210 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 21:00:01,213 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 21:00:01,214 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 21:00:01,263 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 21:00:01,310 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 21:00:01,310 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 22:00:00 UTC)" executed successfully 2026-11-14 22:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 23:00:00 UTC)" (scheduled at 2026-11-14 22:00:00+00:00) 2026-11-14 22:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-14 22:00:00,068 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 22:00:01,148 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 22:00:01,151 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 22:00:01,153 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 22:00:01,153 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 22:00:01,203 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 22:00:01,249 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 22:00:01,249 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-14 23:00:00 UTC)" executed successfully 2026-11-14 23:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 00:00:00 UTC)" (scheduled at 2026-11-14 23:00:00+00:00) 2026-11-14 23:00:00,010 INFO [fb-sync] Starting FB sync... 2026-11-14 23:00:00,080 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-14 23:00:01,805 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-14 23:00:01,806 INFO [fb-sync.worker] Scraped 50 posts 2026-11-14 23:00:01,808 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-14 23:00:01,808 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-14 23:00:01,862 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-14 23:00:01,913 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-14 23:00:01,913 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 00:00:00 UTC)" executed successfully 2026-11-15 00:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 01:00:00 UTC)" (scheduled at 2026-11-15 00:00:00+00:00) 2026-11-15 00:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-15 00:00:00,070 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 00:00:02,723 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 00:00:02,726 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 00:00:02,729 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 00:00:02,732 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 00:00:02,808 INFO [fb-sync] Sync done: 0 new posts in 3s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 00:00:02,884 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 00:00:02,884 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 01:00:00 UTC)" executed successfully 2026-11-15 01:00:00,006 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 02:00:00 UTC)" (scheduled at 2026-11-15 01:00:00+00:00) 2026-11-15 01:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-15 01:00:00,072 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 01:00:01,134 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 01:00:01,136 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 01:00:01,138 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 01:00:01,139 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 01:00:01,197 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 01:00:01,256 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 01:00:01,256 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 02:00:00 UTC)" executed successfully 2026-11-15 02:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 03:00:00 UTC)" (scheduled at 2026-11-15 02:00:00+00:00) 2026-11-15 02:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-15 02:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 02:00:00,993 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 02:00:00,995 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 02:00:00,998 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 02:00:00,998 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 02:00:01,047 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 02:00:01,093 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 02:00:01,094 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 03:00:00 UTC)" executed successfully 2026-11-15 03:00:00,008 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 04:00:00 UTC)" (scheduled at 2026-11-15 03:00:00+00:00) 2026-11-15 03:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-15 03:00:00,067 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 03:00:01,004 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 03:00:01,006 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 03:00:01,009 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 03:00:01,009 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 03:00:01,064 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 03:00:01,111 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 03:00:01,111 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 04:00:00 UTC)" executed successfully 2026-11-15 04:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 05:00:00 UTC)" (scheduled at 2026-11-15 04:00:00+00:00) 2026-11-15 04:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-15 04:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 04:00:00,894 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 04:00:00,896 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 04:00:00,898 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 04:00:00,898 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 04:00:00,941 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 04:00:00,985 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 04:00:00,985 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 05:00:00 UTC)" executed successfully 2026-11-15 05:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 06:00:00 UTC)" (scheduled at 2026-11-15 05:00:00+00:00) 2026-11-15 05:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-15 05:00:00,078 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 05:00:01,181 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 05:00:01,183 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 05:00:01,185 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 05:00:01,185 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 05:00:01,235 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 05:00:01,278 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 05:00:01,278 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 06:00:00 UTC)" executed successfully 2026-11-15 06:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 07:00:00 UTC)" (scheduled at 2026-11-15 06:00:00+00:00) 2026-11-15 06:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-15 06:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 06:00:00,967 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 06:00:00,968 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 06:00:00,971 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 06:00:00,971 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 06:00:01,012 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 06:00:01,053 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 06:00:01,054 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 07:00:00 UTC)" executed successfully 2026-11-15 07:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 08:00:00 UTC)" (scheduled at 2026-11-15 07:00:00+00:00) 2026-11-15 07:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-15 07:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 07:00:01,558 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 07:00:01,560 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 07:00:01,564 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 07:00:01,564 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 07:00:01,633 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 07:00:01,705 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 07:00:01,706 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 08:00:00 UTC)" executed successfully 2026-11-15 08:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 09:00:00 UTC)" (scheduled at 2026-11-15 08:00:00+00:00) 2026-11-15 08:00:00,013 INFO [fb-sync] Starting FB sync... 2026-11-15 08:00:00,077 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 08:00:01,317 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 08:00:01,319 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 08:00:01,322 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 08:00:01,322 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 08:00:01,389 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 08:00:01,458 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 08:00:01,459 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 09:00:00 UTC)" executed successfully 2026-11-15 09:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 10:00:00 UTC)" (scheduled at 2026-11-15 09:00:00+00:00) 2026-11-15 09:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-15 09:00:00,076 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 09:00:01,490 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 09:00:01,492 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 09:00:01,494 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 09:00:01,494 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 09:00:01,545 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 09:00:01,612 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 09:00:01,613 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 10:00:00 UTC)" executed successfully 2026-11-15 10:00:00,009 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 11:00:00 UTC)" (scheduled at 2026-11-15 10:00:00+00:00) 2026-11-15 10:00:00,012 INFO [fb-sync] Starting FB sync... 2026-11-15 10:00:00,075 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 10:00:01,213 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 10:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 10:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 10:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 10:00:01,261 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 10:00:01,302 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 10:00:01,303 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 11:00:00 UTC)" executed successfully 2026-11-15 11:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 12:00:00 UTC)" (scheduled at 2026-11-15 11:00:00+00:00) 2026-11-15 11:00:00,009 INFO [fb-sync] Starting FB sync... 2026-11-15 11:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 11:00:01,109 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 11:00:01,110 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 11:00:01,113 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 11:00:01,113 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 11:00:01,170 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 11:00:01,226 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 11:00:01,226 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 12:00:00 UTC)" executed successfully 2026-11-15 12:00:00,005 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 13:00:00 UTC)" (scheduled at 2026-11-15 12:00:00+00:00) 2026-11-15 12:00:00,008 INFO [fb-sync] Starting FB sync... 2026-11-15 12:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 12:00:01,204 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 12:00:01,206 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 12:00:01,209 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 12:00:01,210 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 12:00:01,255 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 12:00:01,299 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 12:00:01,299 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 13:00:00 UTC)" executed successfully 2026-11-15 13:00:00,014 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 14:00:00 UTC)" (scheduled at 2026-11-15 13:00:00+00:00) 2026-11-15 13:00:00,018 INFO [fb-sync] Starting FB sync... 2026-11-15 13:00:00,082 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 13:00:01,225 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 13:00:01,227 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 13:00:01,230 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 13:00:01,230 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 13:00:01,280 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 13:00:01,327 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 13:00:01,327 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 14:00:00 UTC)" executed successfully 2026-11-15 14:00:00,004 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 15:00:00 UTC)" (scheduled at 2026-11-15 14:00:00+00:00) 2026-11-15 14:00:00,007 INFO [fb-sync] Starting FB sync... 2026-11-15 14:00:00,074 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 14:00:01,787 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 14:00:01,789 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 14:00:01,792 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 14:00:01,792 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 14:00:01,857 INFO [fb-sync] Sync done: 0 new posts in 2s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 14:00:01,925 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 14:00:01,925 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 15:00:00 UTC)" executed successfully 2026-11-15 15:00:00,007 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 16:00:00 UTC)" (scheduled at 2026-11-15 15:00:00+00:00) 2026-11-15 15:00:00,011 INFO [fb-sync] Starting FB sync... 2026-11-15 15:00:00,071 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 15:00:01,212 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 15:00:01,215 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 15:00:01,218 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 15:00:01,219 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 15:00:01,266 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 15:00:01,319 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 15:00:01,320 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 16:00:00 UTC)" executed successfully 2026-11-15 16:00:00,011 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 17:00:00 UTC)" (scheduled at 2026-11-15 16:00:00+00:00) 2026-11-15 16:00:00,016 INFO [fb-sync] Starting FB sync... 2026-11-15 16:00:00,094 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 16:00:01,118 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 16:00:01,120 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 16:00:01,122 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 16:00:01,122 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 16:00:01,164 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 16:00:01,205 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 16:00:01,206 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 17:00:00 UTC)" executed successfully 2026-11-15 17:00:00,010 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 18:00:00 UTC)" (scheduled at 2026-11-15 17:00:00+00:00) 2026-11-15 17:00:00,014 INFO [fb-sync] Starting FB sync... 2026-11-15 17:00:00,084 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 17:00:01,356 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 17:00:01,358 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 17:00:01,361 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 17:00:01,361 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 17:00:01,424 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 17:00:01,491 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 17:00:01,492 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 18:00:00 UTC)" executed successfully 2026-11-15 18:00:00,003 INFO [apscheduler.executors.default] Running job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 19:00:00 UTC)" (scheduled at 2026-11-15 18:00:00+00:00) 2026-11-15 18:00:00,004 INFO [fb-sync] Starting FB sync... 2026-11-15 18:00:00,063 INFO [fb-sync.worker] Fetching posts via Graph API... 2026-11-15 18:00:01,060 INFO [fb-sync.worker] Graph API returned 50 posts 2026-11-15 18:00:01,062 INFO [fb-sync.worker] Scraped 50 posts 2026-11-15 18:00:01,064 INFO [fb-sync.worker] New articles: 1 | skips: {'duplicate_exact': 49} 2026-11-15 18:00:01,064 INFO [fb-sync.worker] Skip empty body: Chart of the Day 2026-11-15 18:00:01,101 INFO [fb-sync] Sync done: 0 new posts in 1s (source=graph_api, scraped=50, skips={'duplicate_exact': 49, 'empty_body': 1}) 2026-11-15 18:00:01,144 INFO [fb-sync.journal] Retention: dropped 2 record(s) older than 30d 2026-11-15 18:00:01,144 INFO [apscheduler.executors.default] Job "sync_job (trigger: cron[hour='*/1', minute='0'], next run at: 2026-11-15 19:00:00 UTC)" executed successfully