Add comprehensive database rebuild capability with complete unified schema

Features:
- Complete SQL schema file (000_complete_schema.sql) for full database rebuild
- Unified authentication system with UUID-based users, API keys, refresh tokens
- All platform tables: users, agents, workflows, tasks, executions, metrics, alerts
- Comprehensive indexing strategy for performance optimization
- Automated rebuild scripts (Python and Shell) with Docker integration
- Detailed documentation with usage instructions and troubleshooting

Schema capabilities:
 UUID-based design for scalability and consistency
 Complete authentication: JWT, API keys, password hashing, token blacklisting
 Agent management: Ollama and CLI agents with performance metrics
 Workflow orchestration: n8n integration with execution tracking
 Task management: Priority-based assignment and status tracking
 Monitoring: System alerts, performance metrics, health checks
 Default users: admin and developer accounts for immediate access

This provides a single-command database rebuild capability that creates
the complete Hive platform schema from scratch, resolving all previous
schema conflicts and providing a clean foundation for authentication
and full platform functionality.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-07-11 08:35:37 +10:00
parent eda5b2d6d3
commit c90d98dac3
4 changed files with 806 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
#!/usr/bin/env python3
"""
Database rebuild script for Hive platform.
Completely rebuilds the database schema from scratch using the unified schema.
"""
import os
import sys
import logging
import psycopg2
from pathlib import Path
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
def get_database_config():
"""Get database configuration from environment variables."""
return {
'host': os.getenv('DB_HOST', 'localhost'),
'port': os.getenv('DB_PORT', '5432'),
'database': os.getenv('DB_NAME', 'hive'),
'user': os.getenv('DB_USER', 'postgres'),
'password': os.getenv('DB_PASSWORD', 'hive123'),
}
def execute_sql_file(connection, sql_file_path):
"""Execute an SQL file against the database."""
try:
with open(sql_file_path, 'r') as file:
sql_content = file.read()
with connection.cursor() as cursor:
cursor.execute(sql_content)
connection.commit()
logger.info(f"Successfully executed {sql_file_path}")
return True
except Exception as e:
logger.error(f"Failed to execute {sql_file_path}: {e}")
connection.rollback()
return False
def main():
"""Main function to rebuild the database."""
logger.info("🔄 Starting Hive database rebuild...")
# Get database configuration
db_config = get_database_config()
logger.info(f"Connecting to database: {db_config['host']}:{db_config['port']}/{db_config['database']}")
# Connect to database
try:
connection = psycopg2.connect(**db_config)
logger.info("✅ Connected to database successfully")
except Exception as e:
logger.error(f"❌ Failed to connect to database: {e}")
sys.exit(1)
try:
# Path to the complete schema file
schema_file = Path(__file__).parent.parent / "migrations" / "000_complete_schema.sql"
if not schema_file.exists():
logger.error(f"❌ Schema file not found: {schema_file}")
sys.exit(1)
logger.info(f"📄 Using schema file: {schema_file}")
# Execute the complete schema
logger.info("🏗️ Rebuilding database schema...")
if execute_sql_file(connection, schema_file):
logger.info("✅ Database schema rebuilt successfully!")
# Verify the rebuild
with connection.cursor() as cursor:
cursor.execute("SELECT COUNT(*) FROM users;")
user_count = cursor.fetchone()[0]
cursor.execute("SELECT COUNT(*) FROM pg_tables WHERE schemaname = 'public';")
table_count = cursor.fetchone()[0]
logger.info(f"📊 Database verification:")
logger.info(f" - Tables created: {table_count}")
logger.info(f" - Initial users: {user_count}")
if user_count >= 2:
logger.info("🔐 Default users created successfully")
logger.warning("⚠️ SECURITY: Change default passwords in production!")
else:
logger.warning("⚠️ Warning: Expected at least 2 initial users")
else:
logger.error("❌ Failed to rebuild database schema")
sys.exit(1)
except Exception as e:
logger.error(f"❌ Unexpected error during rebuild: {e}")
sys.exit(1)
finally:
connection.close()
logger.info("🔌 Database connection closed")
logger.info("🎉 Hive database rebuild completed successfully!")
logger.info("🚀 Ready for authentication and full platform functionality")
if __name__ == "__main__":
main()