Imports v2.5#1065
Conversation
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
# Conflicts: # app/controllers/my/heartbeat_imports_controller.rb # app/javascript/pages/Users/Settings/Data.svelte # app/javascript/pages/Users/Settings/Shell.svelte # app/javascript/pages/Users/Settings/types.ts # app/jobs/heartbeat_import_dump_job.rb # app/models/heartbeat_import_run.rb # app/services/heartbeat_import_dump_client.rb # app/services/heartbeat_import_runner.rb # config/routes.rb # test/controllers/my/heartbeat_imports_controller_test.rb # test/jobs/heartbeat_import_dump_job_test.rb # test/models/heartbeat_import_run_test.rb # test/services/heartbeat_import_dump_client_test.rb
Greptile SummaryThis PR is a substantial v2.5 overhaul of the heartbeat import pipeline, adding a WakaTime manual-download-link flow (for when WakaTime's 7-day export limit is hit), email notifications on completion/failure, streaming gzip decompression, a DB-level unique active-import constraint, and a reduced 8-minute remote cooldown. On the frontend, the Data settings page's state management is simplified to a single Key changes:
Confidence Score: 3/5
Important Files Changed
Sequence DiagramsequenceDiagram
actor User
participant Controller as HeartbeatImportsController
participant Runner as HeartbeatImportRunner
participant DumpJob as HeartbeatImportDumpJob
participant DownloadJob as HeartbeatImportRemoteDownloadJob
participant ImportJob as HeartbeatImportJob
participant Mailer as HeartbeatImportMailer
participant Client as HeartbeatImportDumpClient
User->>Controller: POST /my/heartbeat_imports (api_key flow)
Controller->>Runner: start_remote_import(user, provider, api_key)
Runner->>Runner: ensure_no_active_import! (DB unique index)
Runner-->>DumpJob: perform_later(run.id)
DumpJob->>Client: request_dump
alt WakaTime 7-day limit hit
Client-->>DumpJob: ManualDownloadLinkRequiredError
DumpJob->>Mailer: wakatime_manual_download_required
Mailer-->>User: Email with manual link URL
User->>Controller: GET /my/heartbeat_imports/wakatime_download_link
Controller-->>User: WakatimeDownloadLink page
User->>Controller: POST /my/heartbeat_imports (download_url)
Controller->>Runner: start_wakatime_download_link_import(user, download_url)
Runner-->>DownloadJob: perform_later(run.id, download_url)
else Dump requested successfully
DumpJob->>DumpJob: schedule_poll (every 3s, max 30min)
DumpJob->>Client: list_dumps
Client-->>DumpJob: dump ready
DumpJob->>Runner: queue_remote_download(run, download_url)
Runner-->>DownloadJob: perform_later(run.id, download_url)
end
DownloadJob->>Client: download_dump(url)
Client-->>DownloadJob: file_content (gzip or JSON)
DownloadJob-->>ImportJob: perform_later(run.id, file_path)
ImportJob->>Runner: run_import (streaming decompression)
Runner-->>Mailer: import_completed / import_failed
Mailer-->>User: Email notification
|
|
@greptileai review? and pay close attention to the overall job flow/architecture. |
|
@greptileai review? and pay close attention to the overall job flow/architecture. |
No description provided.