#!/bin/bash set -e # Function to load environment variables from the .env file load_env() { if [ -f ".env" ]; then export $(grep -v '^#' .env | xargs) fi } # Function to determine the docker-compose file based on the argument get_compose_file() { case "$1" in jaeger) echo "docker-compose-jaeger.yaml" ;; logfire) echo "docker-compose-logfire.yaml" ;; signoz) echo "docker-compose-signoz.yaml" ;; honeycomb) echo "docker-compose-honeycomb.yaml" ;; *) echo "docker-compose.yaml" ;; esac } # Function to start the demo start_demo() { # Step 1: Determine the docker-compose file COMPOSE_FILE=$(get_compose_file "$1" 2>/dev/null) # Step 2: Check if .env file exists if [ -f ".env" ]; then echo ".env file already exists. Skipping creation." else # Step 3: Check for required environment variables if [ -z "$OPENAI_API_KEY" ]; then echo "Error: OPENAI_API_KEY environment variable is not set for the demo." exit 1 fi if [ "$1" == "logfire" ] && [ -z "$LOGFIRE_API_KEY" ]; then echo "Error: LOGFIRE_API_KEY environment variable is required for Logfire." exit 1 fi if [ "$1" == "honeycomb" ] && [ -z "$HONEYCOMB_API_KEY" ]; then echo "Error: HONEYCOMB_API_KEY environment variable is required for Honeycomb." exit 1 fi # Create .env file echo "Creating .env file..." echo "OPENAI_API_KEY=$OPENAI_API_KEY" >.env if [ "$1" == "logfire" ]; then echo "LOGFIRE_API_KEY=$LOGFIRE_API_KEY" >>.env fi echo ".env file created with required API keys." fi load_env if [ "$1" == "logfire" ] && [ -z "$LOGFIRE_API_KEY" ]; then echo "Error: LOGFIRE_API_KEY environment variable is required for Logfire." exit 1 fi if [ "$1" == "honeycomb" ] && [ -z "$HONEYCOMB_API_KEY" ]; then echo "Error: HONEYCOMB_API_KEY environment variable is required for Honeycomb." exit 1 fi # Step 4: Start Arch echo "Starting Arch with arch_config.yaml..." archgw up arch_config.yaml # Step 5: Start Network Agent with the chosen Docker Compose file echo "Starting Network Agent with $COMPOSE_FILE..." docker compose -f "$COMPOSE_FILE" up -d # Run in detached mode } # Function to stop the demo stop_demo() { echo "Stopping all Docker Compose services..." # Stop all services by iterating through all configurations for compose_file in ./docker-compose*.yaml; do echo "Stopping services in $compose_file..." docker compose -f "$compose_file" down done # Stop Arch echo "Stopping Arch..." archgw down } # Main script logic if [ "$1" == "down" ]; then # Call stop_demo with the second argument as the demo to stop stop_demo else # Use the argument (jaeger, logfire, signoz) to determine the compose file start_demo "$1" fi