Data Flow
This page describes the data flows for common operations.
Search Request
Section titled “Search Request”When a user searches for code:
┌──────┐ ┌─────────┐ ┌────────┐ ┌───────┐│ User │───▶│ Web UI │───▶│ API │───▶│ Zoekt ││ │ │ │ │ Server │ │ │└──────┘ └─────────┘ └────────┘ └───────┘ │ ┌──────────────────────────────────────────┘ │ ▼┌───────┐ ┌─────────┐ ┌──────┐│ Zoekt │───▶│ API │───▶│ User ││ │ │ Server │ │ │└───────┘ └─────────┘ └──────┘Step by Step
Section titled “Step by Step”- User Input: User enters query in Web UI
- API Request: Web UI sends
GET /api/search?q=... - Query Parsing: API parses query and filters
- Zoekt Search: API forwards to Zoekt
- Index Lookup: Zoekt searches trigram index
- Results: Matching files and lines returned
- Formatting: API formats response
- Display: Web UI renders results
Timing
Section titled “Timing”| Step | Typical Time |
|---|---|
| API parsing | <1ms |
| Zoekt search | 5-50ms |
| Result formatting | <5ms |
| Total | 10-60ms |
Repository Sync
Section titled “Repository Sync”When a connection syncs repositories:
┌───────────┐ ┌──────────┐ ┌───────────┐│ Scheduler │───▶│ Queue │───▶│ Worker ││ │ │ (Redis) │ │ │└───────────┘ └──────────┘ └───────────┘ │ ▼ ┌───────────┐ │ Code Host │ │ (API) │ └───────────┘ │ ┌──────────────────────────────────┘ │ ▼┌───────────┐ ┌──────────┐│PostgreSQL │◀───│ Worker ││ │ │ │└───────────┘ └──────────┘Step by Step
Section titled “Step by Step”- Schedule Trigger: Scheduler detects sync due
- Job Creation: Sync job queued in Redis
- Worker Pickup: Worker dequeues job
- API Discovery: Worker calls code host API
- Repository List: Code host returns repos
- Filter: Apply include/exclude patterns
- Database Update: Update repo metadata
- Index Jobs: Queue index jobs for new repos
Timing
Section titled “Timing”| Step | Typical Time |
|---|---|
| Job queue | <10ms |
| API discovery | 1-10s |
| Database update | <100ms |
| Total | 2-15s |
Repository Indexing
Section titled “Repository Indexing”When a repository is indexed:
┌──────────┐ ┌──────────┐ ┌──────────┐│ Queue │───▶│ Worker │───▶│ Git ││ (Redis) │ │ │ │ Clone │└──────────┘ └──────────┘ └──────────┘ │ ▼ ┌───────────┐ │ Disk │ │ (Git Repo)│ └───────────┘ │ ┌─────────────────────────────────┘ │ ▼┌──────────┐ ┌──────────┐ ┌──────────┐│ File │───▶│ Index │───▶│ Zoekt ││ Analysis │ │ Build │ │ Index │└──────────┘ └──────────┘ └──────────┘ │ ┌─────────────────────────────────┘ │ ▼┌──────────┐│PostgreSQL││ (Status) │└──────────┘Step by Step
Section titled “Step by Step”- Job Pickup: Worker dequeues index job
- Git Clone: Clone or fetch repository
- File Analysis: Enumerate and analyze files
- Language Detection: Detect file languages
- Index Build: Create Zoekt trigram index
- Index Write: Write index to disk
- Status Update: Update database status
Timing
Section titled “Timing”| Step | Typical Time |
|---|---|
| Git clone | 10s-5min |
| File analysis | 1-30s |
| Index build | 5s-2min |
| Total | 30s-10min |
Replace Operation
Section titled “Replace Operation”When creating a merge request with changes:
┌──────┐ ┌──────────┐ ┌──────────┐│ CLI │───▶│ API │───▶│ Search ││ │ │ Server │ │ │└──────┘ └──────────┘ └──────────┘ │ ┌─────────────────────────────┘ │ ▼┌──────────┐ ┌──────────┐ ┌──────────┐│ Matches │───▶│ Changes │───▶│ Code Host││ │ │ Applied │ │ API │└──────────┘ └──────────┘ └──────────┘ │ ┌─────────────────────────────────┘ │ ▼┌──────────┐│ MR ││ Created │└──────────┘Step by Step
Section titled “Step by Step”- Query: CLI sends search/replace query
- Search: Find all matches
- Preview: Show changes to user
- Confirm: User confirms changes
- Clone Repos: Clone affected repos
- Apply Changes: Apply find/replace
- Commit: Create commits
- Push: Push branches
- Create MR: Create merge requests
Timing
Section titled “Timing”| Step | Typical Time |
|---|---|
| Search | <1s |
| Clone (per repo) | 10-60s |
| Apply changes | <1s |
| Push & MR | 2-10s |
| Total | 20s-2min per repo |
Connection Test
Section titled “Connection Test”When testing a new connection:
┌──────┐ ┌──────────┐ ┌───────────┐│ Web │───▶│ API │───▶│ Code Host ││ UI │ │ Server │ │ API │└──────┘ └──────────┘ └───────────┘ │ ┌─────────────────────────────┘ │ ▼┌──────────┐ ┌──────────┐│ Validate │───▶│ Return ││ Token │ │ Result │└──────────┘ └──────────┘Step by Step
Section titled “Step by Step”- Submit: User submits connection details
- API Call: API tests against code host
- Validate: Verify token and permissions
- Discover: Test repository discovery
- Return: Return success/failure
Next Steps
Section titled “Next Steps”- Indexing - Deep dive into indexing
- Components - Component details