diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b1c913..f34dbd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **Celery schedule:** Added `discord` group to `config/boost_collector_schedule.yaml` (`run_discord_activity_tracker` daily at 16:40 UTC). - **core.collectors:** Removed deprecated `CollectorBase` and `DjangoCommandCollector`; the supported collector contract is **`AbstractCollector`** + **`BaseCollectorCommand`** (see docs). - Resolved five cross-app import tech-debt edges: Pinecone via `cppa_pinecone_sync.sync_api`, dashboard model shim removed, CSV owner lookup via `cppa_user_tracker.services`, clang imports via `github_activity_tracker.sync_api`. - Added **import-linter** contracts and pre-commit hook to prevent regressions. diff --git a/config/boost_collector_schedule.yaml b/config/boost_collector_schedule.yaml index fffee99..e23d361 100644 --- a/config/boost_collector_schedule.yaml +++ b/config/boost_collector_schedule.yaml @@ -43,6 +43,12 @@ groups: - command: run_cppa_slack_tracker schedule: daily + discord: + default_time: "16:40" + tasks: + - command: run_discord_activity_tracker + schedule: daily + mailing_list: default_time: "00:10" tasks: diff --git a/config/tests/test_health.py b/config/tests/test_health.py index f2f545e..583a252 100644 --- a/config/tests/test_health.py +++ b/config/tests/test_health.py @@ -13,6 +13,7 @@ _check_collector_groups, _check_database, _check_pinecone_sync, + _groups_with_daily_schedule, run_health_checks, ) @@ -27,7 +28,7 @@ def api_client(): @override_settings(HEALTH_COLLECTOR_STALE_HOURS=26) def test_health_view_healthy_when_db_and_celery_ok(api_client): now = timezone.now() - for gid in ("github", "slack", "mailing_list", "boost_library_docs"): + for gid in _groups_with_daily_schedule(): collector_services.record_group_success(gid, when=now) with patch("config.health._check_celery_workers") as mock_celery: mock_celery.return_value = { diff --git a/docs/GCP_Production_Checklist.md b/docs/GCP_Production_Checklist.md index 9412537..018ab77 100644 --- a/docs/GCP_Production_Checklist.md +++ b/docs/GCP_Production_Checklist.md @@ -41,9 +41,9 @@ Mirror [`.env.example`](../.env.example) groups; inject via Secret Manager → e ## Collectors in Beat schedule -Configured in [`config/boost_collector_schedule.yaml`](../config/boost_collector_schedule.yaml): `github`, `boost_library_docs`, `slack`, `mailing_list`. +Configured in [`config/boost_collector_schedule.yaml`](../config/boost_collector_schedule.yaml): `github`, `boost_library_docs`, `slack`, `discord`, `mailing_list`. -**Not** on Beat yet (manual / future): Discord, WG21, YouTube, Clang — `/health/` shows `last_success_at: null` until scheduled or `record_group_success` is updated. +**Not** on Beat yet (manual / future): WG21, YouTube, Clang — `/health/` shows `last_success_at: null` until scheduled or `record_group_success` is updated. ## Services layout diff --git a/requirements-dev.lock b/requirements-dev.lock index 2c59ebf..1d507bf 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -198,8 +198,9 @@ pygments==2.20.0 # via # pytest # rich -pyjwt==2.12.1 +pyjwt==2.13.0 # via + # -r requirements.in # pygithub # redis pynacl==1.6.2 diff --git a/requirements.in b/requirements.in index 4c8c26e..b9b526f 100644 --- a/requirements.in +++ b/requirements.in @@ -13,6 +13,8 @@ requests>=2.31,<3 urllib3>=2.0,<3 # CVE-2026-45409: ensure patched idna (transitive via requests, etc.). idna>=3.15,<4 +# PYSEC-2026-175..179: ensure patched PyJWT (transitive via PyGithub, redis). +PyJWT>=2.13.0,<3 discord.py>=2.3.0,<3 python-dateutil>=2.8.0,<3 celery[redis]>=5.3,<6 diff --git a/requirements.lock b/requirements.lock index 488b9a6..219d5a3 100644 --- a/requirements.lock +++ b/requirements.lock @@ -137,8 +137,9 @@ pydantic-core==2.46.4 # via pydantic pygithub==2.9.1 # via -r requirements.in -pyjwt==2.12.1 +pyjwt==2.13.0 # via + # -r requirements.in # pygithub # redis pynacl==1.6.2