Skip to content

Fix stale latest date displayed in Project Health Dashboard metrics#3842

Merged
arkid15r merged 5 commits intoOWASP:mainfrom
anurag2787:fix-project-health-latest-date
Feb 8, 2026
Merged

Fix stale latest date displayed in Project Health Dashboard metrics#3842
arkid15r merged 5 commits intoOWASP:mainfrom
anurag2787:fix-project-health-latest-date

Conversation

@anurag2787
Copy link
Contributor

@anurag2787 anurag2787 commented Feb 7, 2026

Proposed change

This PR fixes an issue where the Project Health Metrics dashboard was displaying outdated data

Resolves #3795

image

Checklist

  • Required: I followed the contributing workflow
  • Required: I verified that my code works as intended and resolves the issue as described
  • Required: I ran make check-test locally: all warnings addressed, tests passed
  • I used AI for code, documentation, tests, or communication related to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 7, 2026

Summary by CodeRabbit

  • Bug Fixes
    • Corrected the display order of health metrics charts to show data chronologically from oldest to newest, improving clarity when tracking project health over time.

Walkthrough

Backend query now returns the most-recent-first health metrics (descending by nest_created_at); frontend components reverse that list in-memory so charts and detail views iterate chronologically (oldest → newest) when rendering.

Changes

