hero/core/dispatcher/cmd/README.md
2025-07-29 01:15:23 +02:00

4.2 KiB

Rhai Client Binary

A command-line client for executing Rhai scripts on remote workers via Redis.

Binary: client

Installation

Build the binary:

cargo build --bin client --release

Usage

# 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

# 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

# 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

# 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

# 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

# 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

# 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