Some checks failed
API Endpoint Tests / test-api-endpoints (push) Successful in 56s
Blockchain Synchronization Verification / sync-verification (push) Failing after 3s
CLI Tests / test-cli (push) Failing after 5s
Coverage Phase 1 (70% Target) / test-coverage-70 (push) Failing after 19s
Coverage Phase 2 (85% Target) / test-coverage-85 (push) Failing after 18s
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Successful in 3s
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Successful in 4s
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Successful in 5s
Deploy to Testnet / deploy-testnet (push) Failing after 21s
Documentation Validation / validate-docs (push) Failing after 13s
Documentation Validation / validate-policies-strict (push) Successful in 4s
Integration Tests / test-service-integration (push) Failing after 2s
Multi-Chain Island Architecture Tests / test-multi-chain-island (push) Successful in 4s
Multi-Node Blockchain Health Monitoring / health-check (push) Failing after 14s
Node Failover Simulation / failover-test (push) Successful in 9s
P2P Network Verification / p2p-verification (push) Successful in 5s
Package Tests / Python package - aitbc-agent-sdk (push) Successful in 51s
Package Tests / Python package - aitbc-core (push) Failing after 3s
Package Tests / Python package - aitbc-crypto (push) Successful in 22s
Package Tests / Python package - aitbc-sdk (push) Successful in 16s
Package Tests / JavaScript package - aitbc-sdk-js (push) Successful in 21s
Package Tests / JavaScript package - aitbc-token (push) Failing after 18s
Production Tests / Production Integration Tests (push) Failing after 1m9s
Python Tests / test-python (push) Failing after 3s
Security Scanning / security-scan (push) Failing after 41s
Smart Contract Tests / test-solidity (map[name:aitbc-contracts path:contracts]) (push) Failing after 6s
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Failing after 7s
Smart Contract Tests / test-foundry (push) Failing after 20s
Smart Contract Tests / lint-solidity (push) Failing after 4s
Smart Contract Tests / deploy-contracts (push) Failing after 5s
Cross-Chain Functionality Tests / aggregate-results (push) Successful in 2s
Multi-Node Stress Testing / stress-test (push) Successful in 2s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s
Phase 1: Security fixes - Added CORSMiddleware to marketplace-service with specific origins - Fixed blockchain-node auth to fail closed on JWT errors - Added security regression tests (test_cors_configuration.py, test_dispute_auth.py) Phase 2: Repository cleanup - Removed 51 fix/backup/legacy files - Deleted marketplace-service-debug directory Phase 3.1: Python version constraints - Updated aitbc-crypto and aitbc-sdk with requires-python >=3.13 - Added explicit [tool.poetry].packages declarations Phase 3.2: Agent service DI architecture - Created aitbc-agent-core package with protocols and shared service - Implemented adapters for agent-management and coordinator-api - Created factory functions for gradual migration - Added migration comments to existing integration files Phase 4.1: Auth/utils extraction - Created auth.py module with JWT validation and security utilities - Created utils.py module with common helpers Phase 4.2: Router decomposition - Decomposed router.py into 10 domain modules (58 endpoints) - Created route table snapshot for verification - Preserved router_old.py as reference Phase 5: App shell classification - Documented app shell patterns across services Phase 6: Quality gates - Verified mypy type checking (75% error reduction) - Analyzed logging inconsistencies with structlog migration plan - Removed unused orjson dependency Documentation: - Created comprehensive remediation report - Added architecture documentation for DI pattern - Added quality analysis documents
5.7 KiB
5.7 KiB
Logging Inconsistencies Analysis
Current State
The codebase uses multiple logging approaches inconsistently across different modules:
Logging Patterns in Use
-
Custom AITBC Logging (
aitbc.aitbc_logging)- Used by: blockchain-event-bridge, CLI (legacy)
- Pattern:
from aitbc.aitbc_logging import get_logger - Files: ~10+ files
-
App-Specific Logging (agent-management)
- Used by: agent-management app
- Pattern:
from .core.logging import setup_logging, get_logger - Files: 2+ files
-
Stdlib Logging (
logging)- Used by: training_setup, examples, scripts
- Pattern:
import logging - Files: ~10+ files
-
Rich Logging (
rich.logging)- Used by: CLI utils
- Pattern:
from rich.logging import RichHandler - Files: 1 file
-
Structlog (in dependencies)
- Listed in pyproject.toml:
structlog = ">=25.1.0" - Not consistently used across codebase
- Files: 0 active usage found
- Listed in pyproject.toml:
Inconsistency Issues
Problems
- No single source of truth: Different apps use different logging approaches
- Configuration fragmentation: Each logging pattern requires separate configuration
- Maintenance burden: Changes to logging behavior require updates in multiple places
- Inconsistent log formats: Different loggers produce different output formats
- Testing complexity: Mocking different logging patterns requires different approaches
Impact
- Difficult to enforce consistent logging standards
- Hard to aggregate logs across services
- Inconsistent log levels and formats
- Increased cognitive load for developers
Standardization Recommendation
Proposed Approach: Structlog with AITBC Wrapper
Rationale:
structlogis already in dependencies (>=25.1.0)- Provides structured logging with JSON output for production
- Supports multiple output formats (console, JSON, file)
- Integrates well with modern observability stacks
- Can wrap stdlib logging for backward compatibility
Implementation Plan
Phase 1: Create Standardized Logging Module
Create aitbc/aitbc_logging.py with structlog-based implementation:
"""
Standardized logging for AITBC using structlog.
Provides consistent logging across all services.
"""
import structlog
from typing import Any
import logging
import sys
def setup_logging(
level: int = logging.INFO,
json_output: bool = False,
service_name: str = "aitbc"
) -> None:
"""Configure structlog for the application."""
# Configure structlog processors
processors = [
structlog.stdlib.add_log_level,
structlog.stdlib.add_logger_name,
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
]
if json_output:
processors.append(structlog.processors.JSONRenderer())
else:
processors.append(structlog.dev.ConsoleRenderer())
structlog.configure(
processors=processors,
context_class=dict,
logger_factory=structlog.stdlib.LoggerFactory(),
cache_logger_on_first_use=True,
)
# Configure stdlib logging
logging.basicConfig(
format="%(message)s",
level=level,
stream=sys.stdout,
)
def get_logger(name: str) -> structlog.stdlib.BoundLogger:
"""Get a structured logger for the given module."""
return structlog.get_logger(name)
Phase 2: Gradual Migration
Priority Order:
- High Priority: blockchain-node, coordinator-api (core services)
- Medium Priority: agent-management, marketplace-service
- Low Priority: examples, scripts, stubs
Migration Pattern:
# Before
import logging
logger = logging.getLogger(__name__)
# After
from aitbc.aitbc_logging import get_logger
logger = get_logger(__name__)
Phase 3: Configuration Standardization
Environment Variables:
AITBC_LOG_LEVEL: Default log level (INFO, DEBUG, WARNING, ERROR)AITBC_LOG_FORMAT: Output format (json, console)AITBC_SERVICE_NAME: Service name for log aggregation
Example Configuration:
import os
from aitbc.aitbc_logging import setup_logging
setup_logging(
level=getattr(logging, os.getenv("AITBC_LOG_LEVEL", "INFO")),
json_output=os.getenv("AITBC_LOG_FORMAT", "console") == "json",
service_name=os.getenv("AITBC_SERVICE_NAME", "aitbc"),
)
Migration Status
Current State
- ✅ structlog in dependencies
- ⏸️ Custom logging modules exist (aitbc_logging, app-specific)
- ⏸️ Inconsistent usage across codebase
- ⏸️ No standardized configuration
Recommended Next Steps
- Update
aitbc/aitbc_logging.pyto use structlog - Create migration guide for developers
- Migrate core services (blockchain-node, coordinator-api)
- Update CI/CD to use standardized logging
- Remove app-specific logging modules after migration
Benefits of Standardization
- Consistency: Single logging approach across all services
- Observability: Structured logs for better log aggregation
- Flexibility: Easy to switch between console and JSON output
- Performance: Structlog is optimized for production use
- Maintainability: Single module to maintain and update
Risk Mitigation
- Backward Compatibility: Keep existing logging during migration
- Gradual Rollout: Migrate one service at a time
- Testing: Verify log output after each migration
- Rollback Plan: Can revert to old logging if issues arise
- Documentation: Clear migration guide for developers
Success Criteria
- All services use standardized logging
- Consistent log format across codebase
- Structlog configuration documented
- Migration guide created
- CI/CD uses standardized logging
- App-specific logging modules removed