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.
Files changed (302) hide show
  1. unrealon/__init__.py +23 -21
  2. unrealon-1.1.1.dist-info/METADATA +722 -0
  3. unrealon-1.1.1.dist-info/RECORD +82 -0
  4. {unrealon-1.0.9.dist-info → unrealon-1.1.1.dist-info}/WHEEL +1 -1
  5. unrealon-1.1.1.dist-info/entry_points.txt +9 -0
  6. {unrealon-1.0.9.dist-info → unrealon-1.1.1.dist-info/licenses}/LICENSE +1 -1
  7. unrealon_bridge/__init__.py +114 -0
  8. unrealon_bridge/cli.py +316 -0
  9. unrealon_bridge/client/__init__.py +93 -0
  10. unrealon_bridge/client/base.py +78 -0
  11. unrealon_bridge/client/commands.py +89 -0
  12. unrealon_bridge/client/connection.py +90 -0
  13. unrealon_bridge/client/events.py +65 -0
  14. unrealon_bridge/client/health.py +38 -0
  15. unrealon_bridge/client/html_parser.py +146 -0
  16. unrealon_bridge/client/logging.py +139 -0
  17. unrealon_bridge/client/proxy.py +70 -0
  18. unrealon_bridge/client/scheduler.py +450 -0
  19. unrealon_bridge/client/session.py +70 -0
  20. unrealon_bridge/configs/__init__.py +14 -0
  21. unrealon_bridge/configs/bridge_config.py +212 -0
  22. unrealon_bridge/configs/bridge_config.yaml +39 -0
  23. unrealon_bridge/models/__init__.py +138 -0
  24. unrealon_bridge/models/base.py +28 -0
  25. unrealon_bridge/models/command.py +41 -0
  26. unrealon_bridge/models/events.py +40 -0
  27. unrealon_bridge/models/html_parser.py +79 -0
  28. unrealon_bridge/models/logging.py +55 -0
  29. unrealon_bridge/models/parser.py +63 -0
  30. unrealon_bridge/models/proxy.py +41 -0
  31. unrealon_bridge/models/requests.py +95 -0
  32. unrealon_bridge/models/responses.py +88 -0
  33. unrealon_bridge/models/scheduler.py +592 -0
  34. unrealon_bridge/models/session.py +28 -0
  35. unrealon_bridge/server/__init__.py +91 -0
  36. unrealon_bridge/server/base.py +171 -0
  37. unrealon_bridge/server/handlers/__init__.py +23 -0
  38. unrealon_bridge/server/handlers/command.py +110 -0
  39. unrealon_bridge/server/handlers/html_parser.py +139 -0
  40. unrealon_bridge/server/handlers/logging.py +95 -0
  41. unrealon_bridge/server/handlers/parser.py +95 -0
  42. unrealon_bridge/server/handlers/proxy.py +75 -0
  43. unrealon_bridge/server/handlers/scheduler.py +545 -0
  44. unrealon_bridge/server/handlers/session.py +66 -0
  45. unrealon_browser/__init__.py +61 -18
  46. unrealon_browser/{src/cli → cli}/browser_cli.py +6 -13
  47. unrealon_browser/{src/cli → cli}/cookies_cli.py +5 -1
  48. unrealon_browser/{src/core → core}/browser_manager.py +2 -2
  49. unrealon_browser/{src/managers → managers}/captcha.py +1 -1
  50. unrealon_browser/{src/managers → managers}/cookies.py +1 -1
  51. unrealon_browser/managers/logger_bridge.py +231 -0
  52. unrealon_browser/{src/managers → managers}/profile.py +1 -1
  53. unrealon_driver/__init__.py +73 -19
  54. unrealon_driver/browser/__init__.py +8 -0
  55. unrealon_driver/browser/config.py +74 -0
  56. unrealon_driver/browser/manager.py +416 -0
  57. unrealon_driver/exceptions.py +28 -0
  58. unrealon_driver/parser/__init__.py +55 -0
  59. unrealon_driver/parser/cli_manager.py +141 -0
  60. unrealon_driver/parser/daemon_manager.py +227 -0
  61. unrealon_driver/parser/managers/__init__.py +46 -0
  62. unrealon_driver/parser/managers/browser.py +51 -0
  63. unrealon_driver/parser/managers/config.py +281 -0
  64. unrealon_driver/parser/managers/error.py +412 -0
  65. unrealon_driver/parser/managers/html.py +732 -0
  66. unrealon_driver/parser/managers/logging.py +609 -0
  67. unrealon_driver/parser/managers/result.py +321 -0
  68. unrealon_driver/parser/parser_manager.py +628 -0
  69. unrealon/sdk_config.py +0 -88
  70. unrealon-1.0.9.dist-info/METADATA +0 -810
  71. unrealon-1.0.9.dist-info/RECORD +0 -246
  72. unrealon_browser/pyproject.toml +0 -182
  73. unrealon_browser/src/__init__.py +0 -62
  74. unrealon_browser/src/managers/logger_bridge.py +0 -395
  75. unrealon_driver/README.md +0 -204
  76. unrealon_driver/pyproject.toml +0 -187
  77. unrealon_driver/src/__init__.py +0 -90
  78. unrealon_driver/src/cli/__init__.py +0 -10
  79. unrealon_driver/src/cli/main.py +0 -66
  80. unrealon_driver/src/cli/simple.py +0 -510
  81. unrealon_driver/src/config/__init__.py +0 -11
  82. unrealon_driver/src/config/auto_config.py +0 -478
  83. unrealon_driver/src/core/__init__.py +0 -18
  84. unrealon_driver/src/core/exceptions.py +0 -289
  85. unrealon_driver/src/core/parser.py +0 -638
  86. unrealon_driver/src/dto/__init__.py +0 -66
  87. unrealon_driver/src/dto/cli.py +0 -119
  88. unrealon_driver/src/dto/config.py +0 -18
  89. unrealon_driver/src/dto/events.py +0 -237
  90. unrealon_driver/src/dto/execution.py +0 -313
  91. unrealon_driver/src/dto/services.py +0 -311
  92. unrealon_driver/src/execution/__init__.py +0 -23
  93. unrealon_driver/src/execution/daemon_mode.py +0 -317
  94. unrealon_driver/src/execution/interactive_mode.py +0 -88
  95. unrealon_driver/src/execution/modes.py +0 -45
  96. unrealon_driver/src/execution/scheduled_mode.py +0 -209
  97. unrealon_driver/src/execution/test_mode.py +0 -250
  98. unrealon_driver/src/logging/__init__.py +0 -24
  99. unrealon_driver/src/logging/driver_logger.py +0 -512
  100. unrealon_driver/src/services/__init__.py +0 -24
  101. unrealon_driver/src/services/browser_service.py +0 -726
  102. unrealon_driver/src/services/llm/__init__.py +0 -15
  103. unrealon_driver/src/services/llm/browser_llm_service.py +0 -363
  104. unrealon_driver/src/services/llm/llm.py +0 -195
  105. unrealon_driver/src/services/logger_service.py +0 -232
  106. unrealon_driver/src/services/metrics_service.py +0 -185
  107. unrealon_driver/src/services/scheduler_service.py +0 -489
  108. unrealon_driver/src/services/websocket_service.py +0 -362
  109. unrealon_driver/src/utils/__init__.py +0 -16
  110. unrealon_driver/src/utils/service_factory.py +0 -317
  111. unrealon_driver/src/utils/time_formatter.py +0 -338
  112. unrealon_llm/README.md +0 -44
  113. unrealon_llm/__init__.py +0 -26
  114. unrealon_llm/pyproject.toml +0 -154
  115. unrealon_llm/src/__init__.py +0 -228
  116. unrealon_llm/src/cli/__init__.py +0 -0
  117. unrealon_llm/src/core/__init__.py +0 -11
  118. unrealon_llm/src/core/smart_client.py +0 -438
  119. unrealon_llm/src/dto/__init__.py +0 -155
  120. unrealon_llm/src/dto/models/__init__.py +0 -0
  121. unrealon_llm/src/dto/models/config.py +0 -343
  122. unrealon_llm/src/dto/models/core.py +0 -328
  123. unrealon_llm/src/dto/models/enums.py +0 -123
  124. unrealon_llm/src/dto/models/html_analysis.py +0 -345
  125. unrealon_llm/src/dto/models/statistics.py +0 -473
  126. unrealon_llm/src/dto/models/translation.py +0 -383
  127. unrealon_llm/src/dto/models/type_conversion.py +0 -462
  128. unrealon_llm/src/dto/schemas/__init__.py +0 -0
  129. unrealon_llm/src/exceptions.py +0 -392
  130. unrealon_llm/src/llm_config/__init__.py +0 -20
  131. unrealon_llm/src/llm_config/logging_config.py +0 -178
  132. unrealon_llm/src/llm_logging/__init__.py +0 -42
  133. unrealon_llm/src/llm_logging/llm_events.py +0 -107
  134. unrealon_llm/src/llm_logging/llm_logger.py +0 -466
  135. unrealon_llm/src/managers/__init__.py +0 -15
  136. unrealon_llm/src/managers/cache_manager.py +0 -67
  137. unrealon_llm/src/managers/cost_manager.py +0 -107
  138. unrealon_llm/src/managers/request_manager.py +0 -298
  139. unrealon_llm/src/modules/__init__.py +0 -0
  140. unrealon_llm/src/modules/html_processor/__init__.py +0 -25
  141. unrealon_llm/src/modules/html_processor/base_processor.py +0 -415
  142. unrealon_llm/src/modules/html_processor/details_processor.py +0 -85
  143. unrealon_llm/src/modules/html_processor/listing_processor.py +0 -91
  144. unrealon_llm/src/modules/html_processor/models/__init__.py +0 -20
  145. unrealon_llm/src/modules/html_processor/models/processing_models.py +0 -40
  146. unrealon_llm/src/modules/html_processor/models/universal_model.py +0 -56
  147. unrealon_llm/src/modules/html_processor/processor.py +0 -102
  148. unrealon_llm/src/modules/llm/__init__.py +0 -0
  149. unrealon_llm/src/modules/translator/__init__.py +0 -0
  150. unrealon_llm/src/provider.py +0 -116
  151. unrealon_llm/src/utils/__init__.py +0 -95
  152. unrealon_llm/src/utils/common.py +0 -64
  153. unrealon_llm/src/utils/data_extractor.py +0 -188
  154. unrealon_llm/src/utils/html_cleaner.py +0 -767
  155. unrealon_llm/src/utils/language_detector.py +0 -308
  156. unrealon_llm/src/utils/models_cache.py +0 -592
  157. unrealon_llm/src/utils/smart_counter.py +0 -229
  158. unrealon_llm/src/utils/token_counter.py +0 -189
  159. unrealon_sdk/README.md +0 -25
  160. unrealon_sdk/__init__.py +0 -30
  161. unrealon_sdk/pyproject.toml +0 -231
  162. unrealon_sdk/src/__init__.py +0 -150
  163. unrealon_sdk/src/cli/__init__.py +0 -12
  164. unrealon_sdk/src/cli/commands/__init__.py +0 -22
  165. unrealon_sdk/src/cli/commands/benchmark.py +0 -42
  166. unrealon_sdk/src/cli/commands/diagnostics.py +0 -573
  167. unrealon_sdk/src/cli/commands/health.py +0 -46
  168. unrealon_sdk/src/cli/commands/integration.py +0 -498
  169. unrealon_sdk/src/cli/commands/reports.py +0 -43
  170. unrealon_sdk/src/cli/commands/security.py +0 -36
  171. unrealon_sdk/src/cli/commands/server.py +0 -483
  172. unrealon_sdk/src/cli/commands/servers.py +0 -56
  173. unrealon_sdk/src/cli/commands/tests.py +0 -55
  174. unrealon_sdk/src/cli/main.py +0 -126
  175. unrealon_sdk/src/cli/utils/reporter.py +0 -519
  176. unrealon_sdk/src/clients/openapi.yaml +0 -3347
  177. unrealon_sdk/src/clients/python_http/__init__.py +0 -3
  178. unrealon_sdk/src/clients/python_http/api_config.py +0 -228
  179. unrealon_sdk/src/clients/python_http/models/BaseModel.py +0 -12
  180. unrealon_sdk/src/clients/python_http/models/BroadcastDeliveryStats.py +0 -33
  181. unrealon_sdk/src/clients/python_http/models/BroadcastMessage.py +0 -17
  182. unrealon_sdk/src/clients/python_http/models/BroadcastMessageRequest.py +0 -35
  183. unrealon_sdk/src/clients/python_http/models/BroadcastPriority.py +0 -10
  184. unrealon_sdk/src/clients/python_http/models/BroadcastResponse.py +0 -21
  185. unrealon_sdk/src/clients/python_http/models/BroadcastResultResponse.py +0 -33
  186. unrealon_sdk/src/clients/python_http/models/BroadcastTarget.py +0 -11
  187. unrealon_sdk/src/clients/python_http/models/ConnectionStats.py +0 -27
  188. unrealon_sdk/src/clients/python_http/models/ConnectionsResponse.py +0 -21
  189. unrealon_sdk/src/clients/python_http/models/DeveloperMessageResponse.py +0 -23
  190. unrealon_sdk/src/clients/python_http/models/ErrorResponse.py +0 -25
  191. unrealon_sdk/src/clients/python_http/models/HTTPValidationError.py +0 -16
  192. unrealon_sdk/src/clients/python_http/models/HealthResponse.py +0 -23
  193. unrealon_sdk/src/clients/python_http/models/HealthStatus.py +0 -33
  194. unrealon_sdk/src/clients/python_http/models/LogLevel.py +0 -10
  195. unrealon_sdk/src/clients/python_http/models/LoggingRequest.py +0 -27
  196. unrealon_sdk/src/clients/python_http/models/LoggingResponse.py +0 -23
  197. unrealon_sdk/src/clients/python_http/models/MaintenanceMode.py +0 -9
  198. unrealon_sdk/src/clients/python_http/models/MaintenanceModeRequest.py +0 -33
  199. unrealon_sdk/src/clients/python_http/models/MaintenanceStatusResponse.py +0 -39
  200. unrealon_sdk/src/clients/python_http/models/ParserCommandRequest.py +0 -25
  201. unrealon_sdk/src/clients/python_http/models/ParserMessageResponse.py +0 -21
  202. unrealon_sdk/src/clients/python_http/models/ParserRegistrationRequest.py +0 -28
  203. unrealon_sdk/src/clients/python_http/models/ParserRegistrationResponse.py +0 -25
  204. unrealon_sdk/src/clients/python_http/models/ParserType.py +0 -10
  205. unrealon_sdk/src/clients/python_http/models/ProxyBlockRequest.py +0 -19
  206. unrealon_sdk/src/clients/python_http/models/ProxyEndpointResponse.py +0 -20
  207. unrealon_sdk/src/clients/python_http/models/ProxyListResponse.py +0 -19
  208. unrealon_sdk/src/clients/python_http/models/ProxyProvider.py +0 -10
  209. unrealon_sdk/src/clients/python_http/models/ProxyPurchaseRequest.py +0 -25
  210. unrealon_sdk/src/clients/python_http/models/ProxyResponse.py +0 -47
  211. unrealon_sdk/src/clients/python_http/models/ProxyRotationRequest.py +0 -23
  212. unrealon_sdk/src/clients/python_http/models/ProxyStatus.py +0 -10
  213. unrealon_sdk/src/clients/python_http/models/ProxyUsageRequest.py +0 -19
  214. unrealon_sdk/src/clients/python_http/models/ProxyUsageStatsResponse.py +0 -26
  215. unrealon_sdk/src/clients/python_http/models/ServiceRegistrationDto.py +0 -23
  216. unrealon_sdk/src/clients/python_http/models/ServiceStatsResponse.py +0 -31
  217. unrealon_sdk/src/clients/python_http/models/SessionStartRequest.py +0 -23
  218. unrealon_sdk/src/clients/python_http/models/SuccessResponse.py +0 -25
  219. unrealon_sdk/src/clients/python_http/models/SystemNotificationResponse.py +0 -23
  220. unrealon_sdk/src/clients/python_http/models/ValidationError.py +0 -18
  221. unrealon_sdk/src/clients/python_http/models/ValidationErrorResponse.py +0 -21
  222. unrealon_sdk/src/clients/python_http/models/WebSocketMetrics.py +0 -21
  223. unrealon_sdk/src/clients/python_http/models/__init__.py +0 -44
  224. unrealon_sdk/src/clients/python_http/services/None_service.py +0 -35
  225. unrealon_sdk/src/clients/python_http/services/ParserManagement_service.py +0 -190
  226. unrealon_sdk/src/clients/python_http/services/ProxyManagement_service.py +0 -289
  227. unrealon_sdk/src/clients/python_http/services/SocketLogging_service.py +0 -187
  228. unrealon_sdk/src/clients/python_http/services/SystemHealth_service.py +0 -119
  229. unrealon_sdk/src/clients/python_http/services/WebSocketAPI_service.py +0 -198
  230. unrealon_sdk/src/clients/python_http/services/__init__.py +0 -0
  231. unrealon_sdk/src/clients/python_http/services/admin_service.py +0 -125
  232. unrealon_sdk/src/clients/python_http/services/async_None_service.py +0 -35
  233. unrealon_sdk/src/clients/python_http/services/async_ParserManagement_service.py +0 -190
  234. unrealon_sdk/src/clients/python_http/services/async_ProxyManagement_service.py +0 -289
  235. unrealon_sdk/src/clients/python_http/services/async_SocketLogging_service.py +0 -189
  236. unrealon_sdk/src/clients/python_http/services/async_SystemHealth_service.py +0 -123
  237. unrealon_sdk/src/clients/python_http/services/async_WebSocketAPI_service.py +0 -200
  238. unrealon_sdk/src/clients/python_http/services/async_admin_service.py +0 -125
  239. unrealon_sdk/src/clients/python_websocket/__init__.py +0 -28
  240. unrealon_sdk/src/clients/python_websocket/client.py +0 -490
  241. unrealon_sdk/src/clients/python_websocket/events.py +0 -732
  242. unrealon_sdk/src/clients/python_websocket/example.py +0 -136
  243. unrealon_sdk/src/clients/python_websocket/types.py +0 -871
  244. unrealon_sdk/src/core/__init__.py +0 -64
  245. unrealon_sdk/src/core/client.py +0 -556
  246. unrealon_sdk/src/core/config.py +0 -465
  247. unrealon_sdk/src/core/exceptions.py +0 -239
  248. unrealon_sdk/src/core/metadata.py +0 -191
  249. unrealon_sdk/src/core/models.py +0 -142
  250. unrealon_sdk/src/core/types.py +0 -68
  251. unrealon_sdk/src/dto/__init__.py +0 -268
  252. unrealon_sdk/src/dto/authentication.py +0 -108
  253. unrealon_sdk/src/dto/cache.py +0 -208
  254. unrealon_sdk/src/dto/common.py +0 -19
  255. unrealon_sdk/src/dto/concurrency.py +0 -393
  256. unrealon_sdk/src/dto/events.py +0 -108
  257. unrealon_sdk/src/dto/health.py +0 -339
  258. unrealon_sdk/src/dto/load_balancing.py +0 -336
  259. unrealon_sdk/src/dto/logging.py +0 -230
  260. unrealon_sdk/src/dto/performance.py +0 -165
  261. unrealon_sdk/src/dto/rate_limiting.py +0 -295
  262. unrealon_sdk/src/dto/resource_pooling.py +0 -128
  263. unrealon_sdk/src/dto/structured_logging.py +0 -112
  264. unrealon_sdk/src/dto/task_scheduling.py +0 -121
  265. unrealon_sdk/src/dto/websocket.py +0 -55
  266. unrealon_sdk/src/enterprise/__init__.py +0 -59
  267. unrealon_sdk/src/enterprise/authentication.py +0 -401
  268. unrealon_sdk/src/enterprise/cache_manager.py +0 -578
  269. unrealon_sdk/src/enterprise/error_recovery.py +0 -494
  270. unrealon_sdk/src/enterprise/event_system.py +0 -549
  271. unrealon_sdk/src/enterprise/health_monitor.py +0 -747
  272. unrealon_sdk/src/enterprise/load_balancer.py +0 -964
  273. unrealon_sdk/src/enterprise/logging/__init__.py +0 -68
  274. unrealon_sdk/src/enterprise/logging/cleanup.py +0 -156
  275. unrealon_sdk/src/enterprise/logging/development.py +0 -744
  276. unrealon_sdk/src/enterprise/logging/service.py +0 -410
  277. unrealon_sdk/src/enterprise/multithreading_manager.py +0 -853
  278. unrealon_sdk/src/enterprise/performance_monitor.py +0 -539
  279. unrealon_sdk/src/enterprise/proxy_manager.py +0 -696
  280. unrealon_sdk/src/enterprise/rate_limiter.py +0 -652
  281. unrealon_sdk/src/enterprise/resource_pool.py +0 -763
  282. unrealon_sdk/src/enterprise/task_scheduler.py +0 -709
  283. unrealon_sdk/src/internal/__init__.py +0 -10
  284. unrealon_sdk/src/internal/command_router.py +0 -497
  285. unrealon_sdk/src/internal/connection_manager.py +0 -397
  286. unrealon_sdk/src/internal/http_client.py +0 -446
  287. unrealon_sdk/src/internal/websocket_client.py +0 -420
  288. unrealon_sdk/src/provider.py +0 -471
  289. unrealon_sdk/src/utils.py +0 -234
  290. /unrealon_browser/{src/cli → cli}/__init__.py +0 -0
  291. /unrealon_browser/{src/cli → cli}/interactive_mode.py +0 -0
  292. /unrealon_browser/{src/cli → cli}/main.py +0 -0
  293. /unrealon_browser/{src/core → core}/__init__.py +0 -0
  294. /unrealon_browser/{src/dto → dto}/__init__.py +0 -0
  295. /unrealon_browser/{src/dto → dto}/models/config.py +0 -0
  296. /unrealon_browser/{src/dto → dto}/models/core.py +0 -0
  297. /unrealon_browser/{src/dto → dto}/models/dataclasses.py +0 -0
  298. /unrealon_browser/{src/dto → dto}/models/detection.py +0 -0
  299. /unrealon_browser/{src/dto → dto}/models/enums.py +0 -0
  300. /unrealon_browser/{src/dto → dto}/models/statistics.py +0 -0
  301. /unrealon_browser/{src/managers → managers}/__init__.py +0 -0
  302. /unrealon_browser/{src/managers → managers}/stealth.py +0 -0
