re-uploading work
This commit is contained in:
392
docs/development/WORKSPACE_SETUP.md
Normal file
392
docs/development/WORKSPACE_SETUP.md
Normal file
@@ -0,0 +1,392 @@
|
||||
# Attune Rust Workspace Setup Summary
|
||||
|
||||
This document summarizes the Cargo workspace setup for the Attune automation platform.
|
||||
|
||||
## ✅ What Has Been Created
|
||||
|
||||
### 1. Workspace Structure
|
||||
|
||||
A complete Cargo workspace with the following structure:
|
||||
|
||||
```
|
||||
attune/
|
||||
├── Cargo.toml # Workspace root configuration
|
||||
├── README.md # Project documentation
|
||||
├── .gitignore # Git ignore rules
|
||||
├── .env.example # Environment configuration template
|
||||
├── WORKSPACE_SETUP.md # This file
|
||||
├── reference/
|
||||
│ ├── models.py # Python SQLAlchemy models (reference)
|
||||
│ └── models.md # Comprehensive model documentation
|
||||
└── crates/
|
||||
├── common/ # Shared library
|
||||
│ ├── Cargo.toml
|
||||
│ └── src/
|
||||
│ ├── lib.rs # Library entry point
|
||||
│ ├── config.rs # Configuration management
|
||||
│ ├── db.rs # Database connection pooling
|
||||
│ ├── error.rs # Unified error types
|
||||
│ ├── models.rs # Data models (SQLx)
|
||||
│ ├── schema.rs # Schema utilities and validation
|
||||
│ └── utils.rs # Common utilities
|
||||
├── api/ # REST API Service
|
||||
│ ├── Cargo.toml
|
||||
│ └── src/main.rs
|
||||
├── executor/ # Execution Management Service
|
||||
│ ├── Cargo.toml
|
||||
│ └── src/main.rs
|
||||
├── worker/ # Action Execution Service
|
||||
│ ├── Cargo.toml
|
||||
│ └── src/main.rs
|
||||
├── sensor/ # Event Monitoring Service
|
||||
│ ├── Cargo.toml
|
||||
│ └── src/main.rs
|
||||
└── notifier/ # Notification Service
|
||||
├── Cargo.toml
|
||||
└── src/main.rs
|
||||
```
|
||||
|
||||
### 2. Common Library (`attune-common`)
|
||||
|
||||
The shared library provides:
|
||||
|
||||
- **Configuration Management**: Full-featured config system supporting env vars and config files
|
||||
- **Database Layer**: SQLx-based connection pooling with health checks and migrations support
|
||||
- **Error Handling**: Comprehensive error types with helper methods
|
||||
- **Data Models**: Complete SQLx models matching the Python reference models
|
||||
- **Schema Utilities**: Validation for refs, JSON schemas, and database operations
|
||||
- **Common Utilities**: Pagination, time formatting, string sanitization, etc.
|
||||
|
||||
### 3. Service Crates
|
||||
|
||||
Five specialized services, each with:
|
||||
- Individual `Cargo.toml` with appropriate dependencies
|
||||
- Stub `main.rs` with CLI argument parsing and configuration loading
|
||||
- Ready for implementation of service-specific logic
|
||||
|
||||
#### Services Overview:
|
||||
|
||||
1. **attune-api**: REST API gateway for all client interactions
|
||||
2. **attune-executor**: Manages action execution lifecycle and scheduling
|
||||
3. **attune-worker**: Executes actions in various runtime environments
|
||||
4. **attune-sensor**: Monitors for trigger conditions and generates events
|
||||
5. **attune-notifier**: Handles real-time notifications and pub/sub
|
||||
|
||||
### 4. Dependencies
|
||||
|
||||
All services share a common set of workspace dependencies:
|
||||
|
||||
- **Async Runtime**: tokio (full-featured async runtime)
|
||||
- **Web Framework**: axum + tower (for API service)
|
||||
- **Database**: sqlx (async PostgreSQL with compile-time checked queries)
|
||||
- **Serialization**: serde + serde_json
|
||||
- **Logging**: tracing + tracing-subscriber
|
||||
- **Message Queue**: lapin (RabbitMQ client)
|
||||
- **Cache**: redis (optional, for caching)
|
||||
- **Error Handling**: anyhow + thiserror
|
||||
- **Configuration**: config crate with environment variable support
|
||||
- **Validation**: validator + jsonschema
|
||||
- **Encryption**: argon2 + ring
|
||||
- **CLI**: clap (command-line argument parsing)
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Install the required services:
|
||||
|
||||
```bash
|
||||
# PostgreSQL
|
||||
brew install postgresql@14 # macOS
|
||||
# or
|
||||
sudo apt install postgresql-14 # Ubuntu
|
||||
|
||||
# RabbitMQ
|
||||
brew install rabbitmq # macOS
|
||||
# or
|
||||
sudo apt install rabbitmq-server # Ubuntu
|
||||
|
||||
# Redis (optional)
|
||||
brew install redis # macOS
|
||||
# or
|
||||
sudo apt install redis-server # Ubuntu
|
||||
```
|
||||
|
||||
### Setup Steps
|
||||
|
||||
1. **Copy environment configuration:**
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. **Edit `.env` and update:**
|
||||
- Database connection URL
|
||||
- JWT secret (generate a secure random string)
|
||||
- Encryption key (at least 32 characters)
|
||||
|
||||
3. **Create database:**
|
||||
```bash
|
||||
createdb attune
|
||||
```
|
||||
|
||||
4. **Build the workspace:**
|
||||
```bash
|
||||
cargo build
|
||||
```
|
||||
|
||||
5. **Run tests:**
|
||||
```bash
|
||||
cargo test
|
||||
```
|
||||
|
||||
6. **Start a service:**
|
||||
```bash
|
||||
cargo run --bin attune-api
|
||||
```
|
||||
|
||||
## 📝 Configuration
|
||||
|
||||
Configuration uses a hierarchical approach:
|
||||
|
||||
1. **Default values** (defined in `config.rs`)
|
||||
2. **Configuration file** (if `ATTUNE_CONFIG` env var is set)
|
||||
3. **Environment variables** (prefix: `ATTUNE__`, separator: `__`)
|
||||
|
||||
Example environment variable:
|
||||
```bash
|
||||
ATTUNE__DATABASE__URL=postgresql://localhost/attune
|
||||
```
|
||||
|
||||
Maps to:
|
||||
```rust
|
||||
config.database.url
|
||||
```
|
||||
|
||||
## 🏗️ Development Workflow
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
# Build all services
|
||||
cargo build
|
||||
|
||||
# Build in release mode
|
||||
cargo build --release
|
||||
|
||||
# Build specific service
|
||||
cargo build -p attune-api
|
||||
|
||||
# Check without building
|
||||
cargo check
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
cargo test
|
||||
|
||||
# Run tests for specific crate
|
||||
cargo test -p attune-common
|
||||
|
||||
# Run with output
|
||||
cargo test -- --nocapture
|
||||
|
||||
# Run specific test
|
||||
cargo test test_name
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
|
||||
```bash
|
||||
# Format code
|
||||
cargo fmt
|
||||
|
||||
# Run linter
|
||||
cargo clippy
|
||||
|
||||
# Run clippy with all features
|
||||
cargo clippy --all-features -- -D warnings
|
||||
```
|
||||
|
||||
## 📚 Key Files to Implement Next
|
||||
|
||||
### 1. Database Migrations
|
||||
|
||||
Create `migrations/` directory with SQLx migrations:
|
||||
|
||||
```bash
|
||||
# Create migration
|
||||
sqlx migrate add initial_schema
|
||||
|
||||
# Run migrations
|
||||
sqlx migrate run
|
||||
```
|
||||
|
||||
### 2. API Routes
|
||||
|
||||
In `crates/api/src/`:
|
||||
- `routes/mod.rs` - Route definitions
|
||||
- `handlers/mod.rs` - Request handlers
|
||||
- `middleware/` - Authentication, logging, etc.
|
||||
|
||||
### 3. Service Logic
|
||||
|
||||
Each service needs:
|
||||
- Message queue consumers/producers
|
||||
- Business logic implementation
|
||||
- Integration with database
|
||||
- Error handling
|
||||
|
||||
### 4. Tests
|
||||
|
||||
Each crate should have:
|
||||
- Unit tests in `tests/` directory
|
||||
- Integration tests
|
||||
- Mock implementations for testing
|
||||
|
||||
## 🔧 Common Tasks
|
||||
|
||||
### Adding a New Dependency
|
||||
|
||||
1. Add to workspace dependencies in root `Cargo.toml`:
|
||||
```toml
|
||||
[workspace.dependencies]
|
||||
new-crate = "1.0"
|
||||
```
|
||||
|
||||
2. Use in service `Cargo.toml`:
|
||||
```toml
|
||||
[dependencies]
|
||||
new-crate = { workspace = true }
|
||||
```
|
||||
|
||||
### Creating a New Service
|
||||
|
||||
1. Create directory: `crates/new-service/`
|
||||
2. Add to workspace members in root `Cargo.toml`
|
||||
3. Create `Cargo.toml` and `src/main.rs`
|
||||
4. Add dependencies from workspace
|
||||
|
||||
### Database Queries
|
||||
|
||||
Using SQLx with compile-time checking:
|
||||
|
||||
```rust
|
||||
// Query single row
|
||||
let pack = sqlx::query_as!(
|
||||
Pack,
|
||||
r#"SELECT * FROM attune.pack WHERE ref = $1"#,
|
||||
pack_ref
|
||||
)
|
||||
.fetch_one(&pool)
|
||||
.await?;
|
||||
|
||||
// Query multiple rows
|
||||
let packs = sqlx::query_as!(
|
||||
Pack,
|
||||
r#"SELECT * FROM attune.pack ORDER BY created DESC"#
|
||||
)
|
||||
.fetch_all(&pool)
|
||||
.await?;
|
||||
```
|
||||
|
||||
## 🎯 Next Steps
|
||||
|
||||
1. **Implement Database Migrations**
|
||||
- Create migration files for all tables
|
||||
- Add indexes and constraints
|
||||
- Set up database triggers and functions
|
||||
|
||||
2. **Implement API Service**
|
||||
- CRUD endpoints for all models
|
||||
- Authentication middleware
|
||||
- OpenAPI/Swagger documentation
|
||||
- WebSocket support for notifications
|
||||
|
||||
3. **Implement Executor Service**
|
||||
- Execution queue management
|
||||
- Status tracking
|
||||
- Policy enforcement
|
||||
- Workflow orchestration
|
||||
|
||||
4. **Implement Worker Service**
|
||||
- Runtime environment setup
|
||||
- Action execution
|
||||
- Result reporting
|
||||
- Heartbeat mechanism
|
||||
|
||||
5. **Implement Sensor Service**
|
||||
- Trigger monitoring
|
||||
- Event generation
|
||||
- Sensor lifecycle management
|
||||
|
||||
6. **Implement Notifier Service**
|
||||
- PostgreSQL LISTEN/NOTIFY integration
|
||||
- WebSocket server
|
||||
- Notification routing
|
||||
|
||||
7. **Add Tests**
|
||||
- Unit tests for all modules
|
||||
- Integration tests for services
|
||||
- End-to-end workflow tests
|
||||
|
||||
8. **Documentation**
|
||||
- API documentation
|
||||
- Service architecture docs
|
||||
- Deployment guides
|
||||
- Example packs
|
||||
|
||||
## 📖 References
|
||||
|
||||
- **Models Documentation**: `reference/models.md` - Comprehensive documentation of all data models
|
||||
- **Python Models**: `reference/models.py` - Reference SQLAlchemy implementation
|
||||
- **README**: `README.md` - Full project documentation
|
||||
- **Config Example**: `.env.example` - Configuration template with all options
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Compilation Errors
|
||||
|
||||
```bash
|
||||
# Clean and rebuild
|
||||
cargo clean
|
||||
cargo build
|
||||
|
||||
# Update dependencies
|
||||
cargo update
|
||||
```
|
||||
|
||||
### Database Connection Issues
|
||||
|
||||
1. Check PostgreSQL is running
|
||||
2. Verify connection URL in `.env`
|
||||
3. Ensure database exists
|
||||
4. Check firewall/network settings
|
||||
|
||||
### Missing Dependencies
|
||||
|
||||
```bash
|
||||
# Install system dependencies (Ubuntu)
|
||||
sudo apt install pkg-config libssl-dev
|
||||
|
||||
# Install system dependencies (macOS)
|
||||
brew install openssl pkg-config
|
||||
```
|
||||
|
||||
## 💡 Tips
|
||||
|
||||
- Use `cargo watch` for automatic rebuilds during development
|
||||
- Run `cargo clippy` before committing to catch common issues
|
||||
- Use `RUST_LOG=debug` for detailed logging
|
||||
- Set `RUST_BACKTRACE=1` for better error messages
|
||||
- Use `cargo-expand` to see macro expansions
|
||||
- Use `cargo-tree` to view dependency tree
|
||||
|
||||
## ✨ Status
|
||||
|
||||
**Current Status**: ✅ Workspace Setup Complete
|
||||
|
||||
All foundational code is in place. The workspace compiles successfully and is ready for service implementation.
|
||||
|
||||
**Next Milestone**: Implement database migrations and basic API endpoints.
|
||||
Reference in New Issue
Block a user