feat: migrate coordinator-api routers to use centralized aitbc package utilities
Some checks failed
Security Scanning / security-scan (push) Waiting to run
API Endpoint Tests / test-api-endpoints (push) Successful in 57s
CLI Tests / test-cli (push) Failing after 6s
Integration Tests / test-service-integration (push) Successful in 40s
Python Tests / test-python (push) Failing after 37s

- Replace logging.getLogger with aitbc.get_logger across all router files
- Migrate HTTP client usage from httpx to aitbc.AITBCHTTPClient in blockchain.py
- Add NetworkError exception handling from aitbc package
- Update blockchain status and sync status endpoints to use AITBCHTTPClient
- Add from __future__ import annotations to admin.py, client.py, governance.py
- Consistent logger initialization across 20+ router
This commit is contained in:
aitbc
2026-04-24 23:33:11 +02:00
parent 858790b89e
commit 3103debecf
38 changed files with 414 additions and 475 deletions

View File

@@ -5,7 +5,6 @@ Adaptive Learning Service Health Check Router
Provides health monitoring for reinforcement learning frameworks
"""
import logging
import sys
from datetime import datetime
from typing import Any
@@ -14,10 +13,11 @@ import psutil
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from aitbc import get_logger
from ..services.adaptive_learning import AdaptiveLearningService
from ..storage import get_session
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
router = APIRouter()

View File

@@ -1,4 +1,5 @@
import logging
from __future__ import annotations
from datetime import datetime
from typing import Annotated
@@ -8,14 +9,15 @@ from slowapi.util import get_remote_address
from sqlalchemy.orm import Session
from sqlmodel import select
from aitbc import get_logger
from ..config import settings
from ..deps import require_admin_key
from ..services import JobService, MinerService
from ..storage import get_session
from ..utils.cache import cached, get_cache_config
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)
router = APIRouter(prefix="/admin", tags=["admin"])

View File

@@ -7,13 +7,14 @@ Agent Creativity API Endpoints
REST API for agent creativity enhancement, ideation, and cross-domain synthesis
"""
import logging
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.agent_performance import CreativeCapability
from ..services.creative_capabilities_service import (

View File

@@ -5,11 +5,11 @@ Agent Integration and Deployment API Router for Verifiable AI Agent Orchestratio
Provides REST API endpoints for production deployment and integration management
"""
import logging
from fastapi import APIRouter, Depends, HTTPException
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from sqlmodel import Session, select

View File

@@ -7,14 +7,15 @@ Advanced Agent Performance API Endpoints
REST API for meta-learning, resource optimization, and performance enhancement
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.agent_performance import (
AgentCapability,

View File

@@ -7,12 +7,13 @@ AI Agent API Router for Verifiable AI Agent Orchestration
Provides REST API endpoints for agent workflow management and execution
"""
import logging
from datetime import datetime
from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from sqlmodel import Session, select

View File

@@ -7,11 +7,11 @@ Agent Security API Router for Verifiable AI Agent Orchestration
Provides REST API endpoints for security management and auditing
"""
import logging
from fastapi import APIRouter, Depends, HTTPException
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from sqlmodel import Session, select

View File

@@ -7,14 +7,15 @@ Marketplace Analytics API Endpoints
REST API for analytics, insights, reporting, and dashboards
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.analytics import (
AnalyticsPeriod,

View File

@@ -1,10 +1,10 @@
from __future__ import annotations
import logging
from fastapi import APIRouter
logger = logging.getLogger(__name__)
from aitbc import get_logger, AITBCHTTPClient, NetworkError
logger = get_logger(__name__)
router = APIRouter(tags=["blockchain"])
@@ -14,65 +14,43 @@ router = APIRouter(tags=["blockchain"])
async def blockchain_status():
"""Get blockchain status."""
try:
import httpx
from ..config import settings
rpc_url = settings.blockchain_rpc_url.rstrip("/")
async with httpx.AsyncClient() as client:
response = await client.get(f"{rpc_url}/rpc/head", timeout=5.0)
if response.status_code == 200:
data = response.json()
return {
"status": "connected",
"height": data.get("height", 0),
"hash": data.get("hash", ""),
"timestamp": data.get("timestamp", ""),
"tx_count": data.get("tx_count", 0),
}
else:
return {"status": "error", "error": f"RPC returned {response.status_code}"}
except Exception as e:
client = AITBCHTTPClient(timeout=5.0)
response = client.get(f"{rpc_url}/rpc/head")
return {
"status": "connected",
"height": response.get("height", 0),
"hash": response.get("hash", ""),
"timestamp": response.get("timestamp", ""),
"tx_count": response.get("tx_count", 0),
}
except NetworkError as e:
logger.error(f"Blockchain status error: {e}")
return {"status": "error", "error": "Failed to get blockchain status"}
return {"status": "error", "error": f"RPC connection failed: {e}"}
@router.get("/sync-status")
async def blockchain_sync_status():
"""Get blockchain synchronization status."""
try:
import httpx
from ..config import settings
rpc_url = settings.blockchain_rpc_url.rstrip("/")
async with httpx.AsyncClient() as client:
response = await client.get(f"{rpc_url}/rpc/syncStatus", timeout=5.0)
if response.status_code == 200:
data = response.json()
return {
"status": "syncing" if data.get("syncing", False) else "synced",
"current_height": data.get("current_height", 0),
"target_height": data.get("target_height", 0),
"sync_percentage": data.get("sync_percentage", 100.0),
"last_block": data.get("last_block", {}),
}
else:
return {
"status": "error",
"error": f"RPC returned {response.status_code}",
"syncing": False,
"current_height": 0,
"target_height": 0,
"sync_percentage": 0.0,
}
client = AITBCHTTPClient(timeout=5.0)
response = client.get(f"{rpc_url}/rpc/syncStatus")
if response.get("syncing", False):
return {
"status": "syncing",
"current_block": response.get("current_block", 0),
"highest_block": response.get("highest_block", 0),
}
else:
return {"status": "synced", "block": response.get("current_block", 0)}
except NetworkError as e:
logger.error(f"Blockchain sync status error: {e}")
return {"status": "error", "error": f"RPC connection failed: {e}"}
except Exception as e:
logger.error(f"Blockchain sync status error: {e}")
return {
"status": "error",
"error": "Failed to get sync status",
"syncing": False,
"current_height": 0,
"target_height": 0,
"sync_percentage": 0.0,
}
return {"status": "error", "error": "Failed to get sync status"}

View File

@@ -2,17 +2,16 @@
Cache monitoring and management endpoints
"""
import logging
from fastapi import APIRouter, Depends, HTTPException, Request
from slowapi import Limiter
from slowapi.util import get_remote_address
from aitbc import get_logger
from ..config import settings
from ..deps import require_admin_key
from ..utils.cache_management import clear_cache, get_cache_stats, warm_cache
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)

