How huocode-bot/huocode works
HuoCode is a Spring API and asynchronous worker that analyzes public GitHub repositories, returning file-level complexity/churn hotspot scores and cached reports. The principal path validates an analysis request, checks for a cached result, selects synchronous or queued work, retrieves repository content and history, measures and scores files, then stores and serves the report. The README documents the retrieval strategies, PMD complexity analysis, JGit churn analysis, S3 cache, and queue boundary; unsampled wiring is represented only where that documentation supports it.
Main entry points: RepoAggregator.java Repository aggregator · AnalysisJobService.java Job coordinator · RepoUrlAnalyzerService.java Analysis and cache · RepoAnalysisRequestedService.java Async job runner
Components 22
HTTP API
- Analysis endpoints
src/main/java/io/huocode/api/endpoint/rest/controller/AnalysisController.java - Report endpoints
src/main/java/io/huocode/api/endpoint/rest/controller/ReportController.java
Analysis workflow
- Job coordinator
src/main/java/io/huocode/api/service/AnalysisJobService.java - Analysis and cache
src/main/java/io/huocode/api/service/RepoUrlAnalyzerService.java - Event producer
src/main/java/io/huocode/api/endpoint/event/EventProducer.java - Queue handler
src/main/java/io/huocode/api/handler/MailboxEventHandler.java - Event dispatcher
src/main/java/io/huocode/api/endpoint/event/consumer/EventServiceInvoker.java - Async job runner
src/main/java/io/huocode/api/service/event/RepoAnalysisRequestedService.java
Repository analysis
- Repository aggregator
src/main/java/io/huocode/api/aggregation/RepoAggregator.java - Retrieval selector
src/main/java/io/huocode/api/retrieval/RetrievalStrategySelector.java - API retrieval
src/main/java/io/huocode/api/retrieval/ApiDirectRetriever.java - Clone retrieval
src/main/java/io/huocode/api/retrieval/CloneRetriever.java - Hotspot scoring
src/main/java/io/huocode/api/scoring/ScoreEngine.java
External adapters
- Java complexity
src/main/java/io/huocode/api/adapter/pmd/PmdAdapter.java - GitHub API adapter
src/main/java/io/huocode/api/adapter/github/HttpGitHubApiAdapter.java - JGit analysis
src/main/java/io/huocode/api/adapter/git/JGitScmAdapter.java
Jobs and reports
- Job store
src/main/java/io/huocode/api/adapter/s3/S3JobStore.java - Report cache
src/main/java/io/huocode/api/adapter/s3/S3ReportStore.java
Other components
- API client
- Event queue
- GitHub
- Amazon S3
Connections 27
- API client → Analysis endpoints: submits request
- Analysis endpoints → Job coordinator: submits or polls
- API client → Report endpoints: requests report
- Report endpoints → Analysis and cache: loads latest report
- Job coordinator → GitHub API adapter: gets commit and size
- Job coordinator → Analysis and cache: runs analysis
- Job coordinator → Job store: reads and registers jobs
- Job coordinator → Event producer: dispatches job event
- Event producer → Event queue: publishes event
- Event queue → Queue handler: delivers event
- Queue handler → Event dispatcher: dispatches event
- Event dispatcher → Async job runner: invokes handler
- Async job runner → Job store: reads and updates job
- Async job runner → Analysis and cache: runs analysis
- Analysis and cache → Report cache: checks and saves report
- Analysis and cache → Repository aggregator: analyzes repository
- Repository aggregator → Retrieval selector: selects retrieval
- Repository aggregator → API retrieval: retrieves via API
- Repository aggregator → Clone retrieval: retrieves via clone
- API retrieval → GitHub API adapter: fetches files and churn
- Clone retrieval → JGit analysis: reads repository history
- Repository aggregator → Java complexity: measures complexity
- Repository aggregator → Hotspot scoring: scores measurements
- GitHub API adapter → GitHub: calls GitHub API
- JGit analysis → GitHub: clones repository
- Job store → Amazon S3: persists jobs
- Report cache → Amazon S3: persists reports