nedo-vision-worker 1.3.6__py3-none-any.whl → 1.3.8__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 (32) hide show
  1. nedo_vision_worker/__init__.py +1 -1
  2. nedo_vision_worker/bootstrap.py +51 -0
  3. nedo_vision_worker/cli.py +43 -192
  4. nedo_vision_worker/config/ConfigurationManager.py +101 -106
  5. nedo_vision_worker/config/ConfigurationManagerInterface.py +12 -0
  6. nedo_vision_worker/config/DummyConfigurationManager.py +52 -0
  7. nedo_vision_worker/protos/AIModelService_pb2_grpc.py +2 -2
  8. nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py +2 -2
  9. nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py +2 -2
  10. nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py +2 -2
  11. nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py +2 -2
  12. nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py +2 -2
  13. nedo_vision_worker/protos/WorkerSourceService_pb2.py +11 -11
  14. nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py +2 -2
  15. nedo_vision_worker/services/ConnectionInfoClient.py +1 -1
  16. nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py +64 -19
  17. nedo_vision_worker/services/GrpcClientBase.py +1 -0
  18. nedo_vision_worker/services/WorkerSourceClient.py +14 -3
  19. nedo_vision_worker/services/WorkerSourcePipelineClient.py +0 -2
  20. nedo_vision_worker/services/WorkerSourceUpdater.py +0 -4
  21. nedo_vision_worker/util/CorruptedImageValidator.py +55 -0
  22. nedo_vision_worker/worker/DataSenderWorker.py +1 -1
  23. nedo_vision_worker/worker/DatasetFrameWorker.py +4 -6
  24. nedo_vision_worker/worker/RabbitMQListener.py +0 -4
  25. nedo_vision_worker/worker_service.py +13 -96
  26. {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/METADATA +2 -1
  27. {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/RECORD +30 -28
  28. nedo_vision_worker/initializer/AppInitializer.py +0 -138
  29. nedo_vision_worker/initializer/__init__.py +0 -1
  30. {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/WHEEL +0 -0
  31. {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/entry_points.txt +0 -0
  32. {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/top_level.txt +0 -0
@@ -9,14 +9,9 @@ try:
9
9
  except RuntimeError:
10
10
  pass
11
11
 
12
- from .initializer.AppInitializer import AppInitializer
13
12
  from .worker.WorkerManager import WorkerManager
14
- from .config.ConfigurationManager import ConfigurationManager
15
- from .util.HardwareID import HardwareID
13
+ from .config.ConfigurationManagerInterface import ConfigurationManagerInterface
16
14
  from .services.GrpcClientBase import set_auth_failure_callback
17
- from .database.DatabaseManager import set_storage_path
18
- from . import models
19
-
20
15
 
21
16
  class WorkerService:
22
17
  """
@@ -26,8 +21,9 @@ class WorkerService:
26
21
 
27
22
  def __init__(
28
23
  self,
24
+ configuration_manager: ConfigurationManagerInterface,
29
25
  server_host: str = "be.vision.sindika.co.id",
30
- token: str = None,
26
+ token: str = "",
31
27
  system_usage_interval: int = 30,
32
28
  rtmp_server: str = "rtmp://live.vision.sindika.co.id:1935/live",
33
29
  storage_path: str = "data",
@@ -44,9 +40,8 @@ class WorkerService:
44
40
  storage_path: Storage path for databases and files (default: 'data')
45
41
  server_port: gRPC server port (default: 50051)
46
42
  """
47
- # Set the global storage path before any database operations
48
- set_storage_path(storage_path)
49
43
 
44
+ self._configuration_manager = configuration_manager
50
45
  self.logger = self._setup_logging()
51
46
  self.worker_manager = None
52
47
  self.running = False
@@ -89,84 +84,6 @@ class WorkerService:
89
84
 
90
85
  return logging.getLogger(__name__)
91
86
 
92
- def _initialize_configuration(self):
93
- """Initialize the application configuration."""
94
- self.logger.info("🚀 [APP] Initializing application...")
95
-
96
- # Initialize database
97
- ConfigurationManager.init_database()
98
-
99
- # Load all configurations at once
100
- config = ConfigurationManager.get_all_configs()
101
-
102
- # Use the server_host parameter directly
103
- server_host = self.server_host
104
- self.logger.info(f"🌐 [APP] Using server host: {server_host}")
105
-
106
- # Check if configuration exists
107
- if not config:
108
- self.logger.info("⚙️ [APP] Configuration not found. Performing first-time setup...")
109
-
110
- # Get hardware ID
111
- hardware_id = HardwareID.get_unique_id()
112
-
113
- self.logger.info(f"🖥️ [APP] Detected Hardware ID: {hardware_id}")
114
- self.logger.info(f"🌐 [APP] Using Server Host: {server_host}")
115
-
116
- # Check if token is provided
117
- if not self.token:
118
- raise ValueError("Token is required for worker initialization. Please provide a token obtained from the frontend.")
119
-
120
- # Initialize with token
121
- AppInitializer.initialize_configuration(hardware_id, server_host, self.token)
122
-
123
- # Set server_port in config for first-time setup
124
- ConfigurationManager.set_config("server_port", str(self.server_port))
125
-
126
- # Get configuration
127
- config = ConfigurationManager.get_all_configs()
128
- else:
129
- # Check if server_host, server_port, or token has changed and update if needed
130
- config_updated = False
131
-
132
- if config['server_host'] != server_host:
133
- ConfigurationManager.set_config("server_host", server_host)
134
- config_updated = True
135
- self.logger.info(f"✅ [APP] Updated server host to: {server_host}")
136
-
137
- # Check if server_port has changed and update if needed
138
- if str(config.get('server_port')) != str(self.server_port):
139
- ConfigurationManager.set_config("server_port", str(self.server_port))
140
- config_updated = True
141
- self.logger.info(f"✅ [APP] Updated server port to: {self.server_port}")
142
-
143
- # Check if token has changed and update if needed
144
- if self.token and config.get('token') != self.token:
145
- ConfigurationManager.set_config("token", self.token)
146
- config_updated = True
147
- self.logger.info("✅ [APP] Updated authentication token")
148
-
149
- if config_updated:
150
- config = ConfigurationManager.get_all_configs()
151
- self.logger.info("✅ [APP] Configuration updated successfully")
152
- else:
153
- self.logger.info("✅ [APP] Configuration found. No changes needed.")
154
-
155
- # Always fetch connection info on startup to check for updates
156
- self.logger.info("🔄 [APP] Checking for connection info updates...")
157
- token_to_use = self.token if self.token else config.get('token')
158
- if token_to_use:
159
- AppInitializer.update_connection_info(server_host, self.server_port, token_to_use)
160
- # Reload config after potential updates
161
- config = ConfigurationManager.get_all_configs()
162
- else:
163
- self.logger.warning("⚠️ [APP] No token available to fetch connection info updates")
164
-
165
- # Add runtime parameters to config
166
- config['rtmp_server'] = self.rtmp_server
167
-
168
- return config
169
-
170
87
  def initialize(self) -> bool:
171
88
  """
172
89
  Initialize the worker service components.
@@ -178,9 +95,9 @@ class WorkerService:
178
95
  self.logger.info("Worker service initialization started")
179
96
 
180
97
  # Initialize configuration
181
- self.config = self._initialize_configuration()
182
-
183
- if not self.config:
98
+ self.config = self._configuration_manager.get_all_configs()
99
+ print(self.config)
100
+ if self.config is None:
184
101
  raise RuntimeError("Failed to initialize configuration")
185
102
 
186
103
  # Initialize WorkerManager
@@ -275,12 +192,12 @@ def main():
275
192
  args = parser.parse_args()
276
193
 
277
194
  # Create and run worker service
278
- service = WorkerService(
279
- server_host=args.server_host,
280
- server_port=args.server_port,
281
- system_usage_interval=args.system_usage_interval
282
- )
283
- service.run()
195
+ # service = WorkerService(
196
+ # server_host=args.server_host,
197
+ # server_port=args.server_port,
198
+ # system_usage_interval=args.system_usage_interval
199
+ # )
200
+ # service.run()
284
201
 
285
202
 
286
203
  if __name__ == "__main__":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker
3
- Version: 1.3.6
3
+ Version: 1.3.8
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>
@@ -40,6 +40,7 @@ Requires-Dist: protobuf>=3.20.0
40
40
  Requires-Dist: psutil>=5.9.0
41
41
  Requires-Dist: requests>=2.28.0
42
42
  Requires-Dist: SQLAlchemy>=1.4.0
43
+ Requires-Dist: Pillow>=12.1.0
43
44
  Requires-Dist: pynvml>=11.4.1; platform_system != "Darwin" or platform_machine != "arm64"
44
45
  Provides-Extra: opencv
45
46
  Requires-Dist: opencv-python>=4.6.0; platform_machine not in "aarch64 armv7l" and extra == "opencv"
@@ -1,13 +1,14 @@
1
- nedo_vision_worker/__init__.py,sha256=_g6zmNHn0tjdnmSRMJzHoj7sw2hYWxnkRUYNQz3AO4E,203
2
- nedo_vision_worker/cli.py,sha256=ddWspJmSgVkcUYvRdkvTtMNuMTDvNCqLLuMVU9KE3Ik,7457
1
+ nedo_vision_worker/__init__.py,sha256=d9adM9jmB_as0536rJcdwV3bFVJvLGYGZ962kJ7gsoQ,203
2
+ nedo_vision_worker/bootstrap.py,sha256=CUwNtb_mf1VGwO1-ujai7ZNN0ojiO3XQzV50JEwmS3U,1430
3
+ nedo_vision_worker/cli.py,sha256=4Mqd8rplOTra8PoDgI_4N5spaTmPIL3u0K-k_z9MYxs,2488
3
4
  nedo_vision_worker/doctor.py,sha256=wNkpe8gLVd76Y_ViyK2h1ZFdqeSl37MnzZN5frWKu30,48410
4
- nedo_vision_worker/worker_service.py,sha256=9zz8hKwDwqwpfS0KPQfftGJtRci0uj_wiwcr_TGf-E0,11039
5
- nedo_vision_worker/config/ConfigurationManager.py,sha256=QrQaQ9Cdjpkcr2JE_miyrWJIZmMgZwJYBz-wE45Zzes,8011
5
+ nedo_vision_worker/worker_service.py,sha256=4SoWqjuz7lQKByU48-yBLV0CeTmX9LIJ5uIc-vmn6ck,7318
6
+ nedo_vision_worker/config/ConfigurationManager.py,sha256=NQD6kXmBrahuMIEhvUr1zrcB60HlQxTmWvBY1dD28PI,8392
7
+ nedo_vision_worker/config/ConfigurationManagerInterface.py,sha256=doV1Qv6e2edL5Llu-JOF_vhmB87iG-yTXL_GYmlvv9M,270
8
+ nedo_vision_worker/config/DummyConfigurationManager.py,sha256=J1Ur5AD4YKl6CmdJ78SufSw5gdTQURUQtww61FxIoks,1685
6
9
  nedo_vision_worker/config/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
7
10
  nedo_vision_worker/database/DatabaseManager.py,sha256=j2koXo1fnMmAyQnY4sv4txfZR8qIzrPyev-sQ4HBaOQ,9478
8
11
  nedo_vision_worker/database/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
9
- nedo_vision_worker/initializer/AppInitializer.py,sha256=6UVdjiuayziPYZ7JkQ436z7-9sHj7J3jtp6lfQsu-DU,5698
10
- nedo_vision_worker/initializer/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
11
12
  nedo_vision_worker/models/__init__.py,sha256=6ZH2W1Jcy4o6xBPqFPcyxRU2UJ5Zvw_kfO38yLLGtHA,796
12
13
  nedo_vision_worker/models/ai_model.py,sha256=9muyZL9AxtX417-tYUiw8bgvFPtqdXgEAq-hm_mLxGY,2277
13
14
  nedo_vision_worker/models/auth.py,sha256=hBMchk6ATy8Wc3fUWLpYRbeNiteb43t2hIub0cCFap8,456
@@ -24,19 +25,19 @@ nedo_vision_worker/models/worker_source_pipeline_config.py,sha256=dGYTpcTFFu6pmG
24
25
  nedo_vision_worker/models/worker_source_pipeline_debug.py,sha256=6S7TkN37FrAT4VwsEB38DWSad7QfvNhsOGtSEK8D1Qs,594
25
26
  nedo_vision_worker/models/worker_source_pipeline_detection.py,sha256=p6CJsiVCKprTYrNxJsiTB8njXdHkjZKVEyBceRVE6fY,560
26
27
  nedo_vision_worker/protos/AIModelService_pb2.py,sha256=0S0fUgyMHmfS6FVGuZ2Okz71f61vPXLoU8tosIzf7sI,3545
27
- nedo_vision_worker/protos/AIModelService_pb2_grpc.py,sha256=2uxhbAQDmAAkuuanYkfGtwmCdSVzob_AvcKh9M248hM,6076
28
+ nedo_vision_worker/protos/AIModelService_pb2_grpc.py,sha256=gLyVJ08Wy-GhmfEX3kGZgIOnmyIhs4pPu3jUErt2g3Y,6075
28
29
  nedo_vision_worker/protos/DatasetSourceService_pb2.py,sha256=plHyTJvGqWCtup2vI7Y_NocITV-q47aCV3xddgwrhRQ,3362
29
- nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py,sha256=Wuoj7bPzv6sMO_78Ruef_A8PcBO8WNLsYdDGR6zYG5s,6265
30
+ nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py,sha256=gwtQGTttFxXDUdyT8chQZ28RwJ10puR915pA56yXIKE,6264
30
31
  nedo_vision_worker/protos/HumanDetectionService_pb2.py,sha256=ltufKuBaXkOChbqOUVvbcRNxNTiaEj204QqktBcMstU,3277
31
- nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py,sha256=5yIOEcldBQJ1Ep_S-piesAx53TtElNMzx2Z7qwoett8,6260
32
+ nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py,sha256=4ZJXy7NE9SZbaFp9qBFo6CERIXV28z5mMG32Kx0VolY,6259
32
33
  nedo_vision_worker/protos/PPEDetectionService_pb2.py,sha256=c1v864-pcMiHekQU7kxqV0wQg-p8zloDPVegF8JHd5c,3582
33
- nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py,sha256=SKn2BOHaX-ztD97l6bfngvAeJiy-hnjphzNI7CfAvtw,6186
34
+ nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py,sha256=BT_NezGVweaHYadG30CUQNyatQbXMaI3ZNSOXfWs49A,6185
34
35
  nedo_vision_worker/protos/VisionWorkerService_pb2.py,sha256=d88SWd1orMP--zvhuJCFpGhadoxeC0FPprh6zZPt4pE,7146
35
- nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py,sha256=eV-kC0pPalm0di_yXlnHqv-6AhRWqJmyveTiFfUplLQ,18937
36
+ nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py,sha256=21fAcktkwTfY8oz1FZAR23bq4le0I1WBy-ZzwGNqO_E,18936
36
37
  nedo_vision_worker/protos/WorkerSourcePipelineService_pb2.py,sha256=61xX4pKm_eBDdgpPpQtLcB45cDOD0ON6n5syE1_iKrM,7058
37
- nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py,sha256=Bhq1kWbktPiYpIbmvzpfGapR1u_DEXawEaofJ7L_Be8,15384
38
- nedo_vision_worker/protos/WorkerSourceService_pb2.py,sha256=CcXys0UCBwmjROOf0VdoN6oJKNopM1LvJ8owdrlA7z0,3926
39
- nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py,sha256=23Zj3WSogfhmp_YK4z_DE3Bzs-N-X17SXL9A8u1rYus,8314
38
+ nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py,sha256=eqr6BVSyxIoKzRXnrsPH7koaIOj3pK53zj1W3ZKBOrY,15383
39
+ nedo_vision_worker/protos/WorkerSourceService_pb2.py,sha256=CxPGRi5L0R5jnHyAH5e5aVPZKnJNZBqkp-MrtM6Qqqk,4050
40
+ nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py,sha256=ArcAFizg5IkKpjBL3YEg4pyQXPIYi5k1TW1j53KSlwk,8313
40
41
  nedo_vision_worker/protos/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
41
42
  nedo_vision_worker/repositories/AIModelRepository.py,sha256=35cQ2EnJvMdArewumPrVIaiwueGy6cXU_g5J1Qcj6_Y,1415
42
43
  nedo_vision_worker/repositories/DatasetSourceRepository.py,sha256=MOUbXY1-7WUPhY15aMpdXl6rl0afSvu3Cq8jNtp9nzM,8595
@@ -48,11 +49,11 @@ nedo_vision_worker/repositories/WorkerSourcePipelineRepository.py,sha256=xfmEvgn
48
49
  nedo_vision_worker/repositories/WorkerSourceRepository.py,sha256=AhAJLAacMFdsOgtQNiu7Pahl1DAGI0T1THHeUlKwQJc,2385
49
50
  nedo_vision_worker/repositories/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
50
51
  nedo_vision_worker/services/AIModelClient.py,sha256=lxRNax6FR-pV0G1NpJnlaqjbQeu3kRolIUNSw1RkoZA,15406
51
- nedo_vision_worker/services/ConnectionInfoClient.py,sha256=toC9zuY2Hrx1Cwq8Gycy_iFlaG1DvFT4qewlLlitpEQ,2214
52
+ nedo_vision_worker/services/ConnectionInfoClient.py,sha256=udvcKVjZaWfmMbC3HM1cybU5fz9ZidnJGnHj6OSr0uQ,2226
52
53
  nedo_vision_worker/services/DatasetSourceClient.py,sha256=O5a7onxFl0z47zXaMXWxHAMPuuc-i_vzkd2w5fwrukc,3319
53
- nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py,sha256=K0n7iyR7jdce8IWdNuqa1Im-R00QnxBcb7u2KM2Wjbc,22423
54
+ nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py,sha256=Ypcc0fh1WiUMkICN_KRRAvGmeGkgF8jQ06gfiRYReW4,24747
54
55
  nedo_vision_worker/services/FileToRTMPServer.py,sha256=0hY5pmeAzLw_d3uPR2Qp6gSAYb4rJHiAunuNe08OvkM,2870
55
- nedo_vision_worker/services/GrpcClientBase.py,sha256=hPyxOGw3aGSW1FhmY3wp3Iq8U1MArXBmvEMdmd63NZ4,6827
56
+ nedo_vision_worker/services/GrpcClientBase.py,sha256=RkJDGRsXu5HalMDR8cOsIaoFf5tA_cLTkh5euBPyo2M,6852
56
57
  nedo_vision_worker/services/GrpcClientManager.py,sha256=DLXekmxlQogLo8V9-TNDXtyHT_UG-BaggqwsIups55k,5568
57
58
  nedo_vision_worker/services/GrpcConnection.py,sha256=UNjaUC4ZcXuteHQx8AAAL5ymYkT1OpoIvyCYPUc3tCI,4915
58
59
  nedo_vision_worker/services/ImageUploadClient.py,sha256=T353YsRfm74G7Mh-eWr5nvdQHXTfpKwHJFmNW8HyjT8,3019
@@ -65,11 +66,12 @@ nedo_vision_worker/services/SystemUsageClient.py,sha256=Yf77dooQeNh6CDL5FkWVrX95
65
66
  nedo_vision_worker/services/SystemWideDeviceCoordinator.py,sha256=9zBJMCbTMZS7gwN67rFpoUiTr82El2rpIO7DKFzeMjM,9417
66
67
  nedo_vision_worker/services/VideoSharingDaemon.py,sha256=hYMjUIKNUVT1qSxuUuHN-7Bd85MDkxfqslxDLe2PBYQ,29721
67
68
  nedo_vision_worker/services/VideoStreamClient.py,sha256=QSgUV3LijYrNdnBG1ylABOdUaSatQamfXaqJhAiol9M,7260
68
- nedo_vision_worker/services/WorkerSourceClient.py,sha256=vDZeCuHL5QQ2-knZ4TOSA59jzmbbThGIwFKKLEZ72Ws,9198
69
- nedo_vision_worker/services/WorkerSourcePipelineClient.py,sha256=cjev_NRGUZrC9tuMm8s5ov92fknQno4vLEt-yMFrUCY,18241
70
- nedo_vision_worker/services/WorkerSourceUpdater.py,sha256=4t_CEHBLGDRvvuQS6eEPMivTI11ZuzusKKto6t9tPIk,9115
69
+ nedo_vision_worker/services/WorkerSourceClient.py,sha256=rS5X1Se51YWXTkEiDUJbTSYgtrzpom6811aZ1SXIwkw,9939
70
+ nedo_vision_worker/services/WorkerSourcePipelineClient.py,sha256=9qj65uBujCVoUE3kqGkc7ztLKW0L28_POZIDY3e1rhk,18058
71
+ nedo_vision_worker/services/WorkerSourceUpdater.py,sha256=RUNkiL1FRrKkW4UDm4i4i8ShgJy__MhTTrNlfouDAZc,8892
71
72
  nedo_vision_worker/services/WorkerStatusClient.py,sha256=7kC5EZjEBwWtHOE6UQ29OPCpYnv_6HSuH7Tc0alK_2Q,2531
72
73
  nedo_vision_worker/services/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
74
+ nedo_vision_worker/util/CorruptedImageValidator.py,sha256=F58L-thVFiz_sfi84L6xc9y2njrEuiO2d9AwzSe03hk,1529
73
75
  nedo_vision_worker/util/EncoderSelector.py,sha256=-9lZwVmiKzJr1cELeuCXi-jRonty2bpociZq4KDScmA,3399
74
76
  nedo_vision_worker/util/FFmpegUtil.py,sha256=QnQrzurmllzGb7SlAAYCrzKBUblweoFU-0h-X-32IYg,1829
75
77
  nedo_vision_worker/util/HardwareID.py,sha256=rSW8-6stm7rjXEdkYGqXMUn56gyw62YiWnSwZQVCCLM,4315
@@ -80,22 +82,22 @@ nedo_vision_worker/util/SystemMonitor.py,sha256=2kkqj9mOlywAS2fHdN1TaIXSXvCApcIH
80
82
  nedo_vision_worker/util/VideoProbeUtil.py,sha256=cF-vJ7hIDlXfEJby2a0s9tqwkPGVz_6B3Vv4D5pMmIw,12876
81
83
  nedo_vision_worker/util/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
82
84
  nedo_vision_worker/worker/CoreActionWorker.py,sha256=lb7zPY3yui6I3F4rX4Ii7JwpWZahLEO72rh3iWOgFmg,5441
83
- nedo_vision_worker/worker/DataSenderWorker.py,sha256=Z1jJKqA5Z1gpLkqttnMOh81JyMD1zTG_EbdsCUJVKI0,8793
85
+ nedo_vision_worker/worker/DataSenderWorker.py,sha256=TpMLhjpuuW-70TP6BzKpR9irPqVr9dDyFsBAA5s2N3U,8784
84
86
  nedo_vision_worker/worker/DataSyncWorker.py,sha256=LmDPt2J1frmXwuR46L6b0MjlFOHfgG-4_0MGQa78zF4,6288
85
87
  nedo_vision_worker/worker/DatasetFrameSender.py,sha256=1SFYj8LJFNi-anBTapsbq8U_NGMM7mnoMKg9NeFAHys,8087
86
- nedo_vision_worker/worker/DatasetFrameWorker.py,sha256=Hh_wZuMjwovxsEKFqXSuTRin9eYRBZCbcFKm3CKLMbE,19335
88
+ nedo_vision_worker/worker/DatasetFrameWorker.py,sha256=gVgMEnwZsLUsnOIml4XJGTBk5YkB0cjDYEp0X14OMHQ,19255
87
89
  nedo_vision_worker/worker/PPEDetectionManager.py,sha256=sXeOjvhCzi4oUhDZwH5-8DSxI9b__Jp0de8QksgaYGw,6063
88
90
  nedo_vision_worker/worker/PipelineActionWorker.py,sha256=xgvryjKtEsMj4BKqWzDIaK_lFny-DfMCj5Y2DxHnWww,5651
89
91
  nedo_vision_worker/worker/PipelineImageWorker.py,sha256=J8VBUG0cwcH3qOJp2zTl30B-XhmPFyvJLjxitKJYq0E,5642
90
92
  nedo_vision_worker/worker/PipelinePreviewWorker.py,sha256=owFiBbktcOZkdImQeykZSeBIR2-mpt6HNkmYIkLRKzE,6397
91
- nedo_vision_worker/worker/RabbitMQListener.py,sha256=9gR49MDplgpyb-D5HOH0K77-DJQFvhS2E7biL92SjSU,6950
93
+ nedo_vision_worker/worker/RabbitMQListener.py,sha256=Gwn7VpRg0fMZ0fva98eOnTzZ4HPFf2i_ZCUgwfTdyYQ,6768
92
94
  nedo_vision_worker/worker/RestrictedAreaManager.py,sha256=Pz2M9KPSMa1QPXZeYhyN9ih4eX6wmkNS_ZPu5KrvNxY,5927
93
95
  nedo_vision_worker/worker/SystemUsageManager.py,sha256=mkh4sT-HkIEY1CJHMEG6LP9ATu39YXvLRLyf995OkoQ,5315
94
96
  nedo_vision_worker/worker/VideoStreamWorker.py,sha256=5n6v1PNO7IB-jj_McALLkUP-cBjJoIEw4UiSAs3vTb0,7606
95
97
  nedo_vision_worker/worker/WorkerManager.py,sha256=2bxXi19fp3p1qjYBStYRdVVgko8dnevXx1_M_sqH5og,5521
96
98
  nedo_vision_worker/worker/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
97
- nedo_vision_worker-1.3.6.dist-info/METADATA,sha256=vcU6h0ZLPZD45KaGWde06KJ-YsUO39Ar2bXb_iq1Ups,14728
98
- nedo_vision_worker-1.3.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
- nedo_vision_worker-1.3.6.dist-info/entry_points.txt,sha256=LrglS-8nCi8C_PL_pa6uxdgCe879hBETHDVXAckvs-8,60
100
- nedo_vision_worker-1.3.6.dist-info/top_level.txt,sha256=vgilhlkyD34YsEKkaBabmhIpcKSvF3XpzD2By68L-XI,19
101
- nedo_vision_worker-1.3.6.dist-info/RECORD,,
99
+ nedo_vision_worker-1.3.8.dist-info/METADATA,sha256=1d7uHDe3L7gT__NouUzQ1dGAz9Q-AQmltkKZY4tX1VY,14758
100
+ nedo_vision_worker-1.3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
+ nedo_vision_worker-1.3.8.dist-info/entry_points.txt,sha256=LrglS-8nCi8C_PL_pa6uxdgCe879hBETHDVXAckvs-8,60
102
+ nedo_vision_worker-1.3.8.dist-info/top_level.txt,sha256=vgilhlkyD34YsEKkaBabmhIpcKSvF3XpzD2By68L-XI,19
103
+ nedo_vision_worker-1.3.8.dist-info/RECORD,,
@@ -1,138 +0,0 @@
1
- import logging
2
- import re
3
- import uuid
4
- import grpc
5
- from ..config.ConfigurationManager import ConfigurationManager
6
- from ..util.PlatformDetector import PlatformDetector
7
- from ..util.Networking import Networking
8
- from ..services.ConnectionInfoClient import ConnectionInfoClient
9
- from ..database.DatabaseManager import DatabaseManager
10
-
11
-
12
- class AppInitializer:
13
- @staticmethod
14
- def validate_uuid(value):
15
- """Validate if the provided value is a valid UUID."""
16
- try:
17
- uuid.UUID(value)
18
- return value
19
- except ValueError:
20
- raise ValueError(f"Invalid device ID format: {value}. Must be a valid UUID.")
21
-
22
- @staticmethod
23
- def validate_server_host(value):
24
- """Validate if the server host is a valid domain name or IP address."""
25
- domain_regex = (
26
- r"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*"
27
- r"([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
28
- )
29
- ip_regex = (
30
- r"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\."
31
- r"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\."
32
- r"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\."
33
- r"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
34
- )
35
- if re.match(domain_regex, value) or re.match(ip_regex, value):
36
- return value
37
- raise ValueError(f"Invalid server host: {value}. Must be a valid domain or IP address.")
38
-
39
- @staticmethod
40
- def initialize_configuration(device_id: str, server_host: str, token: str):
41
- """
42
- Initialize the application configuration using the provided token
43
- and saving configuration data locally.
44
- """
45
- try:
46
- # Validate inputs
47
- AppInitializer.validate_uuid(device_id)
48
- AppInitializer.validate_server_host(server_host)
49
-
50
- # Get connection info using the ConnectionInfoClient
51
- connection_client = ConnectionInfoClient(server_host, 50051, token)
52
- connection_result = connection_client.get_connection_info()
53
-
54
- if not connection_result["success"]:
55
- logging.error(f"Device connection info failed: {connection_result['message']}")
56
- return
57
-
58
- worker_id = connection_result.get('id')
59
- if not worker_id:
60
- raise ValueError("No worker_id returned from connection info!")
61
-
62
- ConfigurationManager.set_config_batch({
63
- "worker_id": worker_id,
64
- "server_host": server_host,
65
- "token": token,
66
- "rabbitmq_host": connection_result['rabbitmq_host'],
67
- "rabbitmq_port": str(connection_result['rabbitmq_port']),
68
- "rabbitmq_username": connection_result['rabbitmq_username'],
69
- "rabbitmq_password": connection_result['rabbitmq_password']
70
- })
71
- ConfigurationManager.print_config()
72
-
73
- except ValueError as ve:
74
- logging.error(f"Validation error: {ve}")
75
- except grpc.RpcError as ge:
76
- logging.error(f"Grpc Error: {ge}")
77
- except Exception as e:
78
- logging.error(f"Unexpected error during initialization: {e}")
79
-
80
- @staticmethod
81
- def update_connection_info(server_host: str, server_port: int, token: str):
82
- """
83
- Fetch and update connection information (RabbitMQ credentials) from the server.
84
- This should be called on startup to ensure credentials are up-to-date.
85
-
86
- Args:
87
- server_host: The server hostname or IP address
88
- server_port: The gRPC server port
89
- token: Authentication token for the worker
90
-
91
- Returns:
92
- bool: True if update was successful, False otherwise
93
- """
94
- try:
95
- # Validate server host
96
- AppInitializer.validate_server_host(server_host)
97
-
98
- # Get connection info using the ConnectionInfoClient
99
- connection_client = ConnectionInfoClient(server_host, server_port, token)
100
- connection_result = connection_client.get_connection_info()
101
-
102
- if not connection_result["success"]:
103
- logging.error(f"Failed to fetch connection info: {connection_result['message']}")
104
- return False
105
-
106
- # Check if any RabbitMQ credentials have changed
107
- current_config = ConfigurationManager.get_all_configs()
108
- config_updated = False
109
-
110
- rabbitmq_fields = {
111
- 'rabbitmq_host': connection_result['rabbitmq_host'],
112
- 'rabbitmq_port': str(connection_result['rabbitmq_port']),
113
- 'rabbitmq_username': connection_result['rabbitmq_username'],
114
- 'rabbitmq_password': connection_result['rabbitmq_password']
115
- }
116
-
117
- for field, new_value in rabbitmq_fields.items():
118
- if current_config.get(field) != new_value:
119
- ConfigurationManager.set_config(field, new_value)
120
- config_updated = True
121
- logging.info(f"✅ [APP] Updated {field}")
122
-
123
- if config_updated:
124
- logging.info("✅ [APP] RabbitMQ connection info updated successfully")
125
- else:
126
- logging.info("✅ [APP] RabbitMQ connection info is up-to-date")
127
-
128
- return True
129
-
130
- except ValueError as ve:
131
- logging.error(f"Validation error: {ve}")
132
- return False
133
- except grpc.RpcError as ge:
134
- logging.error(f"gRPC Error: {ge}")
135
- return False
136
- except Exception as e:
137
- logging.error(f"Unexpected error updating connection info: {e}")
138
- return False
@@ -1 +0,0 @@
1
-