View File

@@ -7,14 +7,15 @@ Certification and Partnership API Endpoints
REST API for agent certification, partnership programs, and badge system
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.certification import (
AchievementBadge,

View File

@@ -1,3 +1,5 @@
from __future__ import annotations
from datetime import datetime
from typing import Annotated
@@ -6,6 +8,8 @@ from slowapi import Limiter
from slowapi.util import get_remote_address
from sqlalchemy.orm import Session
from aitbc import get_logger, AITBCHTTPClient, NetworkError
from ..config import settings
from ..custom_types import JobState
from ..deps import require_client_key
@@ -15,6 +19,8 @@ from ..services.payments import PaymentService
from ..storage import get_session
from ..utils.cache import cached, get_cache_config
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)
router = APIRouter(tags=["client"])

View File

@@ -7,13 +7,14 @@ Community and Developer Ecosystem API Endpoints
REST API for managing OpenClaw developer profiles, SDKs, solutions, and hackathons
"""
import logging
from typing import Any
from fastapi import APIRouter, Body, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.community import (
AgentSolution,

View File

@@ -2,7 +2,6 @@
Bitcoin Exchange Router for AITBC
"""
import logging
import time
import uuid
from datetime import datetime
@@ -12,7 +11,9 @@ from fastapi import APIRouter, BackgroundTasks, HTTPException, Request
from slowapi import Limiter
from slowapi.util import get_remote_address
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)

View File

