• Stan Hu's avatar
    Merge branch '21170-cycle-analytics' into 'master' · 8ad412e0
    Stan Hu authored
    Cycle Analytics: first iteration
    
    ## What does this MR do?
    
    - Implement the first iteration of the "Cycle Analytics" feature.
    
    ## What are the relevant issue numbers?
    
    - Closes #21170 
    
    ## Screenshots
    
    ![cycle_analytics_screencast.gif](/uploads/d23c3c912caa6935fd47b53ca3a56b97/cycle_analytics.gif)
    
    ## Backend Tasks
    
    - [x]  Implementation
        - [x]  Phases
            - [x]  Issue (Tracker)
            - [x]  Plan (Board)
            - [x]  Code (IDE)
            - [x]  Test (CI)
            - [x]  Review (MR)
            - [x]  Staging (CD)
            - [x]  Production (Total)
        - [x]  Make heuristics more modular
        - [x]  Scope to project
        - [x]  Date range (30 days, 90 days)
        - [x]  Access restriction
    - [x]  Test
        - [x]  Find a better way to test these phases
        - [x]  Phases
            - [x]  Issue (Tracker)
            - [x]  Plan (Board)
            - [x]  Code (IDE)
            - [x]  Test (CI)
            - [x]  Review (MR)
            - [x]  Staging (CD)
            - [x]  Production (Total)
        - [x]  Test for "end case happens before start case"
        - [x]  Consolidate helper
    - [x]  Miniboss review
    - [x]  Performance testing with mock data
    - [x]  Improve performance
        - [x]  Pre-calculate "merge requests closing issues
        - [x]  Pre-calculate everything else
    - [x]  Test performance against 10k issues
    - [x]  Test all pre-calculation code
        - [x]  Ci::Pipeline -> build start/finish
        - [x]  Ci::Pipeline#merge_requests
        - [x]  Issue -> record default metrics after save
        - [x]  MergeRequest -> record default metrics after save
        - [x]  Deployment -> Update "first_deployed_to_production_at" for MR metrics
        - [x]  Git Push -> Update "first commit mention" for issue metrics
        - [x]  Merge request create/update/refresh -> Update "merge requests closing issues"
    - [x]  Remove `MergeRequestsClosingIssues` when necessary
    - [x]  Changes to unblock Fatih
        - [x]  Add summary data
        - [x]  `stats` should be array
        - [x]  Let `stats` be `null` if all `stats` are null
    - [x]  Indexes for "merge requests closing issues"
    - [x]  Test summary data
    - [x]  Scope everything to project
        - [x]  Find out why tests were passing
    - [x]  Filter should include issues/MRs which have made it to production within the range
    - [x]  Don't create duplicate `MergeRequestsClosingIssues`
    - [x]  Fix tests
    - [x]  MySQL median
    - [x]  Assign to Douwe for review
    - [x]  Fix conflicts
    - [x]  Implement suggestions from Yorick's review
        - [x]  Test on PG
        - [x]  Test on MySQL
    - [x]  Refactor
        - [x]  Cleanup
            - [x]  What happens if we have no data at all?
            - [x]  Extract common queries to methods / scopes
        - [x]  Remove unused queries
        - [x]  Downtime for foreign key migrations
        - [x]  Find a way around "if issue.metrics.present?" all over the place
        - [x]  Find a way around "if merge_request.metrics.present?" all over the place
        - [x]  Test migrations on a fresh database
            - [x]  MySQL
            - [x]  Pg
    - [x]  Access issues
        - While the project is public and the visibility is set to "Everyone with access", you cannot visit the cycle analytics page when signed out.
    - [x]  CHANGELOG
    - [x]  Implement suggestions from Douwe's review
        - [x]  First set of comments
        - [x]  Second set of comments
        - [x]  Third set of comments
        - [x]  Fourth set of comments
    - [x]  Make sure build is green
    - [ ]  Make issue for "polish"
    - [ ]  EE MR
    
    
    See merge request !5986
    8ad412e0
metrics_spec.rb 2.13 KB