Chuyển tới nội dung chính

📌 API Detail Design Document

1. API Information

  • API Name: Collect all data git by config schedule
  • Module/Service: amdp-ags-dashboard-backend
  • Author: Reus
  • Created Date: 2025/08/18
  • Last Updated: 2025/08/18

2. Overview

  • Purpose: API collect all data git by config in devops_metric_config
  • Description: Collect all data git

3. Endpoint Specification

  • Method: GET
  • URL: dashboard/collect/git/schedule
  • Headers:
    • Authorization: Bearer <token user>
    • Content-Type: application/json

Query Params

NameTypeRequiredDescriptionExample

Path Params

NameTypeRequiredDescriptionExample

Request Body


4. Response Specification

Success Response (200/201)

{"code": 200,"message": "Success"}

Error Response (400/401/404/500)

{"code": 400,"message": "Bad Request"}

5. Sequence / Flow (Source)

@startuml
actor Client
participant "Dashboard Service" as DS
queue "Request Queue" as Q
participant "Scheduler (5s)" as Sch
database "MongoDB\nstatusManagerCollection" as StatusDB
participant "Worker Pool (max=5)" as Worker
participant "SonarQube API" as Sonar
database "MongoDB\nsonarMeasureComponentCollection" as SonarDB


'--- Client gửi request ---
Client -> DS: POST /collectSonarData\n{projectKey, metrics, collectFrom, collectTo, ...}
activate DS
DS -> Q: Push collect request
DS -> StatusDB: Insert status = "waiting for sync"
DS --> Client: 200 OK\n{ "message": "Request queued" }
deactivate DS


'--- Scheduler quét queue ---
Sch -> Q: Poll request (FIFO)
Q --> Sch: Request (if available)


alt If request found
Sch -> Worker: Dispatch request (max 5 parallel)
activate Worker
Worker -> StatusDB: Update status = "in sync"
Worker -> Sonar: Fetch measure component data\\n(using token, projectKey, metrics)
activate Sonar
Sonar --> Worker: Measure component data (JSON)
deactivate Sonar
Worker -> SonarDB: Insert measure component data
Worker -> StatusDB: Update status = "success"
deactivate Worker

else No request
Sch -> Sch: Wait 5s
end


'--- Error handling ---
Worker -> StatusDB: Update status = "failed" (on error)

@enduml
@startuml
actor Client
participant "Dashboard Service" as DS
database "MariaDB\ndevop_metric_config" as ConfigDB
queue "Request Queue" as Q
database "MongoDB\nstatusManagerCollection" as StatusDB
participant "Scheduler (5s)" as Sch
participant "Worker Pool (max=5)" as Worker
participant "Git Provider (GitHub)" as Git
database "MongoDB\ngitCommitCollection" as CommitDB
database "MongoDB\ngitPullRequestCollection" as PRDB
database "MongoDB\ngitBranchCollection" as BranchDB


'--- Client call API collectAllDataGit ---
Client -> DS: POST /collectAllDataGit
activate DS
DS -> ConfigDB: SELECT * FROM devop_metric_config
ConfigDB --> DS: Project configs + schedules


DS -> DS: Check schedule for each project
alt If project is due
DS -> Q: Push collect request
DS -> StatusDB: Insert status = "waiting for sync"
end
DS --> Client: 200 OK\n{ "message": "Scheduled projects queued" }
deactivate DS


'--- Scheduler quét queue ---
Sch -> Q: Poll request (FIFO)
Q --> Sch: Request (if available)


alt If request found
Sch -> Worker: Dispatch request (max 5 parallel)
activate Worker
Worker -> StatusDB: Update status = "in sync"
Worker -> Git: Fetch branch/commit/PR data
activate Git
Git --> Worker: JSON data
deactivate Git
Worker -> CommitDB: Insert commit data
Worker -> PRDB: Insert pull request data
Worker -> BranchDB: Insert branch data
Worker -> StatusDB: Update status = "success"
deactivate Worker

else No request
Sch -> Sch: Wait 5s
end


'--- Error handling ---
Worker -> StatusDB: Update status = "failed" (on error)

@enduml

6. Sequence / Flow (Image)


7. Dependencies

  • DB tables:

  • MariaDB: devops_metric_config

    • MongoDB: gitCommitCollection, gitPullRequestCollection, gitBranchCollection, statusManagerCollecton
  • External service call:

  • Message broker/topic:


8. Security & Performance Considerations

  • Authentication & Authorization
  • Rate limit / Throttling
  • Caching
  • Timeout & Retry logic

9. Test Cases (basic)

CaseInputExpected OutputNotes
Valid request{...}200 + data
Missing param{}400 error
Unauthorized401 error

10. Change History

VersionDateAuthorChange