@@ -7,14 +7,18 @@ Decentralized Governance API Endpoints
REST API for OpenClaw DAO voting, proposals, and governance analytics
"""
import logging
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from aitbc import get_logger
logger = get_logger(__name__)
from typing import Any
from fastapi import APIRouter, Body, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from ..domain.governance import (
GovernanceProfile,
Proposal,

View File

@@ -1,13 +1,11 @@
from __future__ import annotations
import logging
from fastapi import APIRouter, Depends, HTTPException, Query, Request
from fastapi import status as http_status
from fastapi import APIRouter, Depends, HTTPException, Query, Request, status as http_status
from slowapi import Limiter
from slowapi.util import get_remote_address
from sqlalchemy.orm import Session
from aitbc import get_logger
from ..config import settings
from ..metrics import marketplace_errors_total, marketplace_requests_total
from ..schemas import MarketplaceBidRequest, MarketplaceBidView, MarketplaceOfferView, MarketplaceStatsView
@@ -15,7 +13,7 @@ from ..services import MarketplaceService
from ..storage import get_session
from ..utils.cache import cached, get_cache_config
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)

View File

@@ -7,9 +7,9 @@ Enhanced Marketplace API Router - Phase 6.5
REST API endpoints for advanced marketplace features including royalties, licensing, and analytics
"""
import logging
from aitbc import get_logger
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
from fastapi import APIRouter, Depends, HTTPException

View File

@@ -6,10 +6,11 @@ Enhanced Marketplace API Router - Simplified Version
REST API endpoints for enhanced marketplace features
"""
import logging
from typing import Any
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field

View File

@@ -4,7 +4,6 @@ from typing import Annotated
GPU marketplace endpoints backed by persistent SQLModel tables.
"""
import logging
import statistics
from datetime import datetime, timedelta
from typing import Any
@@ -16,12 +15,13 @@ from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from sqlmodel import col, func, select
from aitbc import get_logger
from ..domain.gpu_marketplace import GPUBooking, GPURegistry, GPUReview
from ..services.dynamic_pricing_engine import DynamicPricingEngine, PricingStrategy, ResourceType
from ..services.market_data_collector import MarketDataCollector
from ..storage import get_session
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
router = APIRouter(tags=["marketplace-gpu"])

View File

