Skip to main content

tdm_server_rust/task/
rss_task.rs

1use crate::{
2    app::AppState,
3    service::rss_service::{self, RssService},
4    telemetry::skywalking,
5};
6
7/// 启动时一次性全量刷新 RSS(非轮询)
8pub fn spawn_startup_rss_refresh(state: AppState) {
9    tokio::spawn(async move {
10        skywalking::with_bootstrap_context("rss.startup_refresh", "rss", async {
11            if let Err(e) = RssService::run_startup_refresh(&state).await {
12                tracing::error!(error = ?e, "RSS 启动全量刷新失败");
13            } else {
14                tracing::info!("RSS 启动全量刷新完成");
15            }
16        })
17        .await;
18    });
19}
20
21/// 启动每日 12:00(上海时区)生成 rssMember.xml
22pub fn spawn_daily_reminder_rss(state: AppState) {
23    tokio::spawn(async move {
24        loop {
25            let wait = rss_service::duration_until_noon_shanghai();
26            tracing::debug!(?wait, "RSS reminder 等待下次 12:00");
27            tokio::time::sleep(wait).await;
28            skywalking::with_bootstrap_context("rss.daily_reminder", "rss", async {
29                if let Err(e) = RssService::rss_reminder(&state).await {
30                    tracing::error!(error = ?e, "RSS reminder 生成失败");
31                } else {
32                    tracing::info!("RSS reminder 生成完毕");
33                }
34            })
35            .await;
36        }
37    });
38}