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.
- nedo_vision_worker/__init__.py +1 -1
- nedo_vision_worker/bootstrap.py +51 -0
- nedo_vision_worker/cli.py +43 -192
- nedo_vision_worker/config/ConfigurationManager.py +101 -106
- nedo_vision_worker/config/ConfigurationManagerInterface.py +12 -0
- nedo_vision_worker/config/DummyConfigurationManager.py +52 -0
- nedo_vision_worker/protos/AIModelService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py +2 -2
- nedo_vision_worker/protos/WorkerSourceService_pb2.py +11 -11
- nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py +2 -2
- nedo_vision_worker/services/ConnectionInfoClient.py +1 -1
- nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py +64 -19
- nedo_vision_worker/services/GrpcClientBase.py +1 -0
- nedo_vision_worker/services/WorkerSourceClient.py +14 -3
- nedo_vision_worker/services/WorkerSourcePipelineClient.py +0 -2
- nedo_vision_worker/services/WorkerSourceUpdater.py +0 -4
- nedo_vision_worker/util/CorruptedImageValidator.py +55 -0
- nedo_vision_worker/worker/DataSenderWorker.py +1 -1
- nedo_vision_worker/worker/DatasetFrameWorker.py +4 -6
- nedo_vision_worker/worker/RabbitMQListener.py +0 -4
- nedo_vision_worker/worker_service.py +13 -96
- {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/METADATA +2 -1
- {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/RECORD +30 -28
- nedo_vision_worker/initializer/AppInitializer.py +0 -138
- nedo_vision_worker/initializer/__init__.py +0 -1
- {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/WHEEL +0 -0
- {nedo_vision_worker-1.3.6.dist-info → nedo_vision_worker-1.3.8.dist-info}/entry_points.txt +0 -0
- {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.
|
|
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 =
|
|
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.
|
|
182
|
-
|
|
183
|
-
if
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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.
|
|
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=
|
|
2
|
-
nedo_vision_worker/
|
|
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=
|
|
5
|
-
nedo_vision_worker/config/ConfigurationManager.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
38
|
-
nedo_vision_worker/protos/WorkerSourceService_pb2.py,sha256=
|
|
39
|
-
nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
69
|
-
nedo_vision_worker/services/WorkerSourcePipelineClient.py,sha256=
|
|
70
|
-
nedo_vision_worker/services/WorkerSourceUpdater.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
98
|
-
nedo_vision_worker-1.3.
|
|
99
|
-
nedo_vision_worker-1.3.
|
|
100
|
-
nedo_vision_worker-1.3.
|
|
101
|
-
nedo_vision_worker-1.3.
|
|
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
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|