refactor wip
This commit is contained in:
		
							
								
								
									
										11
									
								
								core/worker/examples/osis/config.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								core/worker/examples/osis/config.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
worker_id = "osis_example_worker"
 | 
			
		||||
redis_url = "redis://localhost:6379"
 | 
			
		||||
db_path = "/tmp/osis_example_db"
 | 
			
		||||
preserve_tasks = false
 | 
			
		||||
 | 
			
		||||
[worker_type]
 | 
			
		||||
type = "sync"
 | 
			
		||||
 | 
			
		||||
[logging]
 | 
			
		||||
timestamps = true
 | 
			
		||||
level = "info"
 | 
			
		||||
							
								
								
									
										138
									
								
								core/worker/examples/osis/example.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										138
									
								
								core/worker/examples/osis/example.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# OSIS Worker Example Script
 | 
			
		||||
# This script demonstrates the OSIS worker by:
 | 
			
		||||
# 1. Starting the worker with the config.toml
 | 
			
		||||
# 2. Sending ping jobs to Redis
 | 
			
		||||
# 3. Verifying pong responses
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
 | 
			
		||||
CONFIG_FILE="$SCRIPT_DIR/config.toml"
 | 
			
		||||
WORKER_ID="osis_example_worker"
 | 
			
		||||
REDIS_URL="redis://localhost:6379"
 | 
			
		||||
 | 
			
		||||
echo "=== OSIS Worker Example ==="
 | 
			
		||||
echo "Script directory: $SCRIPT_DIR"
 | 
			
		||||
echo "Config file: $CONFIG_FILE"
 | 
			
		||||
echo "Worker ID: $WORKER_ID"
 | 
			
		||||
echo "Redis URL: $REDIS_URL"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Check if Redis is running
 | 
			
		||||
echo "Checking Redis connection..."
 | 
			
		||||
if ! redis-cli -u "$REDIS_URL" ping > /dev/null 2>&1; then
 | 
			
		||||
    echo "❌ Error: Redis is not running or not accessible at $REDIS_URL"
 | 
			
		||||
    echo "Please start Redis server first: redis-server"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
echo "✅ Redis is running"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Clean up any existing jobs in the queue
 | 
			
		||||
echo "Cleaning up existing jobs in Redis..."
 | 
			
		||||
redis-cli -u "$REDIS_URL" del "hero:jobs:$WORKER_ID" > /dev/null 2>&1 || true
 | 
			
		||||
redis-cli -u "$REDIS_URL" eval "return redis.call('del', unpack(redis.call('keys', 'hero:job:*')))" 0 > /dev/null 2>&1 || true
 | 
			
		||||
echo "✅ Redis queues cleaned"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Start the OSIS worker in the background
 | 
			
		||||
echo "Starting OSIS worker..."
 | 
			
		||||
cd "$SCRIPT_DIR/../.."
 | 
			
		||||
cargo run --bin osis -- --config "$CONFIG_FILE" &
 | 
			
		||||
WORKER_PID=$!
 | 
			
		||||
echo "✅ OSIS worker started (PID: $WORKER_PID)"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Wait a moment for the worker to initialize
 | 
			
		||||
echo "Waiting for worker to initialize..."
 | 
			
		||||
sleep 3
 | 
			
		||||
 | 
			
		||||
# Function to send a ping job and check for pong response
 | 
			
		||||
