Skip to content

Configuration Reference

The [dummy-responder] supports multiple configuration methods to give you maximum flexibility. This reference covers all available configuration options and how to use them.

Configuration Methods

The service supports four configuration methods with the following priority order (highest to lowest):

  1. Command-line flags 🚩 - Highest priority, overrides everything
  2. Environment variables 🌍 - Second priority, overrides config file and defaults
  3. Configuration file 📄 - Third priority, overrides built-in defaults
  4. Built-in defaults ⚙️ - Lowest priority, used when nothing else is specified

Quick Start

Generate Example Configuration

bash
# Generate a config.yml with all options documented
./dummy-responder -gen-config

# Use custom filename
./dummy-responder -gen-config -config my-config.yml

Basic Usage Examples

bash
# Use defaults (port 8080)
./dummy-responder

# Use config file
./dummy-responder -config config.yml

# Override port via CLI (highest priority)
./dummy-responder -port 9090

# Override port via environment variable
PORT=3000 ./dummy-responder

# CLI overrides config file and environment
PORT=3000 ./dummy-responder -config config.yml -port 8080  # Uses port 8080

Command-Line Flags

FlagTypeDescriptionExample
-portstringPort to listen on-port 8080
-configstringPath to configuration file-config /path/to/config.yml
-gen-configboolGenerate example configuration file-gen-config
-helpboolShow help message-help

CLI Examples

bash
# Show all available options
./dummy-responder -help

# Use specific port
./dummy-responder -port 9090

# Use custom config file
./dummy-responder -config /etc/dummy-responder/config.yml

# Generate config and exit
./dummy-responder -gen-config

Environment Variables

VariableTypeDefaultDescription
PORTstring8080Port to listen on
HOSTstring0.0.0.0Host/interface to bind to
LOG_LEVELstringINFOLog level (DEBUG, INFO, WARN, ERROR)
MAX_CONNECTIONSint1000Maximum concurrent connections

Environment Variable Examples

bash
# Basic port override
PORT=9090 ./dummy-responder

# Multiple environment variables
PORT=8080 HOST=127.0.0.1 LOG_LEVEL=DEBUG ./dummy-responder

# Using .env file (with docker-compose)
echo "PORT=8080" > .env
echo "LOG_LEVEL=DEBUG" >> .env
docker run --env-file .env dummy-responder

Configuration File (YAML)

The configuration file uses YAML format and supports comprehensive settings for all aspects of the service.

Complete Configuration Example

yaml
# [dummy-responder] Configuration File
# All options with their default values

server:
  port: "8080"                    # Port to listen on
  host: "0.0.0.0"                # Host/interface to bind to
  readTimeout: 30s               # HTTP read timeout
  writeTimeout: 30s              # HTTP write timeout  
  maxConnections: 1000           # Maximum concurrent connections
  enableProfiling: false         # Enable pprof endpoints (/debug/pprof/)

defaults:
  responseCode: 200              # Default HTTP status code
  message: "Hello, World!"      # Default response message
  contentType: "text/plain"     # Default content type
  delay: "0s"                    # Default response delay
  failureRate: 0.0               # Default failure rate (0.0-1.0)
  failureCode: 500               # Default failure status code

websocket:
  enabled: true                  # Enable WebSocket endpoints
  messageDelay: "5s"             # Delay between automatic messages
  maxClients: 100                # Maximum WebSocket clients
  pingInterval: "30s"            # WebSocket ping interval
  enableEcho: true               # Enable message echoing
  enableBroadcast: true          # Enable message broadcasting

sse:
  enabled: true                  # Enable Server-Sent Events endpoints
  eventDelay: "3s"               # Delay between SSE events
  maxClients: 100                # Maximum SSE clients
  keepAlive: "30s"               # SSE keep-alive interval
  enableEvents: true             # Enable automatic events

logging:
  level: "INFO"                  # Log level (DEBUG, INFO, WARN, ERROR)
  format: "text"                 # Log format (text, json)
  timestamp: true                # Include timestamps in logs
  requestLog: true               # Log HTTP requests
  colorOutput: true              # Enable colored log output

Minimal Configuration Example

You don't need to specify all options. Here's a minimal config that only overrides what you need:

yaml
# Minimal configuration - only specify what you want to change
server:
  port: "9090"
  
defaults:
  responseCode: 201
  message: "Custom Default Message"
  
logging:
  level: "DEBUG"

Configuration Sections

Server Configuration

Controls the HTTP server behavior.

yaml
server:
  port: "8080"                    # Which port to listen on
  host: "0.0.0.0"                # Which interface to bind to (0.0.0.0 = all)
  readTimeout: 30s               # How long to wait for request headers/body
  writeTimeout: 30s              # How long to wait when writing response
  maxConnections: 1000           # Maximum concurrent connections
  enableProfiling: false         # Enable Go pprof endpoints for debugging

