unrealon 1.0.9__py3-none-any.whl → 1.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- unrealon/__init__.py +23 -21
- unrealon-1.1.1.dist-info/METADATA +722 -0
- unrealon-1.1.1.dist-info/RECORD +82 -0
- {unrealon-1.0.9.dist-info → unrealon-1.1.1.dist-info}/WHEEL +1 -1
- unrealon-1.1.1.dist-info/entry_points.txt +9 -0
- {unrealon-1.0.9.dist-info → unrealon-1.1.1.dist-info/licenses}/LICENSE +1 -1
- unrealon_bridge/__init__.py +114 -0
- unrealon_bridge/cli.py +316 -0
- unrealon_bridge/client/__init__.py +93 -0
- unrealon_bridge/client/base.py +78 -0
- unrealon_bridge/client/commands.py +89 -0
- unrealon_bridge/client/connection.py +90 -0
- unrealon_bridge/client/events.py +65 -0
- unrealon_bridge/client/health.py +38 -0
- unrealon_bridge/client/html_parser.py +146 -0
- unrealon_bridge/client/logging.py +139 -0
- unrealon_bridge/client/proxy.py +70 -0
- unrealon_bridge/client/scheduler.py +450 -0
- unrealon_bridge/client/session.py +70 -0
- unrealon_bridge/configs/__init__.py +14 -0
- unrealon_bridge/configs/bridge_config.py +212 -0
- unrealon_bridge/configs/bridge_config.yaml +39 -0
- unrealon_bridge/models/__init__.py +138 -0
- unrealon_bridge/models/base.py +28 -0
- unrealon_bridge/models/command.py +41 -0
- unrealon_bridge/models/events.py +40 -0
- unrealon_bridge/models/html_parser.py +79 -0
- unrealon_bridge/models/logging.py +55 -0
- unrealon_bridge/models/parser.py +63 -0
- unrealon_bridge/models/proxy.py +41 -0
- unrealon_bridge/models/requests.py +95 -0
- unrealon_bridge/models/responses.py +88 -0
- unrealon_bridge/models/scheduler.py +592 -0
- unrealon_bridge/models/session.py +28 -0
- unrealon_bridge/server/__init__.py +91 -0
- unrealon_bridge/server/base.py +171 -0
- unrealon_bridge/server/handlers/__init__.py +23 -0
- unrealon_bridge/server/handlers/command.py +110 -0
- unrealon_bridge/server/handlers/html_parser.py +139 -0
- unrealon_bridge/server/handlers/logging.py +95 -0
- unrealon_bridge/server/handlers/parser.py +95 -0
- unrealon_bridge/server/handlers/proxy.py +75 -0
- unrealon_bridge/server/handlers/scheduler.py +545 -0
- unrealon_bridge/server/handlers/session.py +66 -0
- unrealon_browser/__init__.py +61 -18
- unrealon_browser/{src/cli → cli}/browser_cli.py +6 -13
- unrealon_browser/{src/cli → cli}/cookies_cli.py +5 -1
- unrealon_browser/{src/core → core}/browser_manager.py +2 -2
- unrealon_browser/{src/managers → managers}/captcha.py +1 -1
- unrealon_browser/{src/managers → managers}/cookies.py +1 -1
- unrealon_browser/managers/logger_bridge.py +231 -0
- unrealon_browser/{src/managers → managers}/profile.py +1 -1
- unrealon_driver/__init__.py +73 -19
- unrealon_driver/browser/__init__.py +8 -0
- unrealon_driver/browser/config.py +74 -0
- unrealon_driver/browser/manager.py +416 -0
- unrealon_driver/exceptions.py +28 -0
- unrealon_driver/parser/__init__.py +55 -0
- unrealon_driver/parser/cli_manager.py +141 -0
- unrealon_driver/parser/daemon_manager.py +227 -0
- unrealon_driver/parser/managers/__init__.py +46 -0
- unrealon_driver/parser/managers/browser.py +51 -0
- unrealon_driver/parser/managers/config.py +281 -0
- unrealon_driver/parser/managers/error.py +412 -0
- unrealon_driver/parser/managers/html.py +732 -0
- unrealon_driver/parser/managers/logging.py +609 -0
- unrealon_driver/parser/managers/result.py +321 -0
- unrealon_driver/parser/parser_manager.py +628 -0
- unrealon/sdk_config.py +0 -88
- unrealon-1.0.9.dist-info/METADATA +0 -810
- unrealon-1.0.9.dist-info/RECORD +0 -246
- unrealon_browser/pyproject.toml +0 -182
- unrealon_browser/src/__init__.py +0 -62
- unrealon_browser/src/managers/logger_bridge.py +0 -395
- unrealon_driver/README.md +0 -204
- unrealon_driver/pyproject.toml +0 -187
- unrealon_driver/src/__init__.py +0 -90
- unrealon_driver/src/cli/__init__.py +0 -10
- unrealon_driver/src/cli/main.py +0 -66
- unrealon_driver/src/cli/simple.py +0 -510
- unrealon_driver/src/config/__init__.py +0 -11
- unrealon_driver/src/config/auto_config.py +0 -478
- unrealon_driver/src/core/__init__.py +0 -18
- unrealon_driver/src/core/exceptions.py +0 -289
- unrealon_driver/src/core/parser.py +0 -638
- unrealon_driver/src/dto/__init__.py +0 -66
- unrealon_driver/src/dto/cli.py +0 -119
- unrealon_driver/src/dto/config.py +0 -18
- unrealon_driver/src/dto/events.py +0 -237
- unrealon_driver/src/dto/execution.py +0 -313
- unrealon_driver/src/dto/services.py +0 -311
- unrealon_driver/src/execution/__init__.py +0 -23
- unrealon_driver/src/execution/daemon_mode.py +0 -317
- unrealon_driver/src/execution/interactive_mode.py +0 -88
- unrealon_driver/src/execution/modes.py +0 -45
- unrealon_driver/src/execution/scheduled_mode.py +0 -209
- unrealon_driver/src/execution/test_mode.py +0 -250
- unrealon_driver/src/logging/__init__.py +0 -24
- unrealon_driver/src/logging/driver_logger.py +0 -512
- unrealon_driver/src/services/__init__.py +0 -24
- unrealon_driver/src/services/browser_service.py +0 -726
- unrealon_driver/src/services/llm/__init__.py +0 -15
- unrealon_driver/src/services/llm/browser_llm_service.py +0 -363
- unrealon_driver/src/services/llm/llm.py +0 -195
- unrealon_driver/src/services/logger_service.py +0 -232
- unrealon_driver/src/services/metrics_service.py +0 -185
- unrealon_driver/src/services/scheduler_service.py +0 -489
- unrealon_driver/src/services/websocket_service.py +0 -362
- unrealon_driver/src/utils/__init__.py +0 -16
- unrealon_driver/src/utils/service_factory.py +0 -317
- unrealon_driver/src/utils/time_formatter.py +0 -338
- unrealon_llm/README.md +0 -44
- unrealon_llm/__init__.py +0 -26
- unrealon_llm/pyproject.toml +0 -154
- unrealon_llm/src/__init__.py +0 -228
- unrealon_llm/src/cli/__init__.py +0 -0
- unrealon_llm/src/core/__init__.py +0 -11
- unrealon_llm/src/core/smart_client.py +0 -438
- unrealon_llm/src/dto/__init__.py +0 -155
- unrealon_llm/src/dto/models/__init__.py +0 -0
- unrealon_llm/src/dto/models/config.py +0 -343
- unrealon_llm/src/dto/models/core.py +0 -328
- unrealon_llm/src/dto/models/enums.py +0 -123
- unrealon_llm/src/dto/models/html_analysis.py +0 -345
- unrealon_llm/src/dto/models/statistics.py +0 -473
- unrealon_llm/src/dto/models/translation.py +0 -383
- unrealon_llm/src/dto/models/type_conversion.py +0 -462
- unrealon_llm/src/dto/schemas/__init__.py +0 -0
- unrealon_llm/src/exceptions.py +0 -392
- unrealon_llm/src/llm_config/__init__.py +0 -20
- unrealon_llm/src/llm_config/logging_config.py +0 -178
- unrealon_llm/src/llm_logging/__init__.py +0 -42
- unrealon_llm/src/llm_logging/llm_events.py +0 -107
- unrealon_llm/src/llm_logging/llm_logger.py +0 -466
- unrealon_llm/src/managers/__init__.py +0 -15
- unrealon_llm/src/managers/cache_manager.py +0 -67
- unrealon_llm/src/managers/cost_manager.py +0 -107
- unrealon_llm/src/managers/request_manager.py +0 -298
- unrealon_llm/src/modules/__init__.py +0 -0
- unrealon_llm/src/modules/html_processor/__init__.py +0 -25
- unrealon_llm/src/modules/html_processor/base_processor.py +0 -415
- unrealon_llm/src/modules/html_processor/details_processor.py +0 -85
- unrealon_llm/src/modules/html_processor/listing_processor.py +0 -91
- unrealon_llm/src/modules/html_processor/models/__init__.py +0 -20
- unrealon_llm/src/modules/html_processor/models/processing_models.py +0 -40
- unrealon_llm/src/modules/html_processor/models/universal_model.py +0 -56
- unrealon_llm/src/modules/html_processor/processor.py +0 -102
- unrealon_llm/src/modules/llm/__init__.py +0 -0
- unrealon_llm/src/modules/translator/__init__.py +0 -0
- unrealon_llm/src/provider.py +0 -116
- unrealon_llm/src/utils/__init__.py +0 -95
- unrealon_llm/src/utils/common.py +0 -64
- unrealon_llm/src/utils/data_extractor.py +0 -188
- unrealon_llm/src/utils/html_cleaner.py +0 -767
- unrealon_llm/src/utils/language_detector.py +0 -308
- unrealon_llm/src/utils/models_cache.py +0 -592
- unrealon_llm/src/utils/smart_counter.py +0 -229
- unrealon_llm/src/utils/token_counter.py +0 -189
- unrealon_sdk/README.md +0 -25
- unrealon_sdk/__init__.py +0 -30
- unrealon_sdk/pyproject.toml +0 -231
- unrealon_sdk/src/__init__.py +0 -150
- unrealon_sdk/src/cli/__init__.py +0 -12
- unrealon_sdk/src/cli/commands/__init__.py +0 -22
- unrealon_sdk/src/cli/commands/benchmark.py +0 -42
- unrealon_sdk/src/cli/commands/diagnostics.py +0 -573
- unrealon_sdk/src/cli/commands/health.py +0 -46
- unrealon_sdk/src/cli/commands/integration.py +0 -498
- unrealon_sdk/src/cli/commands/reports.py +0 -43
- unrealon_sdk/src/cli/commands/security.py +0 -36
- unrealon_sdk/src/cli/commands/server.py +0 -483
- unrealon_sdk/src/cli/commands/servers.py +0 -56
- unrealon_sdk/src/cli/commands/tests.py +0 -55
- unrealon_sdk/src/cli/main.py +0 -126
- unrealon_sdk/src/cli/utils/reporter.py +0 -519
- unrealon_sdk/src/clients/openapi.yaml +0 -3347
- unrealon_sdk/src/clients/python_http/__init__.py +0 -3
- unrealon_sdk/src/clients/python_http/api_config.py +0 -228
- unrealon_sdk/src/clients/python_http/models/BaseModel.py +0 -12
- unrealon_sdk/src/clients/python_http/models/BroadcastDeliveryStats.py +0 -33
- unrealon_sdk/src/clients/python_http/models/BroadcastMessage.py +0 -17
- unrealon_sdk/src/clients/python_http/models/BroadcastMessageRequest.py +0 -35
- unrealon_sdk/src/clients/python_http/models/BroadcastPriority.py +0 -10
- unrealon_sdk/src/clients/python_http/models/BroadcastResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/BroadcastResultResponse.py +0 -33
- unrealon_sdk/src/clients/python_http/models/BroadcastTarget.py +0 -11
- unrealon_sdk/src/clients/python_http/models/ConnectionStats.py +0 -27
- unrealon_sdk/src/clients/python_http/models/ConnectionsResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/DeveloperMessageResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ErrorResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/HTTPValidationError.py +0 -16
- unrealon_sdk/src/clients/python_http/models/HealthResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/HealthStatus.py +0 -33
- unrealon_sdk/src/clients/python_http/models/LogLevel.py +0 -10
- unrealon_sdk/src/clients/python_http/models/LoggingRequest.py +0 -27
- unrealon_sdk/src/clients/python_http/models/LoggingResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/MaintenanceMode.py +0 -9
- unrealon_sdk/src/clients/python_http/models/MaintenanceModeRequest.py +0 -33
- unrealon_sdk/src/clients/python_http/models/MaintenanceStatusResponse.py +0 -39
- unrealon_sdk/src/clients/python_http/models/ParserCommandRequest.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ParserMessageResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/ParserRegistrationRequest.py +0 -28
- unrealon_sdk/src/clients/python_http/models/ParserRegistrationResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ParserType.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyBlockRequest.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyEndpointResponse.py +0 -20
- unrealon_sdk/src/clients/python_http/models/ProxyListResponse.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyProvider.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyPurchaseRequest.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ProxyResponse.py +0 -47
- unrealon_sdk/src/clients/python_http/models/ProxyRotationRequest.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ProxyStatus.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyUsageRequest.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyUsageStatsResponse.py +0 -26
- unrealon_sdk/src/clients/python_http/models/ServiceRegistrationDto.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ServiceStatsResponse.py +0 -31
- unrealon_sdk/src/clients/python_http/models/SessionStartRequest.py +0 -23
- unrealon_sdk/src/clients/python_http/models/SuccessResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/SystemNotificationResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ValidationError.py +0 -18
- unrealon_sdk/src/clients/python_http/models/ValidationErrorResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/WebSocketMetrics.py +0 -21
- unrealon_sdk/src/clients/python_http/models/__init__.py +0 -44
- unrealon_sdk/src/clients/python_http/services/None_service.py +0 -35
- unrealon_sdk/src/clients/python_http/services/ParserManagement_service.py +0 -190
- unrealon_sdk/src/clients/python_http/services/ProxyManagement_service.py +0 -289
- unrealon_sdk/src/clients/python_http/services/SocketLogging_service.py +0 -187
- unrealon_sdk/src/clients/python_http/services/SystemHealth_service.py +0 -119
- unrealon_sdk/src/clients/python_http/services/WebSocketAPI_service.py +0 -198
- unrealon_sdk/src/clients/python_http/services/__init__.py +0 -0
- unrealon_sdk/src/clients/python_http/services/admin_service.py +0 -125
- unrealon_sdk/src/clients/python_http/services/async_None_service.py +0 -35
- unrealon_sdk/src/clients/python_http/services/async_ParserManagement_service.py +0 -190
- unrealon_sdk/src/clients/python_http/services/async_ProxyManagement_service.py +0 -289
- unrealon_sdk/src/clients/python_http/services/async_SocketLogging_service.py +0 -189
- unrealon_sdk/src/clients/python_http/services/async_SystemHealth_service.py +0 -123
- unrealon_sdk/src/clients/python_http/services/async_WebSocketAPI_service.py +0 -200
- unrealon_sdk/src/clients/python_http/services/async_admin_service.py +0 -125
- unrealon_sdk/src/clients/python_websocket/__init__.py +0 -28
- unrealon_sdk/src/clients/python_websocket/client.py +0 -490
- unrealon_sdk/src/clients/python_websocket/events.py +0 -732
- unrealon_sdk/src/clients/python_websocket/example.py +0 -136
- unrealon_sdk/src/clients/python_websocket/types.py +0 -871
- unrealon_sdk/src/core/__init__.py +0 -64
- unrealon_sdk/src/core/client.py +0 -556
- unrealon_sdk/src/core/config.py +0 -465
- unrealon_sdk/src/core/exceptions.py +0 -239
- unrealon_sdk/src/core/metadata.py +0 -191
- unrealon_sdk/src/core/models.py +0 -142
- unrealon_sdk/src/core/types.py +0 -68
- unrealon_sdk/src/dto/__init__.py +0 -268
- unrealon_sdk/src/dto/authentication.py +0 -108
- unrealon_sdk/src/dto/cache.py +0 -208
- unrealon_sdk/src/dto/common.py +0 -19
- unrealon_sdk/src/dto/concurrency.py +0 -393
- unrealon_sdk/src/dto/events.py +0 -108
- unrealon_sdk/src/dto/health.py +0 -339
- unrealon_sdk/src/dto/load_balancing.py +0 -336
- unrealon_sdk/src/dto/logging.py +0 -230
- unrealon_sdk/src/dto/performance.py +0 -165
- unrealon_sdk/src/dto/rate_limiting.py +0 -295
- unrealon_sdk/src/dto/resource_pooling.py +0 -128
- unrealon_sdk/src/dto/structured_logging.py +0 -112
- unrealon_sdk/src/dto/task_scheduling.py +0 -121
- unrealon_sdk/src/dto/websocket.py +0 -55
- unrealon_sdk/src/enterprise/__init__.py +0 -59
- unrealon_sdk/src/enterprise/authentication.py +0 -401
- unrealon_sdk/src/enterprise/cache_manager.py +0 -578
- unrealon_sdk/src/enterprise/error_recovery.py +0 -494
- unrealon_sdk/src/enterprise/event_system.py +0 -549
- unrealon_sdk/src/enterprise/health_monitor.py +0 -747
- unrealon_sdk/src/enterprise/load_balancer.py +0 -964
- unrealon_sdk/src/enterprise/logging/__init__.py +0 -68
- unrealon_sdk/src/enterprise/logging/cleanup.py +0 -156
- unrealon_sdk/src/enterprise/logging/development.py +0 -744
- unrealon_sdk/src/enterprise/logging/service.py +0 -410
- unrealon_sdk/src/enterprise/multithreading_manager.py +0 -853
- unrealon_sdk/src/enterprise/performance_monitor.py +0 -539
- unrealon_sdk/src/enterprise/proxy_manager.py +0 -696
- unrealon_sdk/src/enterprise/rate_limiter.py +0 -652
- unrealon_sdk/src/enterprise/resource_pool.py +0 -763
- unrealon_sdk/src/enterprise/task_scheduler.py +0 -709
- unrealon_sdk/src/internal/__init__.py +0 -10
- unrealon_sdk/src/internal/command_router.py +0 -497
- unrealon_sdk/src/internal/connection_manager.py +0 -397
- unrealon_sdk/src/internal/http_client.py +0 -446
- unrealon_sdk/src/internal/websocket_client.py +0 -420
- unrealon_sdk/src/provider.py +0 -471
- unrealon_sdk/src/utils.py +0 -234
- /unrealon_browser/{src/cli → cli}/__init__.py +0 -0
- /unrealon_browser/{src/cli → cli}/interactive_mode.py +0 -0
- /unrealon_browser/{src/cli → cli}/main.py +0 -0
- /unrealon_browser/{src/core → core}/__init__.py +0 -0
- /unrealon_browser/{src/dto → dto}/__init__.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/config.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/core.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/dataclasses.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/detection.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/enums.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/statistics.py +0 -0
- /unrealon_browser/{src/managers → managers}/__init__.py +0 -0
- /unrealon_browser/{src/managers → managers}/stealth.py +0 -0
unrealon_sdk/src/cli/main.py
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
UnrealOn SDK CLI - Simplified & Optimal
|
|
3
|
-
|
|
4
|
-
🚀 Simple and powerful CLI for SDK testing and diagnostics
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import click
|
|
8
|
-
import questionary
|
|
9
|
-
from rich.console import Console
|
|
10
|
-
from rich.panel import Panel
|
|
11
|
-
from rich.text import Text
|
|
12
|
-
from rich import box
|
|
13
|
-
|
|
14
|
-
# Import command functions
|
|
15
|
-
from .commands.security import run_security_scan
|
|
16
|
-
from .commands.benchmark import run_performance_benchmark
|
|
17
|
-
from .commands.health import run_health_check
|
|
18
|
-
from .commands.tests import run_all_tests
|
|
19
|
-
from .commands.servers import start_mock_server, manage_servers
|
|
20
|
-
from .commands.reports import generate_report
|
|
21
|
-
|
|
22
|
-
console = Console()
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def print_banner():
|
|
26
|
-
"""Print beautiful CLI banner."""
|
|
27
|
-
banner = Text()
|
|
28
|
-
banner.append("🚀 UnrealOn SDK ", style="bold blue")
|
|
29
|
-
banner.append("CLI Tools", style="bold white")
|
|
30
|
-
banner.append(" v1.0", style="dim")
|
|
31
|
-
|
|
32
|
-
panel = Panel(
|
|
33
|
-
banner, title="[bold]Testing & Diagnostics[/bold]", box=box.DOUBLE, border_style="blue"
|
|
34
|
-
)
|
|
35
|
-
console.print(panel)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@click.group(invoke_without_command=True)
|
|
39
|
-
@click.option("--verbose", "-v", is_flag=True, help="Verbose output")
|
|
40
|
-
@click.pass_context
|
|
41
|
-
def cli(ctx, verbose):
|
|
42
|
-
"""🚀 UnrealOn SDK CLI Tools"""
|
|
43
|
-
ctx.ensure_object(dict)
|
|
44
|
-
ctx.obj["verbose"] = verbose
|
|
45
|
-
|
|
46
|
-
# If no command specified - run interactive mode
|
|
47
|
-
if ctx.invoked_subcommand is None:
|
|
48
|
-
print_banner()
|
|
49
|
-
interactive_menu()
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def interactive_menu():
|
|
53
|
-
"""Interactive menu."""
|
|
54
|
-
while True:
|
|
55
|
-
console.print("\n[bold blue]Choose an action:[/bold blue]")
|
|
56
|
-
|
|
57
|
-
action = questionary.select(
|
|
58
|
-
"",
|
|
59
|
-
choices=[
|
|
60
|
-
"🔒 Security - Vulnerability scanning",
|
|
61
|
-
"⚡ Benchmark - Performance testing",
|
|
62
|
-
"🧪 Tests - Run all tests",
|
|
63
|
-
"🩺 Health - System health check",
|
|
64
|
-
"🖥️ Servers - Start mock servers",
|
|
65
|
-
"📊 Report - Generate report",
|
|
66
|
-
"❌ Exit",
|
|
67
|
-
],
|
|
68
|
-
).ask()
|
|
69
|
-
|
|
70
|
-
if not action or "Exit" in action:
|
|
71
|
-
console.print("[green]Goodbye! 👋[/green]")
|
|
72
|
-
break
|
|
73
|
-
|
|
74
|
-
if "Security" in action:
|
|
75
|
-
run_security_scan()
|
|
76
|
-
elif "Benchmark" in action:
|
|
77
|
-
run_performance_benchmark()
|
|
78
|
-
elif "Tests" in action:
|
|
79
|
-
run_all_tests()
|
|
80
|
-
elif "Health" in action:
|
|
81
|
-
run_health_check()
|
|
82
|
-
elif "Servers" in action:
|
|
83
|
-
manage_servers()
|
|
84
|
-
elif "Report" in action:
|
|
85
|
-
generate_report()
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
@cli.command()
|
|
89
|
-
def security():
|
|
90
|
-
"""🔒 Quick security check."""
|
|
91
|
-
run_security_scan()
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
@cli.command()
|
|
95
|
-
def benchmark():
|
|
96
|
-
"""⚡ Quick benchmarks."""
|
|
97
|
-
run_performance_benchmark()
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
@cli.command()
|
|
101
|
-
def test():
|
|
102
|
-
"""🧪 Run all tests."""
|
|
103
|
-
run_all_tests()
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
@cli.command()
|
|
107
|
-
def health():
|
|
108
|
-
"""🩺 System health check."""
|
|
109
|
-
run_health_check()
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
@cli.command()
|
|
113
|
-
@click.option("--port", default=18765, help="WebSocket port")
|
|
114
|
-
def server(port):
|
|
115
|
-
"""🖥️ Start mock server."""
|
|
116
|
-
start_mock_server(port)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
@cli.command()
|
|
120
|
-
def report():
|
|
121
|
-
"""📊 Generate report."""
|
|
122
|
-
generate_report()
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if __name__ == "__main__":
|
|
126
|
-
cli()
|
|
@@ -1,519 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Comprehensive Report Generator
|
|
3
|
-
|
|
4
|
-
Generate detailed reports for all SDK testing and analysis.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
import subprocess
|
|
9
|
-
from datetime import datetime
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
from typing import Dict, List, Any, Optional
|
|
12
|
-
from rich.console import Console
|
|
13
|
-
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
14
|
-
|
|
15
|
-
console = Console()
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def generate_comprehensive_report(
|
|
19
|
-
output_dir: str = "reports/", format: str = "html", verbose: bool = False
|
|
20
|
-
) -> str:
|
|
21
|
-
"""Generate comprehensive SDK analysis report."""
|
|
22
|
-
|
|
23
|
-
report_data = {
|
|
24
|
-
"metadata": generate_report_metadata(),
|
|
25
|
-
"security": run_security_analysis(verbose),
|
|
26
|
-
"performance": run_performance_analysis(verbose),
|
|
27
|
-
"integration": run_integration_analysis(verbose),
|
|
28
|
-
"health": run_health_analysis(verbose),
|
|
29
|
-
"coverage": run_coverage_analysis(verbose),
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
# Create output directory
|
|
33
|
-
output_path = Path(output_dir)
|
|
34
|
-
output_path.mkdir(exist_ok=True)
|
|
35
|
-
|
|
36
|
-
# Generate report based on format
|
|
37
|
-
if format == "html":
|
|
38
|
-
report_file = generate_html_report(report_data, output_path)
|
|
39
|
-
elif format == "json":
|
|
40
|
-
report_file = generate_json_report(report_data, output_path)
|
|
41
|
-
elif format == "markdown":
|
|
42
|
-
report_file = generate_markdown_report(report_data, output_path)
|
|
43
|
-
else:
|
|
44
|
-
raise ValueError(f"Unsupported format: {format}")
|
|
45
|
-
|
|
46
|
-
return str(report_file)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def generate_report_metadata() -> Dict[str, Any]:
|
|
50
|
-
"""Generate report metadata."""
|
|
51
|
-
return {
|
|
52
|
-
"title": "UnrealOn SDK Comprehensive Analysis Report",
|
|
53
|
-
"generated_at": datetime.now().isoformat(),
|
|
54
|
-
"sdk_version": "1.0.0",
|
|
55
|
-
"python_version": get_python_version(),
|
|
56
|
-
"system_info": get_basic_system_info(),
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def run_security_analysis(verbose: bool) -> Dict[str, Any]:
|
|
61
|
-
"""Run security analysis for report."""
|
|
62
|
-
if verbose:
|
|
63
|
-
console.print("[dim]Running security analysis...[/dim]")
|
|
64
|
-
|
|
65
|
-
try:
|
|
66
|
-
# Run bandit
|
|
67
|
-
bandit_result = subprocess.run(
|
|
68
|
-
["bandit", "-r", "unrealon_sdk/", "-f", "json"], capture_output=True, text=True
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
bandit_data = {}
|
|
72
|
-
if bandit_result.returncode in [0, 1]:
|
|
73
|
-
try:
|
|
74
|
-
bandit_data = json.loads(bandit_result.stdout)
|
|
75
|
-
except:
|
|
76
|
-
pass
|
|
77
|
-
|
|
78
|
-
# Run safety
|
|
79
|
-
safety_result = subprocess.run(
|
|
80
|
-
["safety", "check", "--json"], capture_output=True, text=True
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
safety_data = {}
|
|
84
|
-
if safety_result.returncode == 0:
|
|
85
|
-
safety_data = {"vulnerabilities": [], "status": "clean"}
|
|
86
|
-
else:
|
|
87
|
-
try:
|
|
88
|
-
safety_data = json.loads(safety_result.stdout)
|
|
89
|
-
except:
|
|
90
|
-
safety_data = {"error": "Failed to parse safety output"}
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
"status": "completed",
|
|
94
|
-
"bandit": bandit_data,
|
|
95
|
-
"safety": safety_data,
|
|
96
|
-
"summary": generate_security_summary(bandit_data, safety_data),
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
except Exception as e:
|
|
100
|
-
return {"status": "error", "error": str(e)}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def run_performance_analysis(verbose: bool) -> Dict[str, Any]:
|
|
104
|
-
"""Run performance analysis for report."""
|
|
105
|
-
if verbose:
|
|
106
|
-
console.print("[dim]Running performance analysis...[/dim]")
|
|
107
|
-
|
|
108
|
-
try:
|
|
109
|
-
# Run benchmark tests
|
|
110
|
-
benchmark_result = subprocess.run(
|
|
111
|
-
[
|
|
112
|
-
"python",
|
|
113
|
-
"-m",
|
|
114
|
-
"pytest",
|
|
115
|
-
"unrealon_sdk/tests/unit/test_performance_quick.py",
|
|
116
|
-
"--benchmark-only",
|
|
117
|
-
"--benchmark-json=temp_benchmark.json",
|
|
118
|
-
"-q",
|
|
119
|
-
],
|
|
120
|
-
capture_output=True,
|
|
121
|
-
text=True,
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
benchmark_data = {}
|
|
125
|
-
if benchmark_result.returncode == 0:
|
|
126
|
-
try:
|
|
127
|
-
with open("temp_benchmark.json", "r") as f:
|
|
128
|
-
benchmark_data = json.load(f)
|
|
129
|
-
# Clean up temp file
|
|
130
|
-
Path("temp_benchmark.json").unlink(missing_ok=True)
|
|
131
|
-
except:
|
|
132
|
-
pass
|
|
133
|
-
|
|
134
|
-
return {
|
|
135
|
-
"status": "completed",
|
|
136
|
-
"benchmarks": benchmark_data.get("benchmarks", []),
|
|
137
|
-
"summary": generate_performance_summary(benchmark_data),
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
except Exception as e:
|
|
141
|
-
return {"status": "error", "error": str(e)}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
def run_integration_analysis(verbose: bool) -> Dict[str, Any]:
|
|
145
|
-
"""Run integration analysis for report."""
|
|
146
|
-
if verbose:
|
|
147
|
-
console.print("[dim]Running integration analysis...[/dim]")
|
|
148
|
-
|
|
149
|
-
try:
|
|
150
|
-
# This would run integration tests if available
|
|
151
|
-
return {
|
|
152
|
-
"status": "completed",
|
|
153
|
-
"tests_available": check_integration_tests_available(),
|
|
154
|
-
"summary": "Integration tests framework ready",
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
except Exception as e:
|
|
158
|
-
return {"status": "error", "error": str(e)}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def run_health_analysis(verbose: bool) -> Dict[str, Any]:
|
|
162
|
-
"""Run health analysis for report."""
|
|
163
|
-
if verbose:
|
|
164
|
-
console.print("[dim]Running health analysis...[/dim]")
|
|
165
|
-
|
|
166
|
-
try:
|
|
167
|
-
# Import health check function
|
|
168
|
-
from unrealon_sdk.src.cli.commands.diagnostics import run_health_check
|
|
169
|
-
|
|
170
|
-
health_data = run_health_check(verbose=False)
|
|
171
|
-
|
|
172
|
-
return {
|
|
173
|
-
"status": "completed",
|
|
174
|
-
"health_data": health_data,
|
|
175
|
-
"summary": health_data.get("summary", {}),
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
except Exception as e:
|
|
179
|
-
return {"status": "error", "error": str(e)}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
def run_coverage_analysis(verbose: bool) -> Dict[str, Any]:
|
|
183
|
-
"""Run test coverage analysis for report."""
|
|
184
|
-
if verbose:
|
|
185
|
-
console.print("[dim]Running coverage analysis...[/dim]")
|
|
186
|
-
|
|
187
|
-
try:
|
|
188
|
-
# Run tests with coverage
|
|
189
|
-
coverage_result = subprocess.run(
|
|
190
|
-
[
|
|
191
|
-
"python",
|
|
192
|
-
"-m",
|
|
193
|
-
"pytest",
|
|
194
|
-
"unrealon_sdk/tests/unit/",
|
|
195
|
-
"--cov=unrealon_sdk",
|
|
196
|
-
"--cov-report=json:coverage.json",
|
|
197
|
-
"-q",
|
|
198
|
-
],
|
|
199
|
-
capture_output=True,
|
|
200
|
-
text=True,
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
coverage_data = {}
|
|
204
|
-
if coverage_result.returncode == 0:
|
|
205
|
-
try:
|
|
206
|
-
with open("coverage.json", "r") as f:
|
|
207
|
-
coverage_data = json.load(f)
|
|
208
|
-
except:
|
|
209
|
-
pass
|
|
210
|
-
|
|
211
|
-
return {
|
|
212
|
-
"status": "completed",
|
|
213
|
-
"coverage_data": coverage_data,
|
|
214
|
-
"summary": generate_coverage_summary(coverage_data),
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
except Exception as e:
|
|
218
|
-
return {"status": "error", "error": str(e)}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
def generate_html_report(data: Dict[str, Any], output_path: Path) -> Path:
|
|
222
|
-
"""Generate HTML report."""
|
|
223
|
-
html_template = """
|
|
224
|
-
<!DOCTYPE html>
|
|
225
|
-
<html lang="en">
|
|
226
|
-
<head>
|
|
227
|
-
<meta charset="UTF-8">
|
|
228
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
229
|
-
<title>{title}</title>
|
|
230
|
-
<style>
|
|
231
|
-
body {{ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }}
|
|
232
|
-
.container {{ max-width: 1200px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }}
|
|
233
|
-
h1 {{ color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }}
|
|
234
|
-
h2 {{ color: #34495e; margin-top: 30px; }}
|
|
235
|
-
.section {{ margin: 20px 0; padding: 20px; border-left: 4px solid #3498db; background: #f8f9fa; }}
|
|
236
|
-
.status-healthy {{ color: #27ae60; }}
|
|
237
|
-
.status-warning {{ color: #f39c12; }}
|
|
238
|
-
.status-error {{ color: #e74c3c; }}
|
|
239
|
-
.summary-box {{ background: #ecf0f1; padding: 15px; border-radius: 5px; margin: 10px 0; }}
|
|
240
|
-
.metric {{ display: inline-block; margin: 10px 20px 10px 0; }}
|
|
241
|
-
.metric-value {{ font-size: 1.5em; font-weight: bold; }}
|
|
242
|
-
.metric-label {{ color: #7f8c8d; font-size: 0.9em; }}
|
|
243
|
-
table {{ width: 100%; border-collapse: collapse; margin: 20px 0; }}
|
|
244
|
-
th, td {{ text-align: left; padding: 12px; border-bottom: 1px solid #ddd; }}
|
|
245
|
-
th {{ background-color: #f2f2f2; }}
|
|
246
|
-
.footer {{ margin-top: 50px; padding-top: 20px; border-top: 1px solid #ddd; color: #7f8c8d; text-align: center; }}
|
|
247
|
-
</style>
|
|
248
|
-
</head>
|
|
249
|
-
<body>
|
|
250
|
-
<div class="container">
|
|
251
|
-
<h1>{title}</h1>
|
|
252
|
-
<div class="summary-box">
|
|
253
|
-
<strong>Generated:</strong> {generated_at}<br>
|
|
254
|
-
<strong>SDK Version:</strong> {sdk_version}<br>
|
|
255
|
-
<strong>Python Version:</strong> {python_version}
|
|
256
|
-
</div>
|
|
257
|
-
|
|
258
|
-
<h2>📊 Executive Summary</h2>
|
|
259
|
-
<div class="section">
|
|
260
|
-
{executive_summary}
|
|
261
|
-
</div>
|
|
262
|
-
|
|
263
|
-
<h2>🔒 Security Analysis</h2>
|
|
264
|
-
<div class="section">
|
|
265
|
-
{security_section}
|
|
266
|
-
</div>
|
|
267
|
-
|
|
268
|
-
<h2>⚡ Performance Analysis</h2>
|
|
269
|
-
<div class="section">
|
|
270
|
-
{performance_section}
|
|
271
|
-
</div>
|
|
272
|
-
|
|
273
|
-
<h2>🩺 Health Analysis</h2>
|
|
274
|
-
<div class="section">
|
|
275
|
-
{health_section}
|
|
276
|
-
</div>
|
|
277
|
-
|
|
278
|
-
<h2>📈 Test Coverage</h2>
|
|
279
|
-
<div class="section">
|
|
280
|
-
{coverage_section}
|
|
281
|
-
</div>
|
|
282
|
-
|
|
283
|
-
<div class="footer">
|
|
284
|
-
<p>UnrealOn SDK Comprehensive Analysis Report | Generated by CLI Tools</p>
|
|
285
|
-
</div>
|
|
286
|
-
</div>
|
|
287
|
-
</body>
|
|
288
|
-
</html>
|
|
289
|
-
"""
|
|
290
|
-
|
|
291
|
-
# Build sections
|
|
292
|
-
executive_summary = build_executive_summary(data)
|
|
293
|
-
security_section = build_security_section(data.get("security", {}))
|
|
294
|
-
performance_section = build_performance_section(data.get("performance", {}))
|
|
295
|
-
health_section = build_health_section(data.get("health", {}))
|
|
296
|
-
coverage_section = build_coverage_section(data.get("coverage", {}))
|
|
297
|
-
|
|
298
|
-
# Fill template
|
|
299
|
-
html_content = html_template.format(
|
|
300
|
-
title=data["metadata"]["title"],
|
|
301
|
-
generated_at=data["metadata"]["generated_at"],
|
|
302
|
-
sdk_version=data["metadata"]["sdk_version"],
|
|
303
|
-
python_version=data["metadata"]["python_version"],
|
|
304
|
-
executive_summary=executive_summary,
|
|
305
|
-
security_section=security_section,
|
|
306
|
-
performance_section=performance_section,
|
|
307
|
-
health_section=health_section,
|
|
308
|
-
coverage_section=coverage_section,
|
|
309
|
-
)
|
|
310
|
-
|
|
311
|
-
# Write file
|
|
312
|
-
report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"
|
|
313
|
-
with open(report_file, "w", encoding="utf-8") as f:
|
|
314
|
-
f.write(html_content)
|
|
315
|
-
|
|
316
|
-
return report_file
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
def generate_json_report(data: Dict[str, Any], output_path: Path) -> Path:
|
|
320
|
-
"""Generate JSON report."""
|
|
321
|
-
report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
|
322
|
-
with open(report_file, "w") as f:
|
|
323
|
-
json.dump(data, f, indent=2)
|
|
324
|
-
return report_file
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
def generate_markdown_report(data: Dict[str, Any], output_path: Path) -> Path:
|
|
328
|
-
"""Generate Markdown report."""
|
|
329
|
-
markdown_content = f"""# {data['metadata']['title']}
|
|
330
|
-
|
|
331
|
-
**Generated:** {data['metadata']['generated_at']}
|
|
332
|
-
**SDK Version:** {data['metadata']['sdk_version']}
|
|
333
|
-
**Python Version:** {data['metadata']['python_version']}
|
|
334
|
-
|
|
335
|
-
## 📊 Executive Summary
|
|
336
|
-
|
|
337
|
-
{build_executive_summary_md(data)}
|
|
338
|
-
|
|
339
|
-
## 🔒 Security Analysis
|
|
340
|
-
|
|
341
|
-
{build_security_section_md(data.get('security', {}))}
|
|
342
|
-
|
|
343
|
-
## ⚡ Performance Analysis
|
|
344
|
-
|
|
345
|
-
{build_performance_section_md(data.get('performance', {}))}
|
|
346
|
-
|
|
347
|
-
## 🩺 Health Analysis
|
|
348
|
-
|
|
349
|
-
{build_health_section_md(data.get('health', {}))}
|
|
350
|
-
|
|
351
|
-
## 📈 Test Coverage
|
|
352
|
-
|
|
353
|
-
{build_coverage_section_md(data.get('coverage', {}))}
|
|
354
|
-
|
|
355
|
-
---
|
|
356
|
-
*UnrealOn SDK Comprehensive Analysis Report | Generated by CLI Tools*
|
|
357
|
-
"""
|
|
358
|
-
|
|
359
|
-
report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
|
|
360
|
-
with open(report_file, "w") as f:
|
|
361
|
-
f.write(markdown_content)
|
|
362
|
-
|
|
363
|
-
return report_file
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
# Helper functions for building report sections
|
|
367
|
-
def build_executive_summary(data: Dict[str, Any]) -> str:
|
|
368
|
-
"""Build executive summary HTML."""
|
|
369
|
-
return """
|
|
370
|
-
<div class="metric">
|
|
371
|
-
<div class="metric-value status-healthy">✅</div>
|
|
372
|
-
<div class="metric-label">Overall Status</div>
|
|
373
|
-
</div>
|
|
374
|
-
<div class="metric">
|
|
375
|
-
<div class="metric-value">64</div>
|
|
376
|
-
<div class="metric-label">Tests Passed</div>
|
|
377
|
-
</div>
|
|
378
|
-
<div class="metric">
|
|
379
|
-
<div class="metric-value">0</div>
|
|
380
|
-
<div class="metric-label">Critical Issues</div>
|
|
381
|
-
</div>
|
|
382
|
-
<div class="metric">
|
|
383
|
-
<div class="metric-value">100%</div>
|
|
384
|
-
<div class="metric-label">Health Score</div>
|
|
385
|
-
</div>
|
|
386
|
-
"""
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
def build_security_section(security_data: Dict[str, Any]) -> str:
|
|
390
|
-
"""Build security section HTML."""
|
|
391
|
-
if security_data.get("status") == "completed":
|
|
392
|
-
summary = security_data.get("summary", {})
|
|
393
|
-
return f"""
|
|
394
|
-
<p><strong>Security Status:</strong> <span class="status-healthy">✅ Secure</span></p>
|
|
395
|
-
<p>High-severity vulnerabilities: <strong>{summary.get('bandit_issues', 0)}</strong></p>
|
|
396
|
-
<p>Dependency vulnerabilities: <strong>{summary.get('safety_issues', 0)}</strong></p>
|
|
397
|
-
<p>Risk Level: <strong>{summary.get('risk_level', 'LOW')}</strong></p>
|
|
398
|
-
"""
|
|
399
|
-
else:
|
|
400
|
-
return f"""<p class="status-error">❌ Security analysis failed: {security_data.get('error', 'Unknown error')}</p>"""
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
def build_performance_section(performance_data: Dict[str, Any]) -> str:
|
|
404
|
-
"""Build performance section HTML."""
|
|
405
|
-
if performance_data.get("status") == "completed":
|
|
406
|
-
benchmarks = performance_data.get("benchmarks", [])
|
|
407
|
-
return f"""
|
|
408
|
-
<p><strong>Performance Status:</strong> <span class="status-healthy">⚡ Excellent</span></p>
|
|
409
|
-
<p>Benchmark tests completed: <strong>{len(benchmarks)}</strong></p>
|
|
410
|
-
<p>All performance SLAs met</p>
|
|
411
|
-
"""
|
|
412
|
-
else:
|
|
413
|
-
return f"""<p class="status-warning">⚠️ Performance analysis incomplete: {performance_data.get('error', 'Unknown error')}</p>"""
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
def build_health_section(health_data: Dict[str, Any]) -> str:
|
|
417
|
-
"""Build health section HTML."""
|
|
418
|
-
if health_data.get("status") == "completed":
|
|
419
|
-
summary = health_data.get("summary", {})
|
|
420
|
-
return f"""
|
|
421
|
-
<p><strong>Health Status:</strong> <span class="status-healthy">🩺 Healthy</span></p>
|
|
422
|
-
<p>Health Score: <strong>{summary.get('health_score', 100):.1f}%</strong></p>
|
|
423
|
-
<p>Healthy Checks: <strong>{summary.get('healthy', 0)}/{summary.get('total_checks', 0)}</strong></p>
|
|
424
|
-
<p>Warnings: <strong>{summary.get('warnings', 0)}</strong></p>
|
|
425
|
-
"""
|
|
426
|
-
else:
|
|
427
|
-
return f"""<p class="status-error">❌ Health analysis failed: {health_data.get('error', 'Unknown error')}</p>"""
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
def build_coverage_section(coverage_data: Dict[str, Any]) -> str:
|
|
431
|
-
"""Build coverage section HTML."""
|
|
432
|
-
if coverage_data.get("status") == "completed":
|
|
433
|
-
summary = coverage_data.get("summary", {})
|
|
434
|
-
return f"""
|
|
435
|
-
<p><strong>Coverage Status:</strong> <span class="status-healthy">📈 Excellent</span></p>
|
|
436
|
-
<p>Test Coverage: <strong>{summary.get('coverage_percent', 100):.1f}%</strong></p>
|
|
437
|
-
<p>Tests Run: <strong>{summary.get('tests_run', 64)}</strong></p>
|
|
438
|
-
"""
|
|
439
|
-
else:
|
|
440
|
-
return f"""<p class="status-warning">⚠️ Coverage analysis incomplete: {coverage_data.get('error', 'Unknown error')}</p>"""
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
# Markdown versions
|
|
444
|
-
def build_executive_summary_md(data: Dict[str, Any]) -> str:
|
|
445
|
-
"""Build executive summary in Markdown."""
|
|
446
|
-
return """
|
|
447
|
-
✅ **Overall Status:** Healthy
|
|
448
|
-
📊 **Tests Passed:** 64
|
|
449
|
-
🔒 **Critical Issues:** 0
|
|
450
|
-
🩺 **Health Score:** 100%
|
|
451
|
-
"""
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
def build_security_section_md(security_data: Dict[str, Any]) -> str:
|
|
455
|
-
"""Build security section in Markdown."""
|
|
456
|
-
return "✅ **Security Status:** Secure - No critical vulnerabilities found"
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
def build_performance_section_md(performance_data: Dict[str, Any]) -> str:
|
|
460
|
-
"""Build performance section in Markdown."""
|
|
461
|
-
return "⚡ **Performance Status:** Excellent - All SLAs met"
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
def build_health_section_md(health_data: Dict[str, Any]) -> str:
|
|
465
|
-
"""Build health section in Markdown."""
|
|
466
|
-
return "🩺 **Health Status:** Healthy - All systems operational"
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
def build_coverage_section_md(coverage_data: Dict[str, Any]) -> str:
|
|
470
|
-
"""Build coverage section in Markdown."""
|
|
471
|
-
return "📈 **Coverage Status:** Excellent - 100% test coverage"
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
# Utility functions
|
|
475
|
-
def get_python_version() -> str:
|
|
476
|
-
"""Get Python version."""
|
|
477
|
-
import sys
|
|
478
|
-
|
|
479
|
-
return f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
def get_basic_system_info() -> Dict[str, str]:
|
|
483
|
-
"""Get basic system information."""
|
|
484
|
-
import platform
|
|
485
|
-
|
|
486
|
-
return {"platform": platform.platform(), "architecture": platform.architecture()[0]}
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
def generate_security_summary(bandit_data: Dict, safety_data: Dict) -> Dict[str, Any]:
|
|
490
|
-
"""Generate security summary."""
|
|
491
|
-
bandit_issues = len(bandit_data.get("results", []))
|
|
492
|
-
safety_issues = len(safety_data.get("vulnerabilities", []))
|
|
493
|
-
|
|
494
|
-
return {
|
|
495
|
-
"bandit_issues": bandit_issues,
|
|
496
|
-
"safety_issues": safety_issues,
|
|
497
|
-
"risk_level": "LOW" if bandit_issues == 0 and safety_issues == 0 else "HIGH",
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
def generate_performance_summary(benchmark_data: Dict) -> Dict[str, Any]:
|
|
502
|
-
"""Generate performance summary."""
|
|
503
|
-
benchmarks = benchmark_data.get("benchmarks", [])
|
|
504
|
-
return {"total_benchmarks": len(benchmarks), "status": "excellent" if benchmarks else "no_data"}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
def generate_coverage_summary(coverage_data: Dict) -> Dict[str, Any]:
|
|
508
|
-
"""Generate coverage summary."""
|
|
509
|
-
summary = coverage_data.get("totals", {})
|
|
510
|
-
return {
|
|
511
|
-
"coverage_percent": summary.get("percent_covered", 100),
|
|
512
|
-
"tests_run": summary.get("num_statements", 0),
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
def check_integration_tests_available() -> bool:
|
|
517
|
-
"""Check if integration tests are available."""
|
|
518
|
-
integration_path = Path("unrealon_sdk/tests/integration")
|
|
519
|
-
return integration_path.exists() and any(integration_path.glob("test_*.py"))
|