157 lines
4.2 KiB
Markdown
157 lines
4.2 KiB
Markdown
# Rhai Client Binary
|
|
|
|
A command-line client for executing Rhai scripts on remote workers via Redis.
|
|
|
|
## Binary: `client`
|
|
|
|
### Installation
|
|
|
|
Build the binary:
|
|
```bash
|
|
cargo build --bin client --release
|
|
```
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# Basic usage - requires caller and circle keys
|
|
client --caller-key <CALLER_KEY> --circle-key <CIRCLE_KEY>
|
|
|
|
# Execute inline script
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> --script "print('Hello World!')"
|
|
|
|
# Execute script from file
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> --file script.rhai
|
|
|
|
# Use specific worker (defaults to circle key)
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> -w <WORKER_KEY> --script "2 + 2"
|
|
|
|
# Custom Redis and timeout
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> --redis-url redis://localhost:6379/1 --timeout 60
|
|
|
|
# Remove timestamps from logs
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> --no-timestamp
|
|
|
|
# Increase verbosity
|
|
client -c <CALLER_KEY> -k <CIRCLE_KEY> -v --script "debug_info()"
|
|
```
|
|
|
|
### Command-Line Options
|
|
|
|
| Option | Short | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `--caller-key` | `-c` | **Required** | Caller public key (your identity) |
|
|
| `--circle-key` | `-k` | **Required** | Circle public key (execution context) |
|
|
| `--worker-key` | `-w` | `circle-key` | Worker public key (target worker) |
|
|
| `--redis-url` | `-r` | `redis://localhost:6379` | Redis connection URL |
|
|
| `--script` | `-s` | | Rhai script to execute |
|
|
| `--file` | `-f` | | Path to Rhai script file |
|
|
| `--timeout` | `-t` | `30` | Timeout for script execution (seconds) |
|
|
| `--no-timestamp` | | `false` | Remove timestamps from log output |
|
|
| `--verbose` | `-v` | | Increase verbosity (stackable) |
|
|
|
|
### Execution Modes
|
|
|
|
#### Inline Script Execution
|
|
```bash
|
|
# Execute a simple calculation
|
|
client -c caller_123 -k circle_456 -s "let result = 2 + 2; print(result);"
|
|
|
|
# Execute with specific worker
|
|
client -c caller_123 -k circle_456 -w worker_789 -s "get_user_data()"
|
|
```
|
|
|
|
#### Script File Execution
|
|
```bash
|
|
# Execute script from file
|
|
client -c caller_123 -k circle_456 -f examples/data_processing.rhai
|
|
|
|
# Execute with custom timeout
|
|
client -c caller_123 -k circle_456 -f long_running_script.rhai -t 120
|
|
```
|
|
|
|
#### Interactive Mode
|
|
```bash
|
|
# Enter interactive REPL mode (when no script or file provided)
|
|
client -c caller_123 -k circle_456
|
|
|
|
# Interactive mode with verbose logging
|
|
client -c caller_123 -k circle_456 -v --no-timestamp
|
|
```
|
|
|
|
### Interactive Mode
|
|
|
|
When no script (`-s`) or file (`-f`) is provided, the client enters interactive mode:
|
|
|
|
```
|
|
🔗 Starting Rhai Client
|
|
📋 Configuration:
|
|
Caller Key: caller_123
|
|
Circle Key: circle_456
|
|
Worker Key: circle_456
|
|
Redis URL: redis://localhost:6379
|
|
Timeout: 30s
|
|
|
|
✅ Connected to Redis at redis://localhost:6379
|
|
🎮 Entering interactive mode
|
|
Type Rhai scripts and press Enter to execute. Type 'exit' or 'quit' to close.
|
|
rhai> let x = 42; print(x);
|
|
Status: completed
|
|
Output: 42
|
|
rhai> exit
|
|
👋 Goodbye!
|
|
```
|
|
|
|
### Configuration Examples
|
|
|
|
#### Development Usage
|
|
```bash
|
|
# Simple development client
|
|
client -c dev_user -k dev_circle
|
|
|
|
# Development with clean logs
|
|
client -c dev_user -k dev_circle --no-timestamp -v
|
|
```
|
|
|
|
#### Production Usage
|
|
```bash
|
|
# Production client with specific worker
|
|
client \
|
|
--caller-key prod_user_123 \
|
|
--circle-key prod_circle_456 \
|
|
--worker-key prod_worker_789 \
|
|
--redis-url redis://redis-cluster:6379/0 \
|
|
--timeout 300 \
|
|
--file production_script.rhai
|
|
```
|
|
|
|
#### Batch Processing
|
|
```bash
|
|
# Process multiple scripts
|
|
for script in scripts/*.rhai; do
|
|
client -c batch_user -k batch_circle -f "$script" --no-timestamp
|
|
done
|
|
```
|
|
|
|
### Key Concepts
|
|
|
|
- **Caller Key**: Your identity - used for authentication and tracking
|
|
- **Circle Key**: Execution context - defines the environment/permissions
|
|
- **Worker Key**: Target worker - which worker should execute the script (defaults to circle key)
|
|
|
|
### Error Handling
|
|
|
|
The client provides clear error messages for:
|
|
- Missing required keys
|
|
- Redis connection failures
|
|
- Script execution timeouts
|
|
- Worker unavailability
|
|
- Script syntax errors
|
|
|
|
### Dependencies
|
|
|
|
- `rhai_dispatcher`: Core client library for Redis-based script execution
|
|
- `redis`: Redis client for task queue communication
|
|
- `clap`: Command-line argument parsing
|
|
- `env_logger`: Logging infrastructure
|
|
- `tokio`: Async runtime |