- Simplified RunnerConfig to just name, command, and optional env - Removed RunnerType and ProcessManagerType enums - Removed db_path, redis_url, binary_path from config - Made runner name also serve as queue name (no separate queue param) - Added secret-based authentication to all runner management methods - Created comprehensive osiris_openrpc example - Archived old examples to _archive/ - Updated client API to match simplified supervisor interface
269 lines
6.1 KiB
Markdown
269 lines
6.1 KiB
Markdown
# Mycelium Integration - Now Optional!
|
|
|
|
The Mycelium integration is now an optional feature. The supervisor can run with just the OpenRPC HTTP server, making it simpler to use and deploy.
|
|
|
|
## What Changed
|
|
|
|
### Before
|
|
- Mycelium integration was always enabled
|
|
- Supervisor would continuously try to connect to Mycelium on port 8990
|
|
- Error logs if Mycelium wasn't available
|
|
- Required additional dependencies
|
|
|
|
### After
|
|
- ✅ Mycelium is now an optional feature
|
|
- ✅ Supervisor runs with clean OpenRPC HTTP server by default
|
|
- ✅ No connection errors when Mycelium isn't needed
|
|
- ✅ Smaller binary size without Mycelium dependencies
|
|
|
|
## Running the Supervisor
|
|
|
|
### Option 1: Simple OpenRPC Server (Recommended)
|
|
|
|
**No Mycelium, just OpenRPC:**
|
|
|
|
```bash
|
|
# Using the helper script
|
|
./run_supervisor_simple.sh
|
|
|
|
# Or manually
|
|
MYCELIUM_URL="" cargo run --bin supervisor -- \
|
|
--redis-url redis://localhost:6379 \
|
|
--port 3030
|
|
```
|
|
|
|
This starts:
|
|
- ✅ OpenRPC HTTP server on port 3030
|
|
- ✅ Redis connection for job queuing
|
|
- ❌ No Mycelium integration
|
|
|
|
### Option 2: With Mycelium Integration
|
|
|
|
**Enable Mycelium feature:**
|
|
|
|
```bash
|
|
# Build with Mycelium support
|
|
cargo build --bin supervisor --features mycelium
|
|
|
|
# Run with Mycelium URL
|
|
MYCELIUM_URL="http://localhost:8990" cargo run --bin supervisor --features mycelium -- \
|
|
--redis-url redis://localhost:6379 \
|
|
--port 3030
|
|
```
|
|
|
|
This starts:
|
|
- ✅ OpenRPC HTTP server on port 3030
|
|
- ✅ Redis connection for job queuing
|
|
- ✅ Mycelium integration (connects to daemon)
|
|
|
|
## Feature Flags
|
|
|
|
### Available Features
|
|
|
|
| Feature | Description | Default |
|
|
|---------|-------------|---------|
|
|
| `cli` | Command-line interface | ✅ Yes |
|
|
| `mycelium` | Mycelium integration | ❌ No |
|
|
|
|
### Building with Features
|
|
|
|
```bash
|
|
# Default build (CLI only, no Mycelium)
|
|
cargo build --bin supervisor
|
|
|
|
# With Mycelium
|
|
cargo build --bin supervisor --features mycelium
|
|
|
|
# Minimal (no CLI, no Mycelium)
|
|
cargo build --bin supervisor --no-default-features
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Without Mycelium (Default)
|
|
|
|
```
|
|
┌─────────────────┐
|
|
│ Client │
|
|
└────────┬────────┘
|
|
│ HTTP/JSON-RPC
|
|
▼
|
|
┌─────────────────┐
|
|
│ Supervisor │
|
|
│ OpenRPC Server │
|
|
│ (Port 3030) │
|
|
└────────┬────────┘
|
|
│ Redis
|
|
▼
|
|
┌─────────────────┐
|
|
│ Runners │
|
|
└─────────────────┘
|
|
```
|
|
|
|
### With Mycelium (Optional)
|
|
|
|
```
|
|
┌─────────────────┐
|
|
│ Client │
|
|
└────────┬────────┘
|
|
│ HTTP/JSON-RPC
|
|
▼
|
|
┌─────────────────┐ ┌──────────────┐
|
|
│ Supervisor │◄────►│ Mycelium │
|
|
│ OpenRPC Server │ │ Daemon │
|
|
│ (Port 3030) │ │ (Port 8990) │
|
|
└────────┬────────┘ └──────────────┘
|
|
│ Redis
|
|
▼
|
|
┌─────────────────┐
|
|
│ Runners │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Description | Default | Required |
|
|
|----------|-------------|---------|----------|
|
|
| `MYCELIUM_URL` | Mycelium daemon URL | `http://127.0.0.1:8990` | No |
|
|
| `RUST_LOG` | Log level | `info` | No |
|
|
|
|
**To disable Mycelium:**
|
|
```bash
|
|
export MYCELIUM_URL=""
|
|
```
|
|
|
|
## Dependencies
|
|
|
|
### Core Dependencies (Always)
|
|
- `tokio` - Async runtime
|
|
- `redis` - Job queuing
|
|
- `jsonrpsee` - OpenRPC server
|
|
- `runner_rust` - Job model
|
|
|
|
### Mycelium Dependencies (Optional)
|
|
- `reqwest` - HTTP client
|
|
- `base64` - Encoding
|
|
- `rand` - Random IDs
|
|
|
|
## Examples
|
|
|
|
All examples work without Mycelium:
|
|
|
|
```bash
|
|
# Simple end-to-end example
|
|
RUST_LOG=info cargo run --example simple_e2e
|
|
|
|
# Full automated demo
|
|
RUST_LOG=info cargo run --example end_to_end_demo
|
|
```
|
|
|
|
## Migration Guide
|
|
|
|
### If you were using Mycelium
|
|
|
|
**Before:**
|
|
```bash
|
|
cargo run --bin supervisor
|
|
# Would try to connect to Mycelium automatically
|
|
```
|
|
|
|
**After:**
|
|
```bash
|
|
# Option A: Disable Mycelium (recommended for most use cases)
|
|
MYCELIUM_URL="" cargo run --bin supervisor
|
|
|
|
# Option B: Enable Mycelium feature
|
|
cargo run --bin supervisor --features mycelium
|
|
```
|
|
|
|
### If you weren't using Mycelium
|
|
|
|
**Before:**
|
|
```bash
|
|
cargo run --bin supervisor
|
|
# Would see connection errors to port 8990
|
|
```
|
|
|
|
**After:**
|
|
```bash
|
|
cargo run --bin supervisor
|
|
# Clean startup, no connection errors! 🎉
|
|
```
|
|
|
|
## Benefits
|
|
|
|
### For Development
|
|
- ✅ Faster builds (fewer dependencies)
|
|
- ✅ Simpler setup (no Mycelium daemon needed)
|
|
- ✅ Cleaner logs (no connection errors)
|
|
- ✅ Easier debugging
|
|
|
|
### For Production
|
|
- ✅ Smaller binary size
|
|
- ✅ Fewer runtime dependencies
|
|
- ✅ More flexible deployment
|
|
- ✅ Optional advanced features
|
|
|
|
## Testing
|
|
|
|
### Test without Mycelium
|
|
```bash
|
|
# Build
|
|
cargo build --bin supervisor
|
|
|
|
# Run tests
|
|
cargo test
|
|
|
|
# Run examples
|
|
cargo run --example simple_e2e
|
|
```
|
|
|
|
### Test with Mycelium
|
|
```bash
|
|
# Build with feature
|
|
cargo build --bin supervisor --features mycelium
|
|
|
|
# Start Mycelium daemon (if you have one)
|
|
# mycelium-daemon --port 8990
|
|
|
|
# Run supervisor
|
|
MYCELIUM_URL="http://localhost:8990" cargo run --bin supervisor --features mycelium
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Mycelium integration not enabled"
|
|
|
|
This is informational, not an error. If you need Mycelium:
|
|
|
|
```bash
|
|
cargo build --features mycelium
|
|
```
|
|
|
|
### "HTTP request failed: error sending request"
|
|
|
|
If you see this with Mycelium enabled, check:
|
|
1. Is Mycelium daemon running?
|
|
2. Is the URL correct? (`MYCELIUM_URL`)
|
|
3. Is the port accessible?
|
|
|
|
Or simply disable Mycelium:
|
|
```bash
|
|
export MYCELIUM_URL=""
|
|
```
|
|
|
|
## Summary
|
|
|
|
🎉 **The supervisor now runs cleanly with just OpenRPC!**
|
|
|
|
- Default: OpenRPC HTTP server only
|
|
- Optional: Enable Mycelium with `--features mycelium`
|
|
- No more connection errors when Mycelium isn't needed
|
|
- Simpler, faster, cleaner!
|
|
|
|
---
|
|
|
|
**Status:** ✅ Complete
|
|
**Version:** 0.1.0
|
|
**Last Updated:** 2025-10-24
|