@@ -1,232 +0,0 @@
1
- """
2
- Logger Service for UnrealOn Driver v3.0
3
-
4
- Intelligent logging service with file rotation and structured output.
5
- """
6
-
7
- import logging
8
- import sys
9
- from pathlib import Path
10
- from typing import Any, Optional
11
- from datetime import datetime
12
-
13
- from unrealon_driver.src.dto.services import LoggerConfig
14
- from logging.handlers import RotatingFileHandler
15
-
16
-
17
- class LoggerService:
18
- """
19
- 📝 Logger Service - Intelligent Logging
20
-
21
- Zero-configuration logging with:
22
- - Console and file output
23
- - Automatic log rotation
24
- - Structured logging for production
25
- - Integration with unrealon_sdk development logger
26
- """
27
-
28
- def __init__(
29
- self,
30
- config: LoggerConfig,
31
- parser_id: str = "unknown",
32
- parser_name: str = "UnrealOn Parser",
33
- ):
34
- """Initialize logger service."""
35
- self.config = config
36
- self.parser_id = parser_id
37
- self.parser_name = parser_name
38
-
39
- # Setup logger
40
- self.logger = logging.getLogger(f"unrealon_driver.{parser_id}")
41
- self._setup_logging()
42
-
43
- def _setup_logging(self):
44
- """Setup logging configuration."""
45
- # Clear any existing handlers
46
- self.logger.handlers.clear()
47
-
48
- # Set log level using Pydantic config
49
- log_level = getattr(logging, self.config.log_level.value.upper())
50
- self.logger.setLevel(log_level)
51
-
52
- # Console handler
53
- if self.config.console_output:
54
- console_handler = logging.StreamHandler(sys.stdout)
55
- console_handler.setLevel(log_level) # Use same level as main logger
56
-
57
- # Console formatter (using standard format from config)
58
- console_formatter = logging.Formatter(
59
- fmt=self.config.log_format, datefmt=self.config.date_format
60
- )
61
-
62
- console_handler.setFormatter(console_formatter)
63
- self.logger.addHandler(console_handler)
64
-
65
- # File handler
66
- if self.config.file_output:
67
- log_dir = (
68
- Path(self.config.log_dir)
69
- if self.config.log_dir
70
- else Path("system/logs")
71
- )
72
- log_dir.mkdir(parents=True, exist_ok=True)
73
-
74
- log_file_name = self.config.log_file or f"{self.parser_id}.log"
75
- log_file = log_dir / log_file_name
76
-
77
- file_handler = RotatingFileHandler(
78
- log_file,
79
- maxBytes=self._parse_size(self.config.max_file_size),
80
- backupCount=self.config.backup_count,
81
- )
82
-
83
- file_level = getattr(logging, self.config.log_level.value.upper())
84
- file_handler.setLevel(file_level)
85
-
86
- # File formatter (always use standard format)
87
- file_formatter = logging.Formatter(
88
- fmt=self.config.log_format, datefmt=self.config.date_format
89
- )
90
-
91
- file_handler.setFormatter(file_formatter)
92
- self.logger.addHandler(file_handler)
93
-
94
- # Initial log message
95
- self.logger.info(
96
- f"Logger initialized for {self.parser_name} ({self.parser_id})"
97
- )
98
-
99
- def _get_standard_formatter(self) -> logging.Formatter:
100
- """Get standard text formatter."""
101
- format_str = (
102
- self.config.format_string or "[{asctime}] {levelname} | {name} | {message}"
103
- )
104
- date_format = self.config.date_format or "%Y-%m-%d %H:%M:%S"
105
-
106
- return logging.Formatter(format_str, datefmt=date_format, style="{")
107
-
108
- def _get_colored_formatter(self) -> logging.Formatter:
109
- """Get colored formatter for console output."""
110
- # Color codes
111
- colors = {
112
- "DEBUG": "\033[36m", # Cyan
113
- "INFO": "\033[32m", # Green
114
- "WARNING": "\033[33m", # Yellow
115
- "ERROR": "\033[31m", # Red
116
- "CRITICAL": "\033[35m", # Magenta
117
- "RESET": "\033[0m", # Reset
118
- }
119
-
120
- class ColoredFormatter(logging.Formatter):
121
- def format(self, record):
122
- if record.levelname in colors:
123
- record.levelname = (
124
- f"{colors[record.levelname]}{record.levelname}{colors['RESET']}"
125
- )
126
- return super().format(record)
127
-
128
- format_str = "[{asctime}] {levelname} | {name} | {message}"
129
- return ColoredFormatter(format_str, datefmt="%H:%M:%S", style="{")
130
-
131
- def _get_json_formatter(self) -> logging.Formatter:
132
- """Get JSON formatter for structured logging."""
133
- import json
134
-
135
- class JSONFormatter(logging.Formatter):
136
- def format(self, record):
137
- log_entry = {
138
- "timestamp": datetime.utcnow().isoformat(),
139
- "level": record.levelname,
140
- "logger": record.name,
141
- "message": record.getMessage(),
142
- "parser_id": self.parser_id,
143
- "parser_name": self.parser_name,
144
- }
145
-
146
- if record.exc_info:
147
- log_entry["exception"] = self.formatException(record.exc_info)
148
-
149
- return json.dumps(log_entry)
150
-
151
- return JSONFormatter()
152
-
153
- def _parse_size(self, size_str: str) -> int:
154
- """Parse size string like '10MB' to bytes."""
155
- size_str = size_str.upper().strip()
156
-
157
- if size_str.endswith("KB"):
158
- return int(size_str[:-2]) * 1024
159
- elif size_str.endswith("MB"):
160
- return int(size_str[:-2]) * 1024 * 1024
161
- elif size_str.endswith("GB"):
162
- return int(size_str[:-2]) * 1024 * 1024 * 1024
163
- else:
164
- return int(size_str) # Assume bytes
165
-
166
- # ==========================================
167
- # LOGGING METHODS
168
- # ==========================================
169
-
170
- def debug(self, message: str, **kwargs):
171
- """Log debug message."""
172
- self.logger.debug(message, **kwargs)
173
-
174
- def info(self, message: str, **kwargs):
175
- """Log info message."""
176
- self.logger.info(message, **kwargs)
177
-
178
- def warning(self, message: str, **kwargs):
179
- """Log warning message."""
180
- self.logger.warning(message, **kwargs)
181
-
182
- def error(self, message: str, **kwargs):
183
- """Log error message."""
184
- self.logger.error(message, **kwargs)
185
-
186
- def critical(self, message: str, **kwargs):
187
- """Log critical message."""
188
- self.logger.critical(message, **kwargs)
189
-
190
- def exception(self, message: str, **kwargs):
191
- """Log exception with traceback."""
192
- self.logger.exception(message, **kwargs)
193
-
194
- # ==========================================
195
- # SERVICE MANAGEMENT
196
- # ==========================================
197
-
198
- def _parse_size(self, size_str: str) -> int:
199
- """Parse size string like '10MB' to bytes."""
200
- size_str = size_str.upper().strip()
201
-
202
- if size_str.endswith("KB"):
203
- return int(size_str[:-2]) * 1024
204
- elif size_str.endswith("MB"):
205
- return int(size_str[:-2]) * 1024 * 1024
206
- elif size_str.endswith("GB"):
207
- return int(size_str[:-2]) * 1024 * 1024 * 1024
208
- else:
209
- # Assume bytes if no unit
210
- return int(size_str)
211
-
212
- def health_check(self) -> dict:
213
- """Check logger service health."""
214
- return {
215
- "status": "healthy",
216
- "log_level": self.logger.level,
217
- "handlers_count": len(self.logger.handlers),
218
- "console_output": self.config.console_output,
219
- "file_output": self.config.file_output,
220
- }
221
-
222
- async def cleanup(self):
223
- """Clean up logger resources."""
224
- # Close all handlers
225
- for handler in self.logger.handlers[:]:
226
- handler.close()
227
- self.logger.removeHandler(handler)
228
-
229
- self.logger.info("Logger service cleanup completed")
230
-
231
- def __repr__(self) -> str:
232
- return f"<LoggerService(parser_id={self.parser_id}, level={self.logger.level})>"
@@ -1,185 +0,0 @@
1
- """
2
- Metrics Service for UnrealOn Driver v3.0
3
-
4
- Built-in metrics and monitoring with Prometheus integration.
5
- Includes full event logging through SDK DevelopmentLogger.
6
-
7
- CRITICAL REQUIREMENTS COMPLIANCE:
8
- - ✅ Absolute imports only
9
- - ✅ Pydantic v2 models everywhere
10
- - ✅ Complete type annotations
11
- - ✅ Full unrealon_sdk integration
12
- """
13
-
14
- from typing import Any, Dict, Optional
15
-
16
- from unrealon_sdk.src.enterprise.logging.development import get_development_logger
17
- from unrealon_sdk.src.dto.logging import SDKContext, SDKEventType
18
-
19
- from unrealon_driver.src.dto.services import MetricsConfig
20
- from unrealon_driver.src.dto.events import DriverEventType
21
-
22
-
23
- class MetricsService:
24
- """
25
- 📊 Metrics Service - Built-in Monitoring
26
-
27
- TODO: Full implementation with Prometheus integration
28
- """
29
-
30
- def __init__(self, config: MetricsConfig, parser_id: str = "unknown"):
31
- """Initialize metrics service with full SDK integration."""
32
- self.config = config
33
- self.parser_id = parser_id
34
- self._metrics_data = {}
35
-
36
- # ✅ DEVELOPMENT LOGGER INTEGRATION (CRITICAL REQUIREMENT)
37
- self.dev_logger = get_development_logger()
38
-
39
- # Log initialization with development logger
40
- if self.dev_logger:
41
- self.dev_logger.log_info(
42
- SDKEventType.COMPONENT_CREATED,
43
- "Metrics service initialized",
44
- context=SDKContext(
45
- parser_id=self.parser_id,
46
- component_name="Metrics",
47
- layer_name="UnrealOn_Driver",
48
- metadata={
49
- "enabled": True,
50
- "config": "auto-configured",
51
- },
52
- ),
53
- )
54
-
55
- def record_operation(
56
- self,
57
- service: str,
58
- operation: str,
59
- duration: float,
60
- result_count: int,
61
- error: Optional[str] = None,
62
- ):
63
- """Record operation metrics with structured logging."""
64
- # Collect metrics data
65
- key = f"{service}_{operation}"
66
- if key not in self._metrics_data:
67
- self._metrics_data[key] = {
68
- "count": 0,
69
- "total_duration": 0.0,
70
- "errors": 0,
71
- "total_results": 0,
72
- }
73
-
74
- self._metrics_data[key]["count"] += 1
75
- self._metrics_data[key]["total_duration"] += duration or 0.0
76
- self._metrics_data[key]["total_results"] += result_count
77
-
78
- if error:
79
- self._metrics_data[key]["errors"] += 1
80
-
81
- # Log error with SDK
82
- if self.dev_logger:
83
- self.dev_logger.log_error(
84
- SDKEventType.ERROR_DETECTED,
85
- f"Operation failed: {service}.{operation}",
86
- context=SDKContext(
87
- parser_id=self.parser_id,
88
- component_name="Metrics",
89
- layer_name="UnrealOn_Driver",
90
- metadata={
91
- "service": service,
92
- "operation": operation,
93
- "error": error,
94
- "duration_ms": duration * 1000,
95
- },
96
- ),
97
- )
98
- else:
99
- # Log successful metrics collection
100
- if self.dev_logger and self._metrics_data[key]["count"] % 10 == 0: # Log every 10th operation
101
- self.dev_logger.log_info(
102
- SDKEventType.PERFORMANCE_METRIC_COLLECTED,
103
- f"Metrics collected for {service}.{operation}",
104
- context=SDKContext(
105
- parser_id=self.parser_id,
106
- component_name="Metrics",
107
- layer_name="UnrealOn_Driver",
108
- metadata={
109
- "service": service,
110
- "operation": operation,
111
- "total_count": self._metrics_data[key]["count"],
112
- "avg_duration_ms": (self._metrics_data[key]["total_duration"] / self._metrics_data[key]["count"]) * 1000,
113
- "total_results": self._metrics_data[key]["total_results"],
114
- },
115
- ),
116
- )
117
-
118
- def record_test_execution(
119
- self,
120
- parser_id: str,
121
- duration: float,
122
- success: bool,
123
- result_size: Optional[int] = None,
124
- error: Optional[str] = None,
125
- ):
126
- """Record test execution metrics."""
127
- key = "test_execution"
128
- if key not in self._metrics_data:
129
- self._metrics_data[key] = {
130
- "total": 0,
131
- "successful": 0,
132
- "failed": 0,
133
- "total_duration": 0.0,
134
- }
135
-
136
- self._metrics_data[key]["total"] += 1
137
- self._metrics_data[key]["total_duration"] += duration
138
-
139
- if success:
140
- self._metrics_data[key]["successful"] += 1
141
- else:
142
- self._metrics_data[key]["failed"] += 1
143
-
144
- def start_timer(self, name: str) -> float:
145
- """Start a timer and return start time."""
146
- import time
147
-
148
- return time.time()
149
-
150
- def end_timer(self, name: str, start_time: float):
151
- """End a timer and record duration."""
152
- import time
153
-
154
- duration = time.time() - start_time
155
- self.record_operation("timer", name, duration, 1)
156
-
157
- def record_success(self, result_count: int = 1):
158
- """Record successful operation."""
159
- self.record_operation("general", "success", 0.0, result_count)
160
-
161
- def record_error(self, error_message: str):
162
- """Record error."""
163
- self.record_operation("general", "error", 0.0, 0, error_message)
164
-
165
- def health_check(self) -> dict:
166
- """Check metrics service health."""
167
- return {
168
- "status": "healthy" if self.config.enable_metrics else "disabled",
169
- "collected_metrics": len(self._metrics_data),
170
- "prometheus_enabled": getattr(self.config, 'prometheus_enabled', False),
171
- }
172
-
173
- def get_metrics_data(self) -> dict:
174
- """Get collected metrics data."""
175
- return self._metrics_data.copy()
176
-
177
- async def cleanup(self):
178
- """Clean up metrics resources."""
179
- # TODO: Implement cleanup (e.g., flush metrics to storage)
180
- pass
181
-
182
- def __repr__(self) -> str:
183
- return (
184
- f"<MetricsService(parser_id={self.parser_id}, metrics_count={len(self._metrics_data)})>"
185
- )