cleanup file structure

This commit is contained in:
anthonyrawlins
2025-07-17 10:51:31 +10:00
parent ee71f208fd
commit 42d02fbb60
7 changed files with 102 additions and 33 deletions

View File

@@ -282,9 +282,11 @@ def check_component_health(component_name: str, check_function) -> Dict[str, Any
""" """
try: try:
result = check_function() result = check_function()
# Ensure details is always a dictionary
details = result if isinstance(result, dict) else {"status": result}
return { return {
"status": "healthy", "status": "healthy",
"details": result, "details": details,
"last_check": datetime.utcnow().isoformat() "last_check": datetime.utcnow().isoformat()
} }
except Exception as e: except Exception as e:

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, String, DateTime, Text from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, Boolean
from sqlalchemy.sql import func from sqlalchemy.sql import func
from ..core.database import Base from ..core.database import Base
@@ -9,6 +9,24 @@ class Project(Base):
name = Column(String, unique=True, index=True, nullable=False) name = Column(String, unique=True, index=True, nullable=False)
description = Column(Text, nullable=True) description = Column(Text, nullable=True)
status = Column(String, default="active") # e.g., active, completed, archived status = Column(String, default="active") # e.g., active, completed, archived
# GitHub Integration Fields
github_repo = Column(String, nullable=True) # owner/repo format
git_url = Column(String, nullable=True)
git_owner = Column(String, nullable=True)
git_repository = Column(String, nullable=True)
git_branch = Column(String, default="main")
# Bzzz Configuration
bzzz_enabled = Column(Boolean, default=False)
ready_to_claim = Column(Boolean, default=False)
private_repo = Column(Boolean, default=False)
github_token_required = Column(Boolean, default=False)
# Additional metadata
metadata = Column(JSON, nullable=True)
tags = Column(JSON, nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now()) created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now())

View File

@@ -258,6 +258,11 @@ class ComponentStatus(BaseModel):
status: StatusEnum = Field(..., description="Component status") status: StatusEnum = Field(..., description="Component status")
details: Optional[Dict[str, Any]] = Field(None, description="Additional status details") details: Optional[Dict[str, Any]] = Field(None, description="Additional status details")
last_check: datetime = Field(default_factory=datetime.utcnow, description="Last status check time") last_check: datetime = Field(default_factory=datetime.utcnow, description="Last status check time")
class Config:
json_encoders = {
datetime: lambda v: v.isoformat() if v else None
}
class SystemStatusResponse(BaseResponse): class SystemStatusResponse(BaseResponse):

View File

