Class: Codepulse::MetricsCalculator
- Inherits:
-
Object
- Object
- Codepulse::MetricsCalculator
- Includes:
- TimeHelpers
- Defined in:
- lib/codepulse/metrics_calculator.rb
Overview
Calculates pickup time, merge time, and size metrics for pull requests.
Constant Summary collapse
- IGNORED_ACTORS =
Bot accounts to ignore when calculating pickup time.
[ # GitHub Copilot "copilot-pull-request-reviewer", "copilot-pull-request-reviewer[bot]", "copilot", "copilot[bot]", "copilot-bot", "github-copilot", "github-copilot[bot]", # GitHub Actions "github-actions", "github-actions[bot]", # AI Coding Assistants "cursor[bot]", "cursor-bot", "codex[bot]", "openai-codex", "coderabbitai[bot]", "coderabbit", "sourcery-ai[bot]", "sourcery[bot]", "codeium[bot]", "tabnine[bot]", "sweep[bot]", "sweepai[bot]", "qodo-merge-pro[bot]", "codiumai[bot]", "amazon-q[bot]", "codewhisperer[bot]", "aider[bot]", "devin[bot]", "devin-ai[bot]", # Dependency Management "dependabot[bot]", "dependabot", "renovate[bot]", "renovate", # Security & Code Quality "snyk-bot", "snyk[bot]", "sonarcloud[bot]", "sonarqube[bot]", "codecov[bot]", "codecov", "coveralls[bot]", "deepsource-autofix[bot]", "deepsource[bot]", "codefactor[bot]", "lgtm-com[bot]", # Deployment & Merge Bots "vercel[bot]", "netlify[bot]", "mergify[bot]", "kodiakhq[bot]", "imgbot[bot]", "allstar[bot]" ].freeze
Constants included from TimeHelpers
Instance Method Summary collapse
-
#initialize ⇒ MetricsCalculator
constructor
A new instance of MetricsCalculator.
-
#metrics_for_pull_request(pull_request) ⇒ Object
Returns a hash of metrics for a single PR.
Methods included from TimeHelpers
#build_us_holidays, #business_day?, #business_days_cutoff, #business_seconds_between, #date_key, #end_of_day, #last_weekday, #nth_weekday, #parse_time, #start_of_day, #us_holiday?, #us_holidays, #weekday?
Constructor Details
#initialize ⇒ MetricsCalculator
Returns a new instance of MetricsCalculator.
72 73 74 |
# File 'lib/codepulse/metrics_calculator.rb', line 72 def initialize # No client needed - data is pre-fetched via GraphQL end |
Instance Method Details
#metrics_for_pull_request(pull_request) ⇒ Object
Returns a hash of metrics for a single PR. Expects pull_request to include :reviews, :review_comments, :issue_comments from GraphQL.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/codepulse/metrics_calculator.rb', line 78 def metrics_for_pull_request(pull_request) created_at = parse_time(pull_request["created_at"]) merged_at = parse_time(pull_request["merged_at"]) pickup_event = find_pickup_event(pull_request, created_at) pickup_seconds = pickup_event ? business_seconds_between(created_at, pickup_event.fetch(:timestamp)) : nil merge_seconds = merged_at && created_at ? business_seconds_between(created_at, merged_at) : nil { number: pull_request["number"], title: pull_request["title"], author: pull_request.dig("user", "login"), created_at: created_at, merged_at: merged_at, additions: pull_request["additions"].to_i, deletions: pull_request["deletions"].to_i, changed_files: pull_request["changed_files"].to_i, pickup_time_seconds: pickup_seconds, merge_time_seconds: merge_seconds, pickup_actor: pickup_event&.fetch(:actor, nil), pickup_at: pickup_event&.fetch(:timestamp, nil), pickup_source: pickup_event&.fetch(:source, nil) } end |