nedo-vision-worker 1.2.1__tar.gz → 1.2.3__tar.gz

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 (105) hide show
  1. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/PKG-INFO +3 -1
  2. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/README.md +2 -0
  3. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/__init__.py +1 -1
  4. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/doctor.py +32 -2
  5. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/WorkerSourceRepository.py +10 -1
  6. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/AIModelClient.py +12 -2
  7. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/GrpcClientBase.py +1 -1
  8. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/WorkerSourcePipelineClient.py +189 -177
  9. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/WorkerSourceUpdater.py +4 -3
  10. nedo_vision_worker-1.2.3/nedo_vision_worker/util/FFmpegUtil.py +73 -0
  11. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/VideoProbeUtil.py +1 -6
  12. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/DataSenderWorker.py +1 -1
  13. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/PipelineImageWorker.py +1 -1
  14. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/PKG-INFO +3 -1
  15. nedo_vision_worker-1.2.1/nedo_vision_worker/util/FFmpegUtil.py +0 -124
  16. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/cli.py +0 -0
  17. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/config/ConfigurationManager.py +0 -0
  18. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/config/__init__.py +0 -0
  19. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/database/DatabaseManager.py +0 -0
  20. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/database/__init__.py +0 -0
  21. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/initializer/AppInitializer.py +0 -0
  22. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/initializer/__init__.py +0 -0
  23. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/__init__.py +0 -0
  24. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/ai_model.py +0 -0
  25. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/auth.py +0 -0
  26. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/config.py +0 -0
  27. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/dataset_source.py +0 -0
  28. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/logs.py +0 -0
  29. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/ppe_detection.py +0 -0
  30. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/ppe_detection_label.py +0 -0
  31. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/restricted_area_violation.py +0 -0
  32. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/user.py +0 -0
  33. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/worker_source.py +0 -0
  34. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/worker_source_pipeline.py +0 -0
  35. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/worker_source_pipeline_config.py +0 -0
  36. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/worker_source_pipeline_debug.py +0 -0
  37. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/models/worker_source_pipeline_detection.py +0 -0
  38. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/AIModelService_pb2.py +0 -0
  39. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/AIModelService_pb2_grpc.py +0 -0
  40. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/DatasetSourceService_pb2.py +0 -0
  41. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py +0 -0
  42. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/HumanDetectionService_pb2.py +0 -0
  43. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py +0 -0
  44. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/PPEDetectionService_pb2.py +0 -0
  45. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py +0 -0
  46. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/VisionWorkerService_pb2.py +0 -0
  47. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py +0 -0
  48. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/WorkerSourcePipelineService_pb2.py +0 -0
  49. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py +0 -0
  50. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/WorkerSourceService_pb2.py +0 -0
  51. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py +0 -0
  52. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/protos/__init__.py +0 -0
  53. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/AIModelRepository.py +0 -0
  54. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/DatasetSourceRepository.py +0 -0
  55. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/PPEDetectionRepository.py +0 -0
  56. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/RestrictedAreaRepository.py +0 -0
  57. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/WorkerSourcePipelineDebugRepository.py +0 -0
  58. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/WorkerSourcePipelineDetectionRepository.py +0 -0
  59. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/WorkerSourcePipelineRepository.py +0 -0
  60. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/repositories/__init__.py +0 -0
  61. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/ConnectionInfoClient.py +0 -0
  62. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/DatasetSourceClient.py +0 -0
  63. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py +0 -0
  64. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/FileToRTMPServer.py +0 -0
  65. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/GrpcClientManager.py +0 -0
  66. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/ImageUploadClient.py +0 -0
  67. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/PPEDetectionClient.py +0 -0
  68. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/RTSPtoRTMPStreamer.py +0 -0
  69. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/RestrictedAreaClient.py +0 -0
  70. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/SharedDirectDeviceClient.py +0 -0
  71. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/SharedVideoStreamServer.py +0 -0
  72. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/SystemUsageClient.py +0 -0
  73. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/SystemWideDeviceCoordinator.py +0 -0
  74. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/VideoSharingDaemon.py +0 -0
  75. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/VideoStreamClient.py +0 -0
  76. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/WorkerSourceClient.py +0 -0
  77. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/WorkerStatusClient.py +0 -0
  78. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/services/__init__.py +0 -0
  79. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/HardwareID.py +0 -0
  80. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/ImageUploader.py +0 -0
  81. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/Networking.py +0 -0
  82. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/PlatformDetector.py +0 -0
  83. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/SystemMonitor.py +0 -0
  84. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/util/__init__.py +0 -0
  85. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/CoreActionWorker.py +0 -0
  86. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/DataSyncWorker.py +0 -0
  87. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/DatasetFrameSender.py +0 -0
  88. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/DatasetFrameWorker.py +0 -0
  89. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/PPEDetectionManager.py +0 -0
  90. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/PipelineActionWorker.py +0 -0
  91. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/RabbitMQListener.py +0 -0
  92. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/RestrictedAreaManager.py +0 -0
  93. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/SystemUsageManager.py +0 -0
  94. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/VideoStreamWorker.py +0 -0
  95. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/WorkerManager.py +0 -0
  96. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker/__init__.py +0 -0
  97. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker/worker_service.py +0 -0
  98. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/SOURCES.txt +0 -0
  99. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/dependency_links.txt +0 -0
  100. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/entry_points.txt +0 -0
  101. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/requires.txt +0 -0
  102. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/nedo_vision_worker.egg-info/top_level.txt +0 -0
  103. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/pyproject.toml +0 -0
  104. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/setup.cfg +0 -0
  105. {nedo_vision_worker-1.2.1 → nedo_vision_worker-1.2.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: Nedo Vision Worker Service Library for AI Vision Processing
5
5
  Author-email: Willy Achmat Fauzi <willy.achmat@gmail.com>
6
6
  Maintainer-email: Willy Achmat Fauzi <willy.achmat@gmail.com>
@@ -165,6 +165,8 @@ pip install -e .
165
165
  pip install -e .[dev]
166
166
  ```
167
167
 
168
+ See [INSTALL.md](INSTALL.md) for detailed installation instructions.
169
+
168
170
  ## 🔍 System Diagnostics
169
171
 
170
172
  Before running the worker service, use the built-in diagnostic tool to verify your system:
@@ -112,6 +112,8 @@ pip install -e .
112
112
  pip install -e .[dev]
113
113
  ```
114
114
 
115
+ See [INSTALL.md](INSTALL.md) for detailed installation instructions.
116
+
115
117
  ## 🔍 System Diagnostics
116
118
 
117
119
  Before running the worker service, use the built-in diagnostic tool to verify your system:
@@ -6,5 +6,5 @@ A library for running worker agents in the Nedo Vision platform.
6
6
 
7
7
  from .worker_service import WorkerService
8
8
 
9
- __version__ = "1.2.1"
9
+ __version__ = "1.2.3"
10
10
  __all__ = ["WorkerService"]
@@ -87,8 +87,8 @@ class WorkerServiceDoctor:
87
87
  def check_python_environment(self) -> None:
88
88
  """Comprehensive Python environment validation."""
89
89
  version = sys.version_info
90
- min_version = (3, 8)
91
- recommended_version = (3, 9)
90
+ min_version = (3, 10)
91
+ recommended_version = (3, 10)
92
92
 
93
93
  details = [
94
94
  f"Python {version.major}.{version.minor}.{version.micro}",
@@ -891,6 +891,36 @@ class WorkerServiceDoctor:
891
891
  performance_impact=performance_impact
892
892
  ))
