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>
113 lines
3.8 KiB
Python
Executable File
113 lines
3.8 KiB
Python
Executable File
#!/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() |