Cohort / File(s) Summary
Backend: Project node
backend/apps/owasp/api/internal/nodes/project.py
Changed health_metrics_list to select metrics ordered by -nest_created_at (most recent first); health_metrics_latest still returns the single most recent metric.
Frontend: Project metrics page
frontend/src/app/projects/dashboard/metrics/[projectKey]/page.tsx
Sets healthMetricsList to a reversed copy of the incoming list so downstream code receives chronological (oldest→newest) ordering.
Frontend: Health metrics component
frontend/src/components/HealthMetrics.tsx
Reverses the metrics array to chronological order and updates all derived chart series, labels, and index-based accesses to use the reversed array for chart rendering and calculations.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • kasya
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change—fixing stale/outdated latest dates in the Project Health Dashboard metrics display.
Description check ✅ Passed The description is related to the changeset, mentioning the issue being fixed (#3795) and the problem with outdated data display.
Linked Issues check ✅ Passed The PR successfully addresses issue #3795 by fixing the data ordering to display the most recent metrics in chronological order across backend and frontend components.
Out of Scope Changes check ✅ Passed All changes are scoped to fixing the stale data display issue—backend metric ordering and frontend chart rendering reflect the same objective.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

cubic-dev-ai[bot]
cubic-dev-ai bot previously approved these changes Feb 7, 2026
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 1 file

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
backend/apps/owasp/api/internal/nodes/project.py (1)

52-60: ⚠️ Potential issue | 🔴 Critical

Fix descending sort by reversing the slice to restore chronological order for trend analysis.

The change to descending order fixes which records are fetched (getting the newest instead of oldest), but now data[length - 1] in the frontend's HealthMetrics component points to the oldest metric, causing the "Days Since Last Commit/Release" chart to display stale values. Additionally, trend charts render in reverse chronological order.

Per documented learnings, health_metrics_list intentionally uses ascending order for chronological trend display, differing from health_metrics_latest which uses descending. Restore this pattern by reversing the slice:

Proposed fix
-        return root.health_metrics.order_by("-nest_created_at")[:normalized_limit]
+        return list(
+            root.health_metrics.order_by("-nest_created_at")[:normalized_limit]
+        )[::-1]

coderabbitai[bot]
coderabbitai bot previously approved these changes Feb 7, 2026
@anurag2787 anurag2787 marked this pull request as ready for review February 7, 2026 20:55
@anurag2787
Copy link
Contributor Author

Hi @kasya the pr is ready for review please review it and let me know if any changes are required.

Copy link
Collaborator

@arkid15r arkid15r left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This fix looks too depressing, please revert. All my efforts make our metrics just going down 🥹

@arkid15r
Copy link
Collaborator

arkid15r commented Feb 7, 2026

Seriously -- you're getting closer, but the timeline looks reversed.

@anurag2787 anurag2787 marked this pull request as draft February 7, 2026 21:17
@anurag2787 anurag2787 marked this pull request as ready for review February 7, 2026 22:27
coderabbitai[bot]
coderabbitai bot previously approved these changes Feb 7, 2026
@anurag2787
Copy link
Contributor Author

anurag2787 commented Feb 7, 2026

This fix looks too depressing, please revert. All my efforts make our metrics just going down 🥹

Sorry for that 😅

@anurag2787 anurag2787 requested a review from arkid15r February 7, 2026 22:32
@anurag2787
Copy link
Contributor Author

@arkid15r I am little confused whether the ordering fix should be handled in the frontend or the backend but for now i have applied the reversal in the frontend. If you’d prefer this to be implemented in the backend instead i will update accordingly
Thanks

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@backend/apps/owasp/api/internal/nodes/project.py`:
- Line 64: The current return uses reversed() on a sliced QuerySet which raises
TypeError; materialize the queryset slice to a list first and then reverse it.
Replace the expression using
reversed(root.health_metrics.order_by("-nest_created_at")[:normalized_limit])
with a two-step approach: evaluate the queryset slice into a Python list (e.g.,
via list(...)) and then reverse that list (e.g., list_result[::-1] or
list(reversed(list_result))). Update the return in project.py (the function
returning the health metrics) to use the materialized list reversal.

@github-actions github-actions bot removed the frontend label Feb 8, 2026
@sonarqubecloud
Copy link

sonarqubecloud bot commented Feb 8, 2026

@arkid15r arkid15r enabled auto-merge February 8, 2026 00:49
Copy link
Collaborator

@arkid15r arkid15r left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@arkid15r I am little confused whether the ordering fix should be handled in the frontend or the backend but for now i have applied the reversal in the frontend. If you’d prefer this to be implemented in the backend instead i will update accordingly Thanks

When you have 2 solutions that both fix an issue -- always pick the simplest one.

Thanks for the fix 👍

@codecov
Copy link

codecov bot commented Feb 8, 2026

Codecov Report

❌ Patch coverage is 0% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 90.24%. Comparing base (1d0ed82) to head (8486a28).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
backend/apps/owasp/api/internal/nodes/project.py 0.00% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main    #3842   +/-   ##
=======================================
  Coverage   90.24%   90.24%           
=======================================
  Files         463      463           
  Lines       14416    14416           
  Branches     1939     1939           
=======================================
  Hits        13009    13009           
  Misses        988      988           
  Partials      419      419           
Flag Coverage Δ
backend 90.97% <0.00%> (ø)
frontend 88.17% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
backend/apps/owasp/api/internal/nodes/project.py 74.19% <0.00%> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1d0ed82...8486a28. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@arkid15r arkid15r added this pull request to the merge queue Feb 8, 2026
Merged via the queue into OWASP:main with commit 7161f88 Feb 8, 2026
34 of 36 checks passed
arkid15r added a commit that referenced this pull request Feb 10, 2026
* Run make update

* Clean up snapshot generated videos

* Update backend/data/nest.dump

* feat(ui): revamp corporate supporters carousel (Infinite Marquee + Dark Mode fix) (#3837)

* feat(ui): revamp corporate supporters carousel (Infinite Marquee + Dark Mode fix)

* fix: resolve failing test case

* fix: add fallback text for unnamed sponsors

* docs: add docstrings to satisfy coverage requirements

* Run make check and fix tests.

---------

Co-authored-by: Kate <kate@kgthreads.com>

* Fix/redundant typescript assertion (#3834)

* Fix Sonar S4325 by narrowing session user fields instead of casting

* Fix unused ExtendedSession in mentorship page

* fix: redundant-typescript-assertion

* Fix stale latest date displayed in Project Health Dashboard metrics (#3842)

* Fixed latest date in proejct health dashboard

* updated order

* Update code

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>

* feat: improve backend test coverage to 96% (#3840)

* feat: improve backend test coverage to 96%

* fix comments

* fix issues

* fix issue

* fix cubic-dev-ai comments

* Update code

* Fix tests

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Fix: merge consecutive RUN instructions in frontend Dockerfile (#3644)

* Fix: merge consecutive RUN instructions in frontend Dockerfile

* fix: comment Dockerfile note to prevent syntax error

* Update code

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Fix 'is_merged' not being available on the Issue (#3843)

* Fix 'is_merged' not being available on the Issue

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>

* CI:  Add ansible-lint workflow for Ansible playbooks (#3796)

* ci: add ansible-lint workflow

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* Update .github/workflows/lint-ansible.yaml

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* ci: add ansible-lint make target and workflow

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* ci: add ansible-lint pre-commit hook

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* fix: whitespace & version

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* Update Makefile

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* ci: enable ansible-lint scanning and add requirements.yml

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* chore(ansible):align linting and module usage

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* ci(ansible): install collections before deploy playbooks

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* Update code

* Update code

* Update .github/workflows/run-ci-cd.yaml

---------

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>

* Fix ElevenLabs API error (#3861)

* use default liam voice

* bump speed by 0.10

---------

Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Add Ime Iyonsi to MENTORS.md (#3866)

* Add mentor profile for Ime Iyonsi

Added Ime Iyonsi's mentor profile.

* Fix GitHub link for Ime Iyonsi

Corrected GitHub link for Ime Iyonsi.

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>

* Update MENTORS.md

* Enabled Strict Mode (#3776)

* Enabled Strict Mode

* fixed ai review

* fix

* fixed review

* fix

* update test

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Resolve case-sensitivity in QueryParser to support Chapters/Members search (#3844)

* resolve query parser blocker

* use case_sensitive flag in QueryParser

* feat: add case_sensitive option to QueryParser and update tests

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Update dependencies (#3874)

* Update dependencies

* Bump django-ninja version

* fix(proxy): pin nginx and certbot images (#3848)

* fix(proxy): pin nginx and certbot images

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

* fix stable verssions

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>

---------

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* Update docker-compose/proxy/compose.yaml

* Update backend/pyproject.toml

* Update ansible lint configuration (#3880)

* Update .github/ansible/.ansible-lint.yaml

* Improve frontend test coverage above 80% and add missing test files (#3864)

* Imrove test coverage to 80% and added test

* Fixed coderabbit review

* update code

* fixed coderabbit ai

* fixed soanrqube warning

* fixed review

* update

* fixed aloglia cache_key (#3825)

* fixed aloglia cache_key

* change separator val to be semicolon (;)

* Update code

* add tests + use json filters

* add trailing newline

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

* fix: remove unused className prop from AnchorTitle component (#3822)

* fix: remove unused className prop from AnchorTitle component

Fixes #3805

The className prop was defined in AnchorTitleProps but never used
in the component implementation. Removing it resolves Sonar rule
typescript:S6767 and improves code maintainability.

* fix: use className prop instead of removing it

- Added className back to AnchorTitleProps interface
- Accept className parameter in component
- Apply className to root div element
- Resolves reviewer feedback on PR #3822

* Update code

---------

Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>

---------

Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
Co-authored-by: Arkadii Yakovets <arkadii.yakovets@owasp.org>
Co-authored-by: Yashraj Pahuja <yashrajpahuja9999@gmail.com>
Co-authored-by: Kate <kate@kgthreads.com>
Co-authored-by: CodeAritraDhank <aritradhank21@gmail.com>
Co-authored-by: Anurag Yadav <143180737+anurag2787@users.noreply.github.com>
Co-authored-by: Harshit Verma <harshit1092004@gmail.com>
Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>
Co-authored-by: Shuban Mutagi <shubanmutagi55@gmail.com>
Co-authored-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: emaybu <152900874+emaybu@users.noreply.github.com>
Co-authored-by: sai chethana <saichethanavesireddy@gmail.com>
Co-authored-by: Rahul Paul <179798584+Mr-Rahul-Paul@users.noreply.github.com>
Co-authored-by: Lavanya <lavanyayadawad30@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Project Health Dashboard latest date doesn't look right

2 participants