893
893
 
894
+ def check_psutil_installation(self) -> None:
895
+ """Check if psutil is installed for system monitoring."""
896
+ details = []
897
+ recommendations = []
898
+ try:
899
+ import psutil
900
+ version = getattr(psutil, '__version__', 'N/A')
901
+ details.append(f"psutil version: {version}")
902
+ status = HealthStatus.GOOD
903
+ message = "psutil is installed"
904
+ is_blocking = False
905
+ performance_impact = "None"
906
+ except ImportError:
907
+ status = HealthStatus.WARNING
908
+ message = "psutil not installed"
909
+ details.append("System resource monitoring will be disabled.")
910
+ recommendations.append("Install psutil for system monitoring: pip install psutil")
911
+ is_blocking = False
912
+ performance_impact = "Low"
913
+
914
+ self._add_result(HealthCheck(
915
+ name="System Monitoring (psutil)",
916
+ status=status,
917
+ message=message,
918
+ details=details,
919
+ recommendations=recommendations if recommendations else None,
920
+ is_blocking=is_blocking,
921
+ performance_impact=performance_impact
922
+ ))
923
+
894
924
  def run_comprehensive_health_check(self) -> List[HealthCheck]:
895
925
  """Execute all health checks with progress indication."""
896
926
  print("🏥 Nedo Vision Worker Service - Comprehensive Health Check")
