File size: 5,083 Bytes
6cd35fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9fb1755
6cd35fc
 
 
 
9fb1755
6cd35fc
 
 
 
 
9fb1755
6cd35fc
 
9fb1755
6cd35fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9fb1755
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6cd35fc
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/bin/bash

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Function to build the Docker image
build_image() {
    print_status "Building Docker image..."
    docker build -t algorithmic-trading:latest .
    if [ $? -eq 0 ]; then
        print_success "Docker image built successfully"
    else
        print_error "Failed to build Docker image"
        exit 1
    fi
}

# Function to run tests in Docker
run_tests() {
    print_status "Running tests in Docker..."
    docker run --rm -v $(pwd):/app algorithmic-trading:latest pytest -v
    if [ $? -eq 0 ]; then
        print_success "Tests passed"
    else
        print_error "Tests failed"
        exit 1
    fi
}

# Function to start development environment
start_dev() {
    print_status "Starting development environment..."
    docker-compose -f docker-compose.dev.yml up -d
    print_success "Development environment started"
    print_status "Jupyter Lab available at: http://localhost:8888"
    print_status "Trading system available at: http://localhost:8000"
    print_status "TensorBoard available at: http://localhost:6006"
}

# Function to start production environment
start_prod() {
    print_status "Starting production environment..."
    docker-compose -f docker-compose.prod.yml up -d
    print_success "Production environment started"
    print_status "Trading system available at: http://localhost:8000"
    print_status "Grafana available at: http://localhost:3000 (admin/admin)"
    print_status "Prometheus available at: http://localhost:9090"
}

# Function to stop all containers
stop_all() {
    print_status "Stopping all containers..."
    docker-compose -f docker-compose.yml down
    docker-compose -f docker-compose.dev.yml down
    docker-compose -f docker-compose.prod.yml down
    print_success "All containers stopped"
}

# Function to clean up Docker resources
cleanup() {
    print_status "Cleaning up Docker resources..."
    docker system prune -f
    docker volume prune -f
    print_success "Cleanup completed"
}

# Function to show logs
show_logs() {
    local service=${1:-trading-system}
    print_status "Showing logs for $service..."
    docker-compose logs -f $service
}

# Function to run a specific command in the container
run_command() {
    local command="$1"
    print_status "Running command: $command"
    docker run --rm -v $(pwd):/app algorithmic-trading:latest $command
}

# Function to show help
show_help() {
    echo "Usage: $0 [COMMAND]"
    echo ""
    echo "Commands:"
    echo "  build       Build the Docker image"
    echo "  test        Run tests in Docker"
    echo "  dev         Start development environment"
    echo "  prod        Start production environment"
    echo "  hub         Start using Docker Hub images"
    echo "  stop        Stop all containers"
    echo "  cleanup     Clean up Docker resources"
    echo "  logs [SVC]  Show logs for a service (default: trading-system)"
    echo "  run CMD     Run a specific command in the container"
    echo "  deploy      Deploy to Docker Hub (requires docker-hub-deploy.sh)"
    echo "  help        Show this help message"
    echo ""
    echo "Examples:"
    echo "  $0 build"
    echo "  $0 dev"
    echo "  $0 hub"
    echo "  $0 logs"
    echo "  $0 run 'python demo.py'"
    echo "  $0 deploy"
}

# Main script logic
case "${1:-help}" in
    build)
        build_image
        ;;
    test)
        build_image
        run_tests
        ;;
    dev)
        build_image
        start_dev
        ;;
    prod)
        build_image
        start_prod
        ;;
    stop)
        stop_all
        ;;
    cleanup)
        cleanup
        ;;
    logs)
        show_logs $2
        ;;
    run)
        if [ -z "$2" ]; then
            print_error "No command specified"
            show_help
            exit 1
        fi
        build_image
        run_command "$2"
        ;;
    hub)
        print_status "Starting services using Docker Hub images..."
        if [ -z "$DOCKER_USERNAME" ]; then
            print_error "DOCKER_USERNAME environment variable not set"
            print_status "Please set it: export DOCKER_USERNAME=yourusername"
            exit 1
        fi
        docker compose -f docker-compose.hub.yml up -d
        print_success "Docker Hub services started"
        print_status "Trading system available at: http://localhost:8000"
        print_status "Jupyter Lab available at: http://localhost:8888"
        ;;
    deploy)
        print_status "Deploying to Docker Hub..."
        if [ -f "scripts/docker-hub-deploy.sh" ]; then
            ./scripts/docker-hub-deploy.sh "$@"
        else
            print_error "docker-hub-deploy.sh not found"
            exit 1
        fi
        ;;
    help|*)
        show_help
        ;;
esac