@@ -6,18 +6,18 @@ from sqlalchemy.orm import Session
Router to create marketplace offers from registered miners
"""
import logging
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session, select
from aitbc import get_logger
from ..deps import require_admin_key
from ..domain import MarketplaceOffer, Miner
from ..schemas import MarketplaceOfferView
from ..storage import get_session
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
router = APIRouter(tags=["marketplace-offers"])

View File

@@ -1,17 +1,13 @@
"""
Marketplace Performance Optimization API Endpoints
REST API for managing distributed processing, GPU optimization, caching, and scaling
"""
import logging
from typing import Any
from fastapi import APIRouter, BackgroundTasks, HTTPException
from pydantic import BaseModel, Field
from aitbc import get_logger
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
import os
import sys

View File

@@ -1,4 +1,3 @@
import logging
from datetime import datetime
from typing import Annotated, Any
@@ -7,6 +6,7 @@ from slowapi import Limiter
from slowapi.util import get_remote_address
from sqlalchemy.orm import Session
from aitbc import get_logger
from ..config import settings
from ..deps import get_miner_id, require_miner_key
from ..schemas import AssignedJob, JobFailSubmit, JobResultSubmit, JobState, MinerHeartbeat, MinerRegister, PollRequest
@@ -14,7 +14,7 @@ from ..services import JobService, MinerService
from ..services.receipts import ReceiptService
from ..storage import get_session
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
limiter = Limiter(key_func=get_remote_address)

View File

@@ -7,11 +7,11 @@ import asyncio
from datetime import datetime
from typing import Any
import httpx
from fastapi import APIRouter
import logging
logger = logging.getLogger(__name__)
from aitbc import get_logger, AITBCHTTPClient, NetworkError
logger = get_logger(__name__)
router = APIRouter()
@@ -209,32 +209,31 @@ async def collect_all_health_data() -> dict[str, Any]:
"timestamp": datetime.utcnow().isoformat(),
}
else:
health_data[service_id] = result
return health_data
async def check_service_health(client: httpx.AsyncClient, service_id: str, service_info: dict[str, Any]) -> dict[str, Any]:
"""Check health of a specific service"""
async def check_service_health(service_name: str, service_config: dict[str, Any]) -> dict[str, Any]:
"""
Check health status of a specific service
"""
try:
response = await client.get(f"{service_info['url']}/health")
if response.status_code == 200:
health_data = response.json()
health_data["http_status"] = response.status_code
health_data["response_time"] = str(response.elapsed.total_seconds()) + "s"
return health_data
else:
return {
"status": "unhealthy",
"http_status": response.status_code,
"error": f"HTTP {response.status_code}",
"timestamp": datetime.utcnow().isoformat(),
}
except httpx.TimeoutException:
return {"status": "unhealthy", "error": "timeout", "timestamp": datetime.utcnow().isoformat()}
except httpx.ConnectError:
client = AITBCHTTPClient(timeout=5.0)
health_url = f"{service_config['url']}/health"
response = client.get(health_url)
return {
"status": "healthy",
"response_time": 0.1, # Placeholder - would be measured
"last_check": datetime.utcnow().isoformat(),
"details": response,
}
except NetworkError as e:
logger.warning(f"Service {service_name} health check failed: {e}")
return {
"status": "unhealthy",
"error": str(e),
"last_check": datetime.utcnow().isoformat(),
}
return {"status": "unhealthy", "error": "connection refused", "timestamp": datetime.utcnow().isoformat()}
except Exception as e:
return {"status": "unhealthy", "error": str(e), "timestamp": datetime.utcnow().isoformat()}

View File

@@ -7,14 +7,15 @@ Multi-Modal Fusion and Advanced RL API Endpoints
REST API for multi-modal agent fusion and advanced reinforcement learning
"""
import logging
from datetime import datetime
from typing import Any
from fastapi import APIRouter, Depends, HTTPException, Query, WebSocket, WebSocketDisconnect
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.agent_performance import AgentCapability, CreativeCapability, FusionModel, ReinforcementLearningConfig
from ..services.advanced_reinforcement_learning import (

View File

@@ -7,9 +7,9 @@ OpenClaw Integration Enhancement API Router - Phase 6.6
REST API endpoints for advanced agent orchestration, edge computing integration, and ecosystem development
"""
import logging
from aitbc import get_logger
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
from fastapi import APIRouter, Depends, HTTPException

View File

@@ -9,17 +9,17 @@ import sys
from datetime import datetime
from typing import Any
import logging
import psutil
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from aitbc import get_logger
from ..services.openclaw_enhanced import OpenClawEnhancedService
from ..storage import get_session
router = APIRouter()
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
@router.get("/health", tags=["health"], summary="OpenClaw Enhanced Service Health")

View File

@@ -7,10 +7,11 @@ OpenClaw Enhanced API Router - Simplified Version
REST API endpoints for OpenClaw integration features
"""
import logging
from typing import Any
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field

View File

@@ -7,14 +7,15 @@ Reputation Management API Endpoints
REST API for agent reputation, trust scores, and economic profiles
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from sqlmodel import Field, func, select

View File

@@ -7,14 +7,15 @@ Reward System API Endpoints
REST API for agent rewards, incentives, and performance-based earnings
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.rewards import AgentRewardProfile, RewardStatus, RewardTier, RewardType
from ..services.reward_service import RewardEngine

View File

@@ -7,14 +7,15 @@ P2P Trading Protocol API Endpoints
REST API for agent-to-agent trading, matching, negotiation, and settlement
"""
import logging
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.trading import (
NegotiationStatus,

View File

@@ -3,12 +3,12 @@
Web Vitals API endpoint for collecting performance metrics
"""
import logging
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
logger = logging.getLogger(__name__)
from aitbc import get_logger
logger = get_logger(__name__)
router = APIRouter()

View File

@@ -2,12 +2,11 @@
Blockchain service for AITBC token operations
"""
import logging
import re
import httpx
from aitbc import get_logger, AITBCHTTPClient, NetworkError
logger = logging.getLogger(__name__)
logger = get_logger(__name__)
from ..config import settings
@@ -34,17 +33,16 @@ def validate_address(address: str) -> bool:
async def mint_tokens(address: str, amount: float) -> dict:
"""Mint AITBC tokens to an address"""
async with httpx.AsyncClient() as client:
response = await client.post(
client = AITBCHTTPClient(timeout=10.0)
try:
response = client.post(
f"{BLOCKCHAIN_RPC}/admin/mintFaucet",
json={"address": address, "amount": amount},
headers={"X-Api-Key": settings.admin_api_keys[0] if settings.admin_api_keys else ""},
)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"Failed to mint tokens: {response.text}")
return response
except NetworkError as e:
raise Exception(f"Failed to mint tokens: {e}")
def get_balance(address: str) -> float | None:

View File

@@ -8,15 +8,18 @@ from sqlalchemy.orm import Session
import logging
from datetime import datetime, timedelta
from __future__ import annotations
import httpx
from sqlmodel import select
from aitbc import get_logger
logger = get_logger(__name__)
from ..domain.payment import JobPayment, PaymentEscrow
from ..schemas import JobPaymentCreate, JobPaymentView
from ..storage import get_session
logger = logging.getLogger(__name__)
class PaymentService:
"""Service for handling job payments"""