@@ -17,6 +17,15 @@ class WorkerSourceRepository:
17
17
  except Exception as e:
18
18
  logger.error(f"🚨 [APP] Database error while fetching worker sources: {e}", exc_info=True)
19
19
  return []
20
+
21
+
22
+ def get_worker_sources_by_worker_id(self, worker_id: str):
23
+ """Retrieve all worker sources from the database."""
24
+ try:
25
+ return self.session.query(WorkerSourceEntity).filter_by(worker_id=worker_id).all()
26
+ except Exception as e:
27
+ logger.error(f"🚨 [APP] Database error while fetching worker sources: {e}", exc_info=True)
28
+ return []
20
29
 
21
30
  def bulk_update_worker_sources(self, updated_records):
22
31
  """Batch update worker sources in the database."""
@@ -43,4 +52,4 @@ class WorkerSourceRepository:
43
52
  return None
44
53
  except Exception as e:
45
54
  logger.error(f"🚨 [APP] Database error while fetching worker source by ID {worker_source_id}: {e}", exc_info=True)
46
- return None
55
+ return None
@@ -160,8 +160,12 @@ class AIModelClient(GrpcClientBase):
160
160
 
161
161
  def _handle_existing_model(self, server_model, local_model, updated_models: List):
162
162
  if not self._model_file_exists(local_model.file):
163
- logging.warning(f"⚠️ Model file missing for {local_model.name}. Re-downloading...")
164
- self._schedule_download(server_model)
163
+ # Only schedule download if not already downloading
164
+ if not self._is_downloading(server_model.id):
165
+ logging.warning(f"⚠️ Model file missing for {local_model.name}. Re-downloading...")
166
+ self._schedule_download(server_model)
167
+ else:
168
+ logging.debug(f"⏳ Model {local_model.name} is already being downloaded, skipping...")
165
169
  return
166
170
 
167
171
  needs_update, changes = self._check_model_changes(server_model, local_model)
@@ -246,6 +250,12 @@ class AIModelClient(GrpcClientBase):
246
250
  local_model.set_main_class(server_model.main_class)
247
251
 
248
252
  def _schedule_download(self, model):
253
+ # Check if already downloading - don't cancel and restart
254
+ if self._is_downloading(model.id):
255
+ logging.debug(f"⏳ Model {model.name} download already in progress, skipping reschedule")
256
+ return
257
+
258
+ # Only cancel if there's a stale download entry
249
259
  self._cancel_download(model.id)
250
260
 
251
261
  download_info = DownloadInfo(
@@ -68,7 +68,7 @@ class GrpcClientBase:
68
68
  self.connected = False
69
69
  error_msg = str(e)
70
70
 
71
- logger.error(f"⚠️ Connection failed ({attempts}/{self.max_retries}): {error_msg}")
71
+ logger.error(f"⚠️ Connection failed ({attempts}/{self.max_retries}): {error_msg}", exc_info=True)
72
72
 
73
73
  if attempts < self.max_retries:
74
74
  sleep_time = retry_interval * (2 ** (attempts - 1))