Initial commit: BTC Bot with dashboard, TA analysis, and 14 timeframes
This commit is contained in:
36
scripts/backfill.sh
Normal file
36
scripts/backfill.sh
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
# Backfill script for Hyperliquid historical data
|
||||
# Usage: ./backfill.sh [coin] [days|max] [intervals...]
|
||||
# Examples:
|
||||
# ./backfill.sh BTC 7 "1m" # Last 7 days of 1m candles
|
||||
# ./backfill.sh BTC max "1m 1h 1d" # Maximum available data for all intervals
|
||||
|
||||
set -e
|
||||
|
||||
COIN=${1:-BTC}
|
||||
DAYS=${2:-7}
|
||||
INTERVALS=${3:-"1m"}
|
||||
|
||||
echo "=== Hyperliquid Historical Data Backfill ==="
|
||||
echo "Coin: $COIN"
|
||||
if [ "$DAYS" == "max" ]; then
|
||||
echo "Mode: MAXIMUM (up to 5000 candles per interval)"
|
||||
else
|
||||
echo "Days: $DAYS"
|
||||
fi
|
||||
echo "Intervals: $INTERVALS"
|
||||
echo ""
|
||||
|
||||
# Change to project root
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# Run backfill inside Docker container
|
||||
docker exec btc_collector python -m src.data_collector.backfill \
|
||||
--coin "$COIN" \
|
||||
--days "$DAYS" \
|
||||
--intervals $INTERVALS \
|
||||
--db-host localhost \
|
||||
--db-port 5433
|
||||
|
||||
echo ""
|
||||
echo "=== Backfill Complete ==="
|
||||
37
scripts/backup.sh
Normal file
37
scripts/backup.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
# Backup script for Synology DS218+
|
||||
# Run via Task Scheduler every 6 hours
|
||||
|
||||
BACKUP_DIR="/volume1/btc_bot/backups"
|
||||
DB_NAME="btc_data"
|
||||
DB_USER="btc_bot"
|
||||
RETENTION_DAYS=30
|
||||
DATE=$(date +%Y%m%d_%H%M)
|
||||
|
||||
echo "Starting backup at $(date)"
|
||||
|
||||
# Create backup directory if not exists
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Create backup
|
||||
docker exec btc_timescale pg_dump -U $DB_USER -Fc $DB_NAME > $BACKUP_DIR/btc_data_$DATE.dump
|
||||
|
||||
# Compress
|
||||
if [ -f "$BACKUP_DIR/btc_data_$DATE.dump" ]; then
|
||||
gzip $BACKUP_DIR/btc_data_$DATE.dump
|
||||
echo "Backup created: btc_data_$DATE.dump.gz"
|
||||
|
||||
# Calculate size
|
||||
SIZE=$(du -h $BACKUP_DIR/btc_data_$DATE.dump.gz | cut -f1)
|
||||
echo "Backup size: $SIZE"
|
||||
else
|
||||
echo "Error: Backup file not created"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Delete old backups
|
||||
DELETED=$(find $BACKUP_DIR -name "*.dump.gz" -mtime +$RETENTION_DAYS | wc -l)
|
||||
find $BACKUP_DIR -name "*.dump.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
echo "Deleted $DELETED old backup(s)"
|
||||
echo "Backup completed at $(date)"
|
||||
59
scripts/deploy.sh
Normal file
59
scripts/deploy.sh
Normal file
@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
# Deployment script for Synology DS218+
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== BTC Bot Data Collector Deployment ==="
|
||||
echo ""
|
||||
|
||||
# Check if running on Synology
|
||||
if [ ! -d "/volume1" ]; then
|
||||
echo "Warning: This script is designed for Synology NAS"
|
||||
echo "Continuing anyway..."
|
||||
fi
|
||||
|
||||
# Create directories
|
||||
echo "Creating directories..."
|
||||
mkdir -p /volume1/btc_bot/{data,backups,logs,exports}
|
||||
|
||||
# Check if Docker is installed
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "Error: Docker not found. Please install Docker package from Synology Package Center"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy configuration
|
||||
echo "Setting up configuration..."
|
||||
if [ ! -f "/volume1/btc_bot/.env" ]; then
|
||||
cp .env.example /volume1/btc_bot/.env
|
||||
echo "Created .env file. Please edit /volume1/btc_bot/.env with your settings"
|
||||
fi
|
||||
|
||||
# Build and start services
|
||||
echo "Building and starting services..."
|
||||
cd docker
|
||||
docker-compose pull
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
|
||||
# Wait for database
|
||||
echo "Waiting for database to be ready..."
|
||||
sleep 10
|
||||
|
||||
# Check status
|
||||
echo ""
|
||||
echo "=== Status ==="
|
||||
docker-compose ps
|
||||
|
||||
echo ""
|
||||
echo "=== Logs (last 20 lines) ==="
|
||||
docker-compose logs --tail=20
|
||||
|
||||
echo ""
|
||||
echo "=== Deployment Complete ==="
|
||||
echo "Database available at: localhost:5432"
|
||||
echo "API available at: http://localhost:8000"
|
||||
echo ""
|
||||
echo "To view logs: docker-compose logs -f"
|
||||
echo "To stop: docker-compose down"
|
||||
echo "To backup: ./scripts/backup.sh"
|
||||
31
scripts/health_check.sh
Normal file
31
scripts/health_check.sh
Normal file
@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
# Health check script for cron/scheduler
|
||||
|
||||
# Check if containers are running
|
||||
if ! docker ps | grep -q "btc_timescale"; then
|
||||
echo "ERROR: TimescaleDB container not running"
|
||||
# Send notification (if configured)
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker ps | grep -q "btc_collector"; then
|
||||
echo "ERROR: Data collector container not running"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check database connectivity
|
||||
docker exec btc_timescale pg_isready -U btc_bot -d btc_data > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Cannot connect to database"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if recent data exists
|
||||
LATEST=$(docker exec btc_timescale psql -U btc_bot -d btc_data -t -c "SELECT MAX(time) FROM candles WHERE time > NOW() - INTERVAL '5 minutes';" 2>/dev/null)
|
||||
if [ -z "$LATEST" ]; then
|
||||
echo "WARNING: No recent data in database"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "OK: All systems operational"
|
||||
exit 0
|
||||
33
scripts/verify_files.sh
Normal file
33
scripts/verify_files.sh
Normal file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# BTC Bot Dashboard Setup Script
|
||||
# Run this from ~/btc_bot to verify all files exist
|
||||
|
||||
echo "=== BTC Bot File Verification ==="
|
||||
echo ""
|
||||
|
||||
FILES=(
|
||||
"src/api/server.py"
|
||||
"src/api/websocket_manager.py"
|
||||
"src/api/dashboard/static/index.html"
|
||||
"docker/Dockerfile.api"
|
||||
"docker/Dockerfile.collector"
|
||||
)
|
||||
|
||||
for file in "${FILES[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null || echo "unknown")
|
||||
echo "✓ $file (${size} bytes)"
|
||||
else
|
||||
echo "✗ $file (MISSING)"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Next Steps ==="
|
||||
echo "1. If all files exist, rebuild:"
|
||||
echo " cd ~/btc_bot"
|
||||
echo " docker build --network host --no-cache -f docker/Dockerfile.api -t btc_api ."
|
||||
echo " cd docker && docker-compose up -d"
|
||||
echo ""
|
||||
echo "2. Check logs:"
|
||||
echo " docker logs btc_api --tail 20"
|
||||
Reference in New Issue
Block a user