Merged in feature/deployment-docs (pull request #187)

deployment docs

* deployment docs

* branding on api page
This commit is contained in:
Jay Brown
2025-10-06 17:20:21 +00:00
parent c9eef574c0
commit bd5d589886
5 changed files with 656 additions and 96 deletions
+5
View File
@@ -5,6 +5,11 @@ This repository contains the DoczyAI code.
Using the following project as a baseline: `https://github.com/golang-standards/project-layout`.
## Documentation
- [Queue Pipeline Flow](./queue_flow.md) - Detailed documentation of the SQS queue-based processing pipeline
- [Deployment Environment Variables](./deployment_env_variables.md) - Configuration guide for environment variables across all services
## Installation and Usage
- Install devbox: `https://www.jetify.com/docs/devbox/installing_devbox`
+91 -91
View File
@@ -1092,97 +1092,97 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
+256
View File
@@ -0,0 +1,256 @@
# Deployment Environment Variables Configuration Guide
## Overview
This guide provides rules for configuring environment variables when deploying all runners and the queryAPI service across different environments (dev, stage, prod).
## Variable Categories
### 1. Service-Specific Variables (UNIQUE per service)
These variables **MUST be different** for each runner service:
| Variable | Description | Unique To |
|----------|-------------|-----------|
| `QUEUE_URL` | Input queue the service reads from | Each runner (different value per runner) |
### 2. Pipeline Queue URLs (SHARED across all services in same environment)
These variables should be **IDENTICAL** for all services within the same environment:
| Variable | Example Value (dev) | Purpose |
|----------|---------------------|---------|
| `DOCUMENT_INIT_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/document_init` | Queue for document initialization |
| `DOCUMENT_SYNC_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/document_sync` | Queue for document sync |
| `DOCUMENT_CLEAN_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/document_clean` | Queue for document cleaning |
| `DOCUMENT_TEXT_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/document_text` | Queue for text extraction |
| `QUERY_SYNC_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/query_sync` | Queue for query sync |
| `QUERY_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/query` | Queue for query execution |
| `CLIENT_SYNC_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/client_sync` | Queue for client sync |
| `QUERY_VERSION_SYNC_URL` | `https://sqs.us-east-2.amazonaws.com/476114113988/query_version_sync` | Queue for query version sync |
### 3. AWS Configuration (SHARED across all services)
These should be **IDENTICAL** for all services:
| Variable | Example Value | Notes |
|----------|---------------|-------------------------------------------------------|
| `AWS_ACCESS_KEY_ID` | `AKIAXXXXXXXXXXXXXXXX` | AWS credentials override - should be blank |
| `AWS_SECRET_ACCESS_KEY` | `secret_key_here` | AWS credentials - override - should be blank |
| `AWS_SESSION_TOKEN` | `token_if_using_temporary_creds` | Optional, for temporary credentials - should be blank |
| `AWS_REGION` | `us-east-2` | AWS region for all services |
⚠️ **Important for AWS deployment**:
- **DO NOT SET** `AWS_ENDPOINT_URL` (only for LocalStack)
- **DO NOT SET** `AWS_S3_USE_PATH_STYLE` (only for LocalStack)
### 4. Database Configuration (SHARED across all services)
These should be **IDENTICAL** for all services:
| Variable | Example Value | Notes |
|----------|---------------|------------------------------------------------------|
| `PGHOST` | `database-hostname.rds.amazonaws.com` | Database hostname |
| `PGPORT` | `5432` | Database port |
| `PGDATABASE` | `queryorchestration_dev` | Database name |
| `PGUSER` | `dbuser` | Database username (whatever we use) |
| `PGPASSWORD` | `db_password_here` | Database password (keep secure) |
| `DB_NOSSL` | `false` | Set to `false` for AWS RDS (should be blank for now) |
### 5. Authentication Configuration (SHARED across all services)
These should be **IDENTICAL** for all services:
| Variable | Example Value | Notes |
|----------|---------------|----------------------------------------------------|
| `DISABLE_AUTH` | `false` | Set to `false` for production/staging true for dev |
| `COGNITO_USER_POOL_ID` | `us-east-2_XXXXXXXXX` | AWS Cognito User Pool ID |
| `COGNITO_CLIENT_ID` | `client_id_here` | AWS Cognito Client ID |
| `COGNITO_CLIENT_SECRET` | `client_secret_here` | AWS Cognito Client Secret |
| `COGNITO_DOMAIN` | `your-domain.auth.us-east-2.amazoncognito.com` | AWS Cognito Domain |
### 6. Application Configuration (SHARED across all services)
| Variable | Example Value | Notes |
|----------|---------------|-------|
| `LOG_LEVEL` | `INFO` or `DEBUG` | Use `INFO` for prod, `DEBUG` for dev |
| `BUCKET` | `s3-bucket-name-dev` | S3 bucket name (only needed by some services) |
### 7. Service-Specific Optional Variables
| Service | Variable | Purpose |
|---------|----------|---------|
| `docCleanRunner` | `BUCKET` | S3 bucket for document processing |
| `docTextRunner` | `BUCKET` | S3 bucket for document processing |
| `queryAPI` | `BUCKET` | S3 bucket for document uploads |
| `queryAPI` | `DEBUG` | Set to `true` for debugging |
## Per-Service Configuration Matrix
### storeEventRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/store_event`
**Also Needs:**
- `DOCUMENT_INIT_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### docInitRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/document_init`
**Also Needs:**
- `DOCUMENT_SYNC_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### docSyncRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/document_sync`
**Also Needs:**
- `DOCUMENT_CLEAN_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### docCleanRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/document_clean`
**Also Needs:**
- `DOCUMENT_TEXT_URL`
- `BUCKET` (S3 bucket name)
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### docTextRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/document_text`
**Also Needs:**
- `QUERY_SYNC_URL`
- `BUCKET` (S3 bucket name)
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### querySyncRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/query_sync`
**Also Needs:**
- `QUERY_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### queryRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/query`
**Also Needs:**
- `QUERY_URL` (same as QUEUE_URL - self-referential)
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### clientSyncRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/client_sync`
**Also Needs:**
- `DOCUMENT_SYNC_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### queryVersionSyncRunner
**Unique Variables:**
- `QUEUE_URL` = `https://sqs.us-east-2.amazonaws.com/476114113988/query_version_sync`
**Also Needs:**
- `CLIENT_SYNC_URL`
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
### queryAPI (REST API Service)
**Does NOT need `QUEUE_URL`**
**Needs:**
- `CLIENT_SYNC_URL`
- `QUERY_VERSION_SYNC_URL`
- `BUCKET` (S3 bucket name)
- `DEBUG` (optional, set to `true` for development)
- AWS config (shared)
- Database config (shared)
- Auth config (shared)
## Deployment Strategy
### Option 1: Shared Base Configuration + Service Overrides
1. **Create a base environment configuration** with all shared variables (database, AWS, auth, all queue URLs)
2. **For each service**, add only the unique `QUEUE_URL` value
**Example:**
```bash
# base-dev.env (shared by all services)
AWS_REGION=us-east-2
AWS_ACCESS_KEY_ID=AKIAXXXXXXXX
AWS_SECRET_ACCESS_KEY=secret_here
PGHOST=db-dev.example.com
PGDATABASE=queryorchestration_dev
# ... all queue URLs ...
DOCUMENT_INIT_URL=https://sqs.us-east-2.amazonaws.com/476114113988/document_init
DOCUMENT_SYNC_URL=https://sqs.us-east-2.amazonaws.com/476114113988/document_sync
# ... etc
# storeEventRunner-override.env
QUEUE_URL=https://sqs.us-east-2.amazonaws.com/476114113988/store_event
# docInitRunner-override.env
QUEUE_URL=https://sqs.us-east-2.amazonaws.com/476114113988/document_init
```
### Option 2: Complete Configuration Per Service
Copy the full environment configuration to each service and only change `QUEUE_URL`.
## Quick Checklist for New Environment
When deploying to a new environment (e.g., moving from dev to stage):
- [ ] Update AWS account ID in all queue URLs (e.g., `476114113988``123456789012`)
- [ ] Update environment suffix in queue names if using suffixes (e.g., `store_event-dev``store_event-stage`)
- [ ] Update database connection (PGHOST, PGDATABASE, PGUSER, PGPASSWORD)
- [ ] Update AWS credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
- [ ] Update Cognito configuration (if different per environment)
- [ ] Update S3 bucket name (BUCKET)
- [ ] Set LOG_LEVEL appropriately (DEBUG for dev, INFO for prod)
- [ ] Set DISABLE_AUTH appropriately (true for dev, false for prod)
- [ ] Ensure `QUEUE_URL` is unique for each runner service
- [ ] Remove `AWS_ENDPOINT_URL` and `AWS_S3_USE_PATH_STYLE` (LocalStack only)
## Common Mistakes to Avoid
**Setting a global `QUEUE_URL`** - Each runner needs its own specific input queue
**Using different queue URLs across services** - All services in same environment should see same queue URLs (except their own `QUEUE_URL`)
**Forgetting to remove LocalStack variables** - `AWS_ENDPOINT_URL` and `AWS_S3_USE_PATH_STYLE` should not be set for AWS
**Using empty string instead of unsetting** - Variables like `AWS_S3_USE_PATH_STYLE` should be completely absent, not empty
**Mixing environment credentials** - Don't use dev database with prod queues
## Validation
Before deploying, verify:
1. Each runner has a unique `QUEUE_URL` matching its input queue
2. All queue URLs within an environment are consistent across all services
3. Database credentials are correct for the environment
4. AWS credentials have appropriate permissions for SQS, S3, and Textract
5. Cognito configuration matches the environment
6. LocalStack-specific variables are removed for AWS deployments
+299
View File
@@ -0,0 +1,299 @@
# Queue Pipeline Flow Documentation
## Overview
This document describes the SQS queue-based processing pipeline that orchestrates document processing through various stages. The system uses AWS SQS queues to connect microservices (runners) in a sequential processing pipeline.
## Visual Pipeline Flow
[mermaid link](https://mermaid.live/edit#pako:eNqdlWtv2zYUhv8KwaDABiiZJOqOoUDjdFg_dGvktAVmFwVDHV0QmdQoqY1n57-PF8nxXBcYKoCASL08z7mR2mEmCsAZLlvxldVUDujues2Rel68QEuCXn8BPqClGCUDu74kq5_Uh-uRPcDw67385eWNYONGy953raDFz5_Q5eXL_WHzH2JoyobRoRF8j5a33pofCG9pw9G7poO24YBuRxihR5QXKB85B9lPyFtv1Q9CwmfQFg3UaA0J5d7OfDU4u9FIssRNvCdrIveMUwsJdFCIQjAkgQlZaI_8VTGF8LnhzbH92VWlsSh_p6RvlOiE488c33JqYA-oGLtWBw690d1v0es7WqGa9rXGkmdsv-XsLJZYLNHYpRKdYMmMNbr9B9o2heIh1jZzohjlxjwqW1ppbPCMZS1QfpYbWG6guQutOgEHMziw8WoJ6iYBE20LTJUE9YMqJpVFr8HhM3iAx_NpDi031Nw7JTrBhjPW6PavPi6RVknKrLk_Fzma5lO3Rau_R5Db72c4ssRoZ3RnchzPzMj2NauhGFtAWt9MpS1VrHNwmhpb6llgbIGxBZ7AkhlmVPvfVfomlDVWQAe8AM4U2YCODtPCFB3pENBv6jzbD6_evfFWt9qAfj2A3E9T4cyesdNtow0mK9s73ybMep9Y75OdlZ3JVzqHYKT7azqwGnVSMOhtsmjbTg2qc2bCIEdhWF8_qNOvSnguGmPWqp79Tqc6f7H7vud-at1PbfInyLdBpO4chNmwv5NNVYFEtCxVY0Nh29zEYPxPjvxfDlt1m1V2zlra9zdQ6hKOgMqmbbOLsixi13X6QYoHyC4IIdP75demGOrM7x4ddYaEzC5c1z0xJI2jk6UkZgD3P2hJX5q0mp1Kk_I-TX7QFO2aQ2zUjen_N3NkSN_zjrpp1SBqBGqEakRqxGokji6fyePxptxzct_JiZMHTh46eeTksZMnjqqcTdV_CGSO-njVNJUKwa5hB29AbmhTqP_iTq-t8VDDBtY4U6_qOntY4zV_Ujo6DkI3D84GOYKDpRirGmclbXs1s81509BK0s0s6Sj_S4jDFIpG-fPW_oTNv9jBldToyaI-7XIhRj7gzPdiz1jA2Q4_4ozEwVVCUt91Yz8KQ8938BZnl0mcXBEv8RMSxF7ok-DJwf8YpneVem4QpUkUpcSPI-_pXxutlHc)
```mermaid
flowchart TB
%% S3 Event Source
S3[(S3 Bucket<br/>Document Upload)] -->|S3 Event Notification| SQ1
%% Main Pipeline Queues and Runners
SQ1[store_event<br/>Queue] --> R1{storeEventRunner<br/>:8081}
R1 -->|Creates doc record| SQ2[document_init<br/>Queue]
SQ2 --> R2{docInitRunner<br/>:8082}
R2 -->|Check duplicates<br/>by ETag hash| SQ3[document_sync<br/>Queue]
SQ3 --> R3{docSyncRunner<br/>:8083}
R3 -->|Validate client<br/>can_sync flag| SQ4[document_clean<br/>Queue]
SQ4 --> R4{docCleanRunner<br/>:8084}
R4 -->|Clean per<br/>collector standards| SQ5[document_text<br/>Queue]
SQ5 --> R5{docTextRunner<br/>:8085}
R5 -->|AWS Textract<br/>OCR extraction| SQ6[query_sync<br/>Queue]
SQ6 --> R6{querySyncRunner<br/>:8087}
R6 -->|Schedule queries<br/>for document| SQ7[query<br/>Queue]
SQ7 --> R7{queryRunner<br/>:8088}
R7 -->|Handle query<br/>dependencies| SQ7
%% Client Sync Flow
API1[Query API<br/>:8080] -->|Client update| SQ8[client_sync<br/>Queue]
SQ8 --> R8{clientSyncRunner<br/>:8089}
R8 -->|Batch process<br/>all client docs| SQ3
%% Query Version Sync Flow
API1 -->|Query update| SQ9[query_version_sync<br/>Queue]
SQ9 --> R9{queryVersionSyncRunner<br/>:8090}
R9 -->|Trigger affected<br/>clients| SQ8
%% Styling
classDef queue fill:#ffd700,stroke:#333,stroke-width:2px,color:#000
classDef runner fill:#87ceeb,stroke:#333,stroke-width:2px,color:#000
classDef storage fill:#98fb98,stroke:#333,stroke-width:2px,color:#000
classDef api fill:#ffa07a,stroke:#333,stroke-width:2px,color:#000
class SQ1,SQ2,SQ3,SQ4,SQ5,SQ6,SQ7,SQ8,SQ9 queue
class R1,R2,R3,R4,R5,R6,R7,R8,R9 runner
class S3 storage
class API1 api
```
### Flow Legend
- 🟨 **Yellow boxes**: SQS Queues
- 🟦 **Blue diamonds**: Runner Services (with port numbers)
- 🟩 **Green cylinder**: S3 Storage
- 🟧 **Orange box**: REST API endpoint
- **Solid arrows**: Message flow direction
- **Self-loop on queryRunner**: Handles query dependencies by re-queueing
## Detailed Process Flow
[mermaid link](https://mermaid.live/edit#pako:eNp9lW9v2jAQxr-K5VfblFaEtCvkRaU1MAlp0xoSadKEVBnnAI_EoY4zlSK--84OgQYSkJAc--fnnjv_21GeJ0B9OpMFvJYgOYwEWyqWzSTB34YpLbjYMKlJ5LX0jQkrSKFzBS_wD7AnLKGENnB6JMcGnJZSgroERxPDJTkvM6RehBSdmqPJ9MBOkOoUjBqCxVbyTsGoFoyQ6hQMGoI8BSY7FYNaMTBYp2TckNTw1p10XCvGSHUJhjZpXFC1vZpxWGVswWs5h0eqU-kk1Jnlk0Ge80IvFUThj5msmMi7eXyMxj42iN0b5NOv-V_gOlDANCT-l88HcGzBqY8iaUoyKAq2hHpsioOjJ58EK-BrIhZEZJtcabSgVw1mgpFAJqaGRMhFTnbzkq9BO2QNW4esWLHa195GEzujNSR2N0Im5SYVHB2T-daqXGA2n-M6EwU8V0mDig7edjU0GZ28RJZo9xI1vfBUmAicSbv-DShoiWHqBalYinkKx3iBpdvjBRflZimml2yJPRDn1DOoRa6yalDIZWM8vpZ0bIl2E_GFCXt08K8Yx51zwmqRgKHIt98RiQ_QuVJkbqiTghX8yITXViiMLNFqNjyu0HeB09nGbhYstz00AoqPWHgZxKkOl1krrCQBxlfHsGZGe9CzHQobVMVb_hSuBsZvwEtdmdmejVU1UVCUqT7Nq2xO4ebV3Aim-B_liWniQlOHZqAyJhJ8ZXZm8ozqFWQwoz42E6bWM3x99sixUufmEqK-ViU4VOXlckX9BUsL_Co3CR6ew-t07MWL5U-eZ_UUSAR6_Vm9afZpc-hSmdgHSeNPBXkpNfX77p0VoP6OvlHf7bm3D3f9njcY9j13eN936Nb09m693sD1BgPPux_2eoO9Q99tyN7tYOC6_Ydhf-h-7WPjYf8f7gRf3A)
```mermaid
sequenceDiagram
participant S3
participant SE as store_event Queue
participant SER as storeEventRunner
participant DI as document_init Queue
participant DIR as docInitRunner
participant DS as document_sync Queue
participant DSR as docSyncRunner
participant DC as document_clean Queue
participant DCR as docCleanRunner
participant DT as document_text Queue
participant DTR as docTextRunner
participant QS as query_sync Queue
participant QSR as querySyncRunner
participant Q as query Queue
participant QR as queryRunner
participant DB as PostgreSQL
S3->>SE: S3 Event (ObjectCreated:*)
SE->>SER: Poll message
SER->>DB: Check if import path
SER->>DI: Send doc info {bucket, key, hash}
DI->>DIR: Poll message
DIR->>DB: Check duplicate by hash
DIR->>DB: Create document record
DIR->>DS: Send {documentID}
DS->>DSR: Poll message
DSR->>DB: Check client can_sync
DSR->>DC: Send {documentID} if eligible
DC->>DCR: Poll message
DCR->>DB: Check if already clean
DCR->>DB: Perform cleaning
DCR->>DT: Send {documentID}
DT->>DTR: Poll message
DTR->>DB: Check if text extracted
DTR-->>DTR: Call AWS Textract
DTR->>DB: Store extracted text
DTR->>QS: Send {documentID}
QS->>QSR: Poll message
QSR->>DB: Find applicable queries
QSR->>Q: Send {documentID, queryID} for each
Q->>QR: Poll message
QR->>DB: Check dependencies
QR->>DB: Execute query
QR->>DB: Store results
QR-->>Q: Re-queue if dependencies pending
```
## S3 Event Trigger Configuration
### AWS Service Type
**S3 Event Notifications** (also known as S3 Bucket Notifications)
### Configuration Requirements
The pipeline is initiated by S3 Event Notifications configured to send messages directly to an SQS queue:
```json
{
"QueueConfigurations": [{
"QueueArn": "arn:aws:sqs:{region}:{account-id}:store_event",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {
"FilterRules": [
{"Name": "prefix", "Value": "documents/"}
]
}
}
}]
}
```
**Important**: Files under the `batches/` path should be excluded from triggering the pipeline as they are temporary files. This can be accomplished through:
1. Prefix filters in S3 configuration (specify allowed prefixes)
2. Application-level filtering in `storeEventRunner` (recommended)
### AWS CLI Setup Command
```bash
aws s3api put-bucket-notification-configuration \
--bucket {BUCKET_NAME} \
--notification-configuration '{
"QueueConfigurations": [{
"QueueArn": "arn:aws:sqs:{region}:{account-id}:store_event",
"Events": ["s3:ObjectCreated:*"]
}]
}'
```
## Queue Pipeline Flow Tables
### Main Document Processing Pipeline
| Order | Runner Service | Reads From Queue | Writes To Queue | Description |
|-------|---------------|------------------|-----------------|-------------|
| **1** | `storeEventRunner` | `store_event` | `document_init` | Receives S3 event notifications when files are uploaded to the bucket |
| **2** | `docInitRunner` | `document_init` | `document_sync` | Creates document records, checks for duplicates based on ETag hash |
| **3** | `docSyncRunner` | `document_sync` | `document_clean` | Validates client eligibility for document processing (can_sync flag) |
| **4** | `docCleanRunner` | `document_clean` | `document_text` | Cleans document content according to collector standards |
| **5** | `docTextRunner` | `document_text` | `query_sync` | Extracts text using AWS Textract OCR service |
| **6** | `querySyncRunner` | `query_sync` | `query` | Syncs and schedules queries that need to run for documents |
| **7** | `queryRunner` | `query` | `query` (self-referential) | Executes queries with dependency chains, can re-queue for dependencies |
### Additional Async Runners
These runners are triggered by API calls or other events outside the main pipeline:
| Runner Service | Reads From Queue | Writes To Queue | Trigger |
|---------------|------------------|-----------------|---------|
| `clientSyncRunner` | `client_sync` | `document_sync` | Triggered by API calls or when client configuration changes |
| `queryVersionSyncRunner` | `query_version_sync` | `client_sync` | Triggered when query versions are updated via API |
## Pipeline Flow Diagrams
### 1. Document Upload Flow (Main Pipeline)
```
S3 Upload Event
[store_event queue]
storeEventRunner
[document_init queue]
docInitRunner
[document_sync queue]
docSyncRunner
[document_clean queue]
docCleanRunner
[document_text queue]
docTextRunner
[query_sync queue]
querySyncRunner
[query queue]
queryRunner
```
### 2. Client Sync Flow (Batch Processing)
```
Client Update (API)
[client_sync queue]
clientSyncRunner
[document_sync queue] → (feeds into main pipeline)
```
### 3. Query Version Update Flow
```
Query Update (API)
[query_version_sync queue]
queryVersionSyncRunner
[client_sync queue]
clientSyncRunner
[document_sync queue] → (feeds into main pipeline)
```
## Queue Names and Environment Variables
| Queue Purpose | Queue Name Variable | Queue URL Variable |
|--------------|-------------------|-------------------|
| S3 Events | `QNAME_STORE_EVENT` | `STORE_EVENT_URL` |
| Document Init | `QNAME_DOCUMENT_INIT` | `DOCUMENT_INIT_URL` |
| Document Sync | `QNAME_DOCUMENT_SYNC` | `DOCUMENT_SYNC_URL` |
| Document Clean | `QNAME_DOCUMENT_CLEAN` | `DOCUMENT_CLEAN_URL` |
| Document Text | `QNAME_DOCUMENT_TEXT` | `DOCUMENT_TEXT_URL` |
| Query Sync | `QNAME_QUERY_SYNC` | `QUERY_SYNC_URL` |
| Query Runner | `QNAME_QUERY_RUNNER` | `QUERY_URL` |
| Client Sync | `QNAME_CLIENT_SYNC` | `CLIENT_SYNC_URL` |
| Query Version Sync | `QNAME_QUERY_VERSION_SYNC` | `QUERY_VERSION_SYNC_URL` |
## Key Design Principles
1. **Single Responsibility**: Each runner has one specific task in the pipeline
2. **Sequential Processing**: Documents flow through defined stages in order
3. **Idempotent Operations**: Duplicate detection prevents reprocessing
4. **Async Reprocessing**: Client/query updates trigger document reprocessing
5. **Self-Referential Queuing**: Query runner can re-queue items for dependency handling
6. **Scalability**: Each runner can be scaled independently based on workload
## IAM Permissions Required
For the S3-to-SQS integration:
- S3 bucket must have permission to send messages to the SQS queue
- SQS queue policy must allow the S3 service principal to send messages
- Each runner service needs permissions to:
- Receive and delete messages from its input queue
- Send messages to its output queue(s)
- Access S3 buckets for document operations
- Access AWS Textract (for docTextRunner)
## Monitoring and Debugging
Each runner exposes Prometheus metrics on port 8080 and includes:
- Queue processing metrics
- Error rates
- Processing duration
- Health check endpoints
Runner ports for local development:
- `storeEventRunner`: 8081
- `docInitRunner`: 8082
- `docSyncRunner`: 8083
- `docCleanRunner`: 8084
- `docTextRunner`: 8085
- `querySyncRunner`: 8087
- `queryRunner`: 8088
- `clientSyncRunner`: 8089
- `queryVersionSyncRunner`: 8090
+5 -5
View File
@@ -5,12 +5,12 @@ info:
description: API documentation for the Query Orchestration services.
version: 0.0.1
contact:
email: mmcguinness@aarete.com
name: Michael McGuinness
url: doczy.com
email: piragavarapu@aarete.com
name: Aarete Inc.
url: https://aarete.com
license:
name: unlicensed
url: "www.example.com"
name: Aarete Inc.internal use
url: https://aarete.com
servers:
- url: https://doczy.com/v1
description: Production server