Common Settings:

  • host: "127.0.0.1" - Only accept local connections
  • host: "0.0.0.0" - Accept connections from any IP
  • readTimeout: 10s - Faster timeout for high-load scenarios
  • maxConnections: 5000 - Higher limit for load testing

Default Response Behavior

Sets the default behavior for HTTP responses when not overridden by query parameters.

yaml
defaults:
  responseCode: 200              # Default HTTP status (200, 404, 500, etc.)
  message: "Hello, World!"      # Default response body text
  contentType: "text/plain"     # Default content type
  delay: "0s"                    # Default response delay
  failureRate: 0.0               # Probability of returning error (0.0-1.0)
  failureCode: 500               # HTTP status to return on simulated failure

Common Settings:

  • responseCode: 404 - Default to "Not Found" for testing error handling
  • delay: "100ms" - Add realistic network latency
  • failureRate: 0.1 - 10% failure rate for resilience testing
  • contentType: "application/json" - Default to JSON responses

WebSocket Configuration

Controls WebSocket endpoint behavior.

yaml
websocket:
  enabled: true                  # Enable/disable WebSocket endpoints
  messageDelay: "5s"             # How often to send automatic messages
  maxClients: 100                # Maximum concurrent WebSocket connections
  pingInterval: "30s"            # How often to send ping frames
  enableEcho: true               # Echo received messages back to sender
  enableBroadcast: true          # Broadcast messages to all connected clients

Common Settings:

  • enabled: false - Disable WebSocket if not needed
  • messageDelay: "1s" - Faster updates for real-time testing
  • maxClients: 1000 - Higher limit for load testing
  • enableEcho: false - Disable echo for broadcast-only scenarios

Server-Sent Events (SSE) Configuration

Controls SSE endpoint behavior.

yaml
sse:
  enabled: true                  # Enable/disable SSE endpoints
  eventDelay: "3s"               # How often to send events
  maxClients: 100                # Maximum concurrent SSE connections
  keepAlive: "30s"               # Keep-alive interval
  enableEvents: true             # Send automatic events

Common Settings:

  • enabled: false - Disable SSE if not needed
  • eventDelay: "1s" - Faster events for real-time testing
  • maxClients: 1000 - Higher limit for load testing
  • enableEvents: false - Only send events on demand

Logging Configuration

Controls logging behavior.

yaml
logging:
  level: "INFO"                  # Log verbosity (DEBUG, INFO, WARN, ERROR)
  format: "text"                 # Log format (text, json)
  timestamp: true                # Include timestamps
  requestLog: true               # Log all HTTP requests
  colorOutput: true              # Use colored output (disable for logs)

Common Settings:

  • level: "DEBUG" - Verbose logging for development
  • level: "ERROR" - Minimal logging for production
  • format: "json" - Structured logs for log aggregation
  • colorOutput: false - Disable colors for log files

Configuration Use Cases

Development Environment

yaml
server:
  port: "8080"
  
defaults:
  delay: "100ms"              # Simulate network latency
  
logging:
  level: "DEBUG"              # Verbose logging
  requestLog: true            # Log all requests

Load Testing

yaml
server:
  port: "8080"
  maxConnections: 10000       # High connection limit
  
defaults:
  delay: "50ms"               # Minimal delay
  failureRate: 0.05           # 5% failure rate
  
websocket:
  maxClients: 5000            # High WebSocket limit
  
sse:
  maxClients: 5000            # High SSE limit
  
logging:
  level: "WARN"               # Minimal logging
  requestLog: false           # Disable request logging

Production Simulation

yaml
server:
  port: "8080"
  host: "0.0.0.0"
  
defaults:
  responseCode: 200
  delay: "200ms"              # Realistic response time
  failureRate: 0.02           # 2% failure rate
  
logging:
  level: "INFO"
  format: "json"              # Structured logging
  colorOutput: false          # No colors in logs

Error Simulation

yaml
defaults:
  responseCode: 500           # Default to server error
  failureRate: 0.3            # 30% failure rate
  failureCode: 503            # Service unavailable
  delay: "2s"                 # Slow responses
  
logging:
  level: "DEBUG"              # Detailed error logging

Configuration Validation

The service validates configuration on startup and will exit with an error if:

  • Port is empty or invalid
  • Max connections is zero or negative
  • Failure rate is outside 0.0-1.0 range
  • Timeout values are negative
  • Invalid duration formats (use Go duration format: 1s, 500ms, 2m)

Valid Duration Formats