@@ -459,8 +459,8 @@ class ProjectService:
print("DEBUG: Attempting to connect to database...") print("DEBUG: Attempting to connect to database...")
# Connect to database # Connect to database
conn = psycopg2.connect( conn = psycopg2.connect(
host="192.168.1.27", host="postgres",
port=5433, port=5432,
database="hive", database="hive",
user="hive", user="hive",
password="hivepass" password="hivepass"

View File

@@ -116,8 +116,52 @@ CREATE INDEX idx_tasks_status_priority ON tasks(status, priority DESC, created_a
CREATE INDEX idx_agent_metrics_timestamp ON agent_metrics(timestamp); CREATE INDEX idx_agent_metrics_timestamp ON agent_metrics(timestamp);
CREATE INDEX idx_agent_metrics_agent_time ON agent_metrics(agent_id, timestamp); CREATE INDEX idx_agent_metrics_agent_time ON agent_metrics(agent_id, timestamp);
CREATE INDEX idx_alerts_unresolved ON alerts(resolved, created_at) WHERE resolved = false; CREATE INDEX idx_alerts_unresolved ON alerts(resolved, created_at) WHERE resolved = false;
CREATE INDEX idx_projects_name ON projects(name);
CREATE INDEX idx_projects_bzzz_enabled ON projects(bzzz_enabled) WHERE bzzz_enabled = true;
CREATE INDEX idx_projects_ready_to_claim ON projects(ready_to_claim) WHERE ready_to_claim = true;
-- Project Management for Bzzz Integration
CREATE TABLE projects (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL,
description TEXT,
status VARCHAR(50) DEFAULT 'active',
github_repo VARCHAR(255),
git_url VARCHAR(255),
git_owner VARCHAR(255),
git_repository VARCHAR(255),
git_branch VARCHAR(255) DEFAULT 'main',
bzzz_enabled BOOLEAN DEFAULT false,
ready_to_claim BOOLEAN DEFAULT false,
private_repo BOOLEAN DEFAULT false,
github_token_required BOOLEAN DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Refresh Tokens for Authentication
CREATE TABLE refresh_tokens (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
token_hash VARCHAR(255) NOT NULL,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Token Blacklist for Security
CREATE TABLE token_blacklist (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
token_hash VARCHAR(255) NOT NULL,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
blacklisted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Sample data -- Sample data
INSERT INTO users (email, hashed_password, role) VALUES INSERT INTO users (email, hashed_password, role) VALUES
('admin@hive.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/lewohT6ZErjH.2T.2', 'admin'), ('admin@hive.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/lewohT6ZErjH.2T.2', 'admin'),
('developer@hive.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/lewohT6ZErjH.2T.2', 'developer'); ('developer@hive.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/lewohT6ZErjH.2T.2', 'developer');
-- Sample project data
INSERT INTO projects (name, description, status, github_repo, git_url, git_owner, git_repository, git_branch, bzzz_enabled, ready_to_claim, private_repo, github_token_required) VALUES
('hive', 'Distributed task coordination system with AI agents', 'active', 'anthonyrawlins/hive', 'https://github.com/anthonyrawlins/hive.git', 'anthonyrawlins', 'hive', 'main', true, true, false, false),
('bzzz', 'P2P collaborative development coordination system', 'active', 'anthonyrawlins/bzzz', 'https://github.com/anthonyrawlins/bzzz.git', 'anthonyrawlins', 'bzzz', 'main', true, true, false, false);

View File

@@ -95,35 +95,35 @@ services:
- "traefik.http.services.hive-frontend.loadbalancer.passhostheader=true" - "traefik.http.services.hive-frontend.loadbalancer.passhostheader=true"
# N8N Workflow Automation # N8N Workflow Automation
n8n: # n8n:
image: n8nio/n8n # image: n8nio/n8n
volumes: # volumes:
- /rust/containers/n8n/data:/home/node/.n8n # - /rust/containers/n8n/data:/home/node/.n8n
- /rust/containers/n8n/import:/home/node/import # - /rust/containers/n8n/import:/home/node/import
environment: # environment:
- N8N_REDIS_HOST=redis # - N8N_REDIS_HOST=redis
- N8N_REDIS_PORT=6379 # - N8N_REDIS_PORT=6379
- N8N_REDIS_PASSWORD=hivepass # - N8N_REDIS_PASSWORD=hivepass
- N8N_QUEUE_BULL_REDIS_HOST=redis # - N8N_QUEUE_BULL_REDIS_HOST=redis
- N8N_QUEUE_BULL_REDIS_PORT=6379 # - N8N_QUEUE_BULL_REDIS_PORT=6379
- N8N_QUEUE_BULL_REDIS_PASSWORD=hivepass # - N8N_QUEUE_BULL_REDIS_PASSWORD=hivepass
networks: # networks:
- hive-network # - hive-network
- tengig # - tengig
ports: # ports:
- 5678:5678 # - 5678:5678
deploy: # deploy:
placement: # placement:
constraints: [] # constraints: []
# - node.hostname == walnut # - node.hostname == walnut
labels: # labels:
- "traefik.enable=true" # - "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.home.deepblack.cloud`)" # - "traefik.http.routers.n8n.rule=Host(`n8n.home.deepblack.cloud`)"
- "traefik.http.routers.n8n.entrypoints=web-secured" # - "traefik.http.routers.n8n.entrypoints=web-secured"
- "traefik.http.routers.n8n.tls.certresolver=letsencryptresolver" # - "traefik.http.routers.n8n.tls.certresolver=letsencryptresolver"
- "traefik.http.services.n8n.loadbalancer.server.port=5678" # - "traefik.http.services.n8n.loadbalancer.server.port=5678"
- "traefik.http.services.n8n.loadbalancer.passhostheader=true" # - "traefik.http.services.n8n.loadbalancer.passhostheader=true"
- "traefik.docker.network=tengig" # - "traefik.docker.network=tengig"
# PostgreSQL Database # PostgreSQL Database
postgres: postgres:

View File

@@ -40,7 +40,7 @@
"react-router-dom": "^6.28.0", "react-router-dom": "^6.28.0",
"reactflow": "^11.11.4", "reactflow": "^11.11.4",
"recharts": "^2.8.0", "recharts": "^2.8.0",
"socket.io-client": "^4.8.1", "socket.io-client": "^4.7.5",
"sonner": "^2.0.6", "sonner": "^2.0.6",
"tailwind-merge": "^2.2.0", "tailwind-merge": "^2.2.0",
"zod": "^3.22.0", "zod": "^3.22.0",