send_ping_job() {
 | 
			
		||||
    local job_num=$1
 | 
			
		||||
    local job_id="ping_job_${job_num}_$(date +%s)"
 | 
			
		||||
    
 | 
			
		||||
    echo "📤 Sending ping job: $job_id"
 | 
			
		||||
    
 | 
			
		||||
    # Create job in Redis
 | 
			
		||||
    redis-cli -u "$REDIS_URL" hset "hero:job:$job_id" \
 | 
			
		||||
        id "$job_id" \
 | 
			
		||||
        script "ping" \
 | 
			
		||||
        status "Queued" \
 | 
			
		||||
        created_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
 | 
			
		||||
        worker_id "$WORKER_ID" > /dev/null
 | 
			
		||||
    
 | 
			
		||||
    # Add job to worker queue
 | 
			
		||||
    redis-cli -u "$REDIS_URL" lpush "hero:jobs:$WORKER_ID" "$job_id" > /dev/null
 | 
			
		||||
    
 | 
			
		||||
    # Wait for job completion and check result
 | 
			
		||||
    local timeout=10
 | 
			
		||||
    local elapsed=0
 | 
			
		||||
    while [ $elapsed -lt $timeout ]; do
 | 
			
		||||
        local status=$(redis-cli -u "$REDIS_URL" hget "hero:job:$job_id" status 2>/dev/null || echo "")
 | 
			
		||||
        if [ "$status" = "Finished" ]; then
 | 
			
		||||
            local result=$(redis-cli -u "$REDIS_URL" hget "hero:job:$job_id" result 2>/dev/null || echo "")
 | 
			
		||||
            if [ "$result" = "pong" ]; then
 | 
			
		||||
                echo "✅ Job $job_id completed successfully with result: $result"
 | 
			
		||||
                return 0
 | 
			
		||||
            else
 | 
			
		||||
                echo "❌ Job $job_id completed but with unexpected result: $result"
 | 
			
		||||
                return 1
 | 
			
		||||
            fi
 | 
			
		||||
        elif [ "$status" = "Error" ]; then
 | 
			
		||||
            local error=$(redis-cli -u "$REDIS_URL" hget "hero:job:$job_id" error 2>/dev/null || echo "")
 | 
			
		||||
            echo "❌ Job $job_id failed with error: $error"
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
        sleep 1
 | 
			
		||||
        elapsed=$((elapsed + 1))
 | 
			
		||||
    done
 | 
			
		||||
    
 | 
			
		||||
    echo "❌ Job $job_id timed out after ${timeout}s"
 | 
			
		||||
    return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Send multiple ping jobs to test the worker
 | 
			
		||||
echo "Testing ping/pong functionality..."
 | 
			
		||||
success_count=0
 | 
			
		||||
total_jobs=3
 | 
			
		||||
 | 
			
		||||
for i in $(seq 1 $total_jobs); do
 | 
			
		||||
    echo
 | 
			
		||||
    echo "--- Test $i/$total_jobs ---"
 | 
			
		||||
    if send_ping_job $i; then
 | 
			
		||||
        success_count=$((success_count + 1))
 | 
			
		||||
    fi
 | 
			
		||||
    sleep 1
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo "=== Test Results ==="
 | 
			
		||||
echo "Successful ping/pong tests: $success_count/$total_jobs"
 | 
			
		||||
 | 
			
		||||
if [ $success_count -eq $total_jobs ]; then
 | 
			
		||||
    echo "🎉 All tests passed! OSIS worker is working correctly."
 | 
			
		||||
    exit_code=0
 | 
			
		||||
else
 | 
			
		||||
    echo "⚠️  Some tests failed. Check the worker logs for details."
 | 
			
		||||
    exit_code=1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Clean up
 | 
			
		||||
echo
 | 
			
		||||
echo "Cleaning up..."
 | 
			
		||||
echo "Stopping OSIS worker (PID: $WORKER_PID)..."
 | 
			
		||||
kill $WORKER_PID 2>/dev/null || true
 | 
			
		||||
wait $WORKER_PID 2>/dev/null || true
 | 
			
		||||
echo "✅ Worker stopped"
 | 
			
		||||
 | 
			
		||||
echo "Cleaning up Redis jobs..."
 | 
			
		||||
redis-cli -u "$REDIS_URL" del "hero:jobs:$WORKER_ID" > /dev/null 2>&1 || true
 | 
			
		||||
redis-cli -u "$REDIS_URL" eval "return redis.call('del', unpack(redis.call('keys', 'hero:job:*')))" 0 > /dev/null 2>&1 || true
 | 
			
		||||
echo "✅ Redis cleaned up"
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo "=== OSIS Worker Example Complete ==="
 | 
			
		||||
exit $exit_code
 | 
			
		||||
		Reference in New Issue
	
	Block a user