yaml
# Valid duration examples
delay: "1s"           # 1 second
delay: "500ms"        # 500 milliseconds  
delay: "2m"           # 2 minutes
delay: "1h30m"        # 1 hour 30 minutes
delay: "0s"           # No delay

# Invalid formats (will cause errors)
delay: "1 second"     # ❌ Spaces not allowed
delay: "500"          # ❌ Must include unit
delay: "2 minutes"    # ❌ Spelled out units not allowed

Viewing Current Configuration

Via HTTP Endpoint

bash
# Get current configuration as JSON
curl http://localhost:8080/config | jq .

# Check specific configuration section
curl http://localhost:8080/config | jq .server
curl http://localhost:8080/config | jq .defaults
curl http://localhost:8080/config | jq .websocket

Via Startup Logs

The service prints key configuration information on startup:

🤖 [dummy-responder] starting with configuration:
   📡 Server: 0.0.0.0:8080
   📝 Log level: INFO
   🔗 Max connections: 1000
   📄 Config file: config.yml

Configuration File Locations

The service looks for configuration files in this order:

  1. Specified via -config flag (highest priority)
  2. config.yml in current directory (default)
  3. Built-in defaults (fallback)

Common Locations

bash
# Current directory (default)
./dummy-responder -config config.yml

# System-wide configuration
./dummy-responder -config /etc/dummy-responder/config.yml

# User-specific configuration  
./dummy-responder -config ~/.config/dummy-responder/config.yml

# Project-specific configuration
./dummy-responder -config ./configs/test-environment.yml

Docker Configuration

Using Environment Variables

dockerfile
# Dockerfile
FROM alpine:latest
COPY dummy-responder /usr/local/bin/
ENV PORT=8080
ENV LOG_LEVEL=INFO
CMD ["dummy-responder"]
bash
# Docker run with environment variables
docker run -p 8080:8080 \
  -e PORT=8080 \
  -e LOG_LEVEL=DEBUG \
  -e MAX_CONNECTIONS=2000 \
  dummy-responder

Using Config File Mount

bash
# Mount config file into container
docker run -p 8080:8080 \
  -v $(pwd)/config.yml:/app/config.yml \
  dummy-responder -config /app/config.yml

Docker Compose Example

yaml
version: '3.8'
services:
  dummy-responder:
    image: dummy-responder
    ports:
      - "8080:8080"
    environment:
      - PORT=8080
      - LOG_LEVEL=INFO
      - MAX_CONNECTIONS=1000
    volumes:
      - ./config.yml:/app/config.yml
    command: ["-config", "/app/config.yml"]

Kubernetes Configuration

Using ConfigMap

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: dummy-responder-config
data:
  config.yml: |
    server:
      port: "8080"
      maxConnections: 1000
    defaults:
      responseCode: 200
      delay: "100ms"
    logging:
      level: "INFO"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dummy-responder
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: dummy-responder
        image: dummy-responder:latest
        args: ["-config", "/etc/config/config.yml"]
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config
          mountPath: /etc/config
        env:
        - name: LOG_LEVEL
          value: "INFO"
      volumes:
      - name: config
        configMap:
          name: dummy-responder-config

Troubleshooting Configuration

Common Issues

1. Service won't start

bash
# Check configuration validity
./dummy-responder -config config.yml -help

# Validate YAML syntax
python -c "import yaml; yaml.safe_load(open('config.yml'))"

2. Port binding errors

bash
# Check if port is already in use
lsof -i :8080

# Use different port
./dummy-responder -port 8081

3. Configuration not loading

bash
# Verify file exists and is readable
ls -la config.yml

# Check file contents
cat config.yml

# Use absolute path
./dummy-responder -config /absolute/path/to/config.yml

4. Environment variables not working

bash
# Verify environment variables are set
env | grep -E "(PORT|LOG_LEVEL|HOST)"

# Test with explicit values
PORT=8080 LOG_LEVEL=DEBUG ./dummy-responder

Debug Configuration Loading

Enable debug logging to see configuration loading process:

bash
# Show configuration loading details
LOG_LEVEL=DEBUG ./dummy-responder

# Output will show:
# ✅ Configuration loaded from config.yml
# 🤖 [dummy-responder] starting with configuration:
#    📡 Server: 0.0.0.0:8080
#    📝 Log level: DEBUG
#    📄 Config file: config.yml

Next Steps

  • Try different configurations - Experiment with various settings
  • Test override priority - See how CLI flags override config files
  • Check the /config endpoint - View live configuration via HTTP
  • Monitor logs - Observe how different log levels affect output
  • Load test - Use high connection limits for stress testing

For more examples and advanced usage, see the User Guide and Developer Guide.

Released under the MIT License... (see LICENSE.md)