3434 ni_measurementlink_service
3535 </ a >
3636 < div class ="version ">
37- 1.1.0-dev2
37+ 1.1.0
3838 </ div >
3939< div role ="search ">
4040 < form id ="rtd-search-form " class ="wy-form " action ="../../../search.html " method ="get ">
@@ -79,7 +79,9 @@ <h1>Source code for ni_measurementlink_service._internal.discovery_client</h1><d
7979< span class ="kn "> import</ span > < span class ="nn "> logging</ span >
8080< span class ="kn "> import</ span > < span class ="nn "> os</ span >
8181< span class ="kn "> import</ span > < span class ="nn "> pathlib</ span >
82+ < span class ="kn "> import</ span > < span class ="nn "> subprocess</ span >
8283< span class ="kn "> import</ span > < span class ="nn "> sys</ span >
84+ < span class ="kn "> import</ span > < span class ="nn "> time</ span >
8385< span class ="kn "> import</ span > < span class ="nn "> typing</ span >
8486< span class ="kn "> from</ span > < span class ="nn "> typing</ span > < span class ="kn "> import</ span > < span class ="n "> Optional</ span >
8587
@@ -101,6 +103,9 @@ <h1>Source code for ni_measurementlink_service._internal.discovery_client</h1><d
101103
102104< span class ="n "> _logger</ span > < span class ="o "> =</ span > < span class ="n "> logging</ span > < span class ="o "> .</ span > < span class ="n "> getLogger</ span > < span class ="p "> (</ span > < span class ="vm "> __name__</ span > < span class ="p "> )</ span >
103105
106+ < span class ="n "> _START_SERVICE_TIMEOUT</ span > < span class ="o "> =</ span > < span class ="mf "> 30.0</ span >
107+ < span class ="n "> _START_SERVICE_POLLING_INTERVAL</ span > < span class ="o "> =</ span > < span class ="mf "> 100e-3</ span >
108+
104109
105110< div class ="viewcode-block " id ="ServiceLocation "> < a class ="viewcode-back " href ="../../../autoapi/ni_measurementlink_service/_internal/discovery_client/index.html#ni_measurementlink_service._internal.discovery_client.ServiceLocation "> [docs]</ a > < span class ="k "> class</ span > < span class ="nc "> ServiceLocation</ span > < span class ="p "> (</ span > < span class ="n "> typing</ span > < span class ="o "> .</ span > < span class ="n "> NamedTuple</ span > < span class ="p "> ):</ span >
106111< span class ="w "> </ span > < span class ="sd "> """Represents the location of a service."""</ span >
@@ -279,12 +284,78 @@ <h1>Source code for ni_measurementlink_service._internal.discovery_client</h1><d
279284
280285< span class ="k "> def</ span > < span class ="nf "> _get_discovery_service_address</ span > < span class ="p "> ()</ span > < span class ="o "> -></ span > < span class ="nb "> str</ span > < span class ="p "> :</ span >
281286 < span class ="n "> key_file_path</ span > < span class ="o "> =</ span > < span class ="n "> _get_key_file_path</ span > < span class ="p "> ()</ span >
287+ < span class ="n "> _ensure_discovery_service_started</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> )</ span >
282288 < span class ="n "> _logger</ span > < span class ="o "> .</ span > < span class ="n "> debug</ span > < span class ="p "> (</ span > < span class ="s2 "> "Discovery service key file path: </ span > < span class ="si "> %s</ span > < span class ="s2 "> "</ span > < span class ="p "> ,</ span > < span class ="n "> key_file_path</ span > < span class ="p "> )</ span >
283289 < span class ="k "> with</ span > < span class ="n "> _open_key_file</ span > < span class ="p "> (</ span > < span class ="nb "> str</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> ))</ span > < span class ="k "> as</ span > < span class ="n "> key_file</ span > < span class ="p "> :</ span >
284290 < span class ="n "> key_json</ span > < span class ="o "> =</ span > < span class ="n "> json</ span > < span class ="o "> .</ span > < span class ="n "> load</ span > < span class ="p "> (</ span > < span class ="n "> key_file</ span > < span class ="p "> )</ span >
285291 < span class ="k "> return</ span > < span class ="s2 "> "localhost:"</ span > < span class ="o "> +</ span > < span class ="n "> key_json</ span > < span class ="p "> [</ span > < span class ="s2 "> "InsecurePort"</ span > < span class ="p "> ]</ span >
286292
287293
294+ < span class ="k "> def</ span > < span class ="nf "> _ensure_discovery_service_started</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
295+ < span class ="w "> </ span > < span class ="sd "> """Check whether discovery service already running, if not start the discovery service."""</ span >
296+ < span class ="k "> if</ span > < span class ="n "> _service_already_running</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> ):</ span >
297+ < span class ="k "> return</ span >
298+
299+ < span class ="n "> exe_file_path</ span > < span class ="o "> =</ span > < span class ="n "> _get_discovery_service_location</ span > < span class ="p "> ()</ span >
300+ < span class ="n "> _start_service</ span > < span class ="p "> (</ span > < span class ="n "> exe_file_path</ span > < span class ="p "> ,</ span > < span class ="n "> key_file_path</ span > < span class ="p "> )</ span >
301+
302+
303+ < span class ="k "> def</ span > < span class ="nf "> _get_discovery_service_location</ span > < span class ="p "> ()</ span > < span class ="o "> -></ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> PurePath</ span > < span class ="p "> :</ span >
304+ < span class ="w "> </ span > < span class ="sd "> """Gets the location of the discovery service process executable."""</ span >
305+ < span class ="n "> registration_json_path</ span > < span class ="o "> =</ span > < span class ="n "> _get_registration_json_file_path</ span > < span class ="p "> ()</ span >
306+ < span class ="n "> registration_json_obj</ span > < span class ="o "> =</ span > < span class ="n "> json</ span > < span class ="o "> .</ span > < span class ="n "> loads</ span > < span class ="p "> (</ span > < span class ="n "> registration_json_path</ span > < span class ="o "> .</ span > < span class ="n "> read_text</ span > < span class ="p "> ())</ span >
307+ < span class ="k "> return</ span > < span class ="n "> registration_json_path</ span > < span class ="o "> .</ span > < span class ="n "> parent</ span > < span class ="o "> /</ span > < span class ="n "> registration_json_obj</ span > < span class ="p "> [</ span > < span class ="s2 "> "discovery"</ span > < span class ="p "> ][</ span > < span class ="s2 "> "path"</ span > < span class ="p "> ]</ span >
308+
309+
310+ < span class ="k "> def</ span > < span class ="nf "> _get_registration_json_file_path</ span > < span class ="p "> ()</ span > < span class ="o "> -></ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> :</ span >
311+ < span class ="k "> if</ span > < span class ="n "> sys</ span > < span class ="o "> .</ span > < span class ="n "> platform</ span > < span class ="o "> ==</ span > < span class ="s2 "> "win32"</ span > < span class ="p "> :</ span >
312+ < span class ="k "> return</ span > < span class ="p "> (</ span >
313+ < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> (</ span > < span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> environ</ span > < span class ="p "> [</ span > < span class ="s2 "> "ProgramW6432"</ span > < span class ="p "> ])</ span >
314+ < span class ="o "> /</ span > < span class ="s2 "> "National Instruments"</ span >
315+ < span class ="o "> /</ span > < span class ="s2 "> "Shared"</ span >
316+ < span class ="o "> /</ span > < span class ="s2 "> "MeasurementLink"</ span >
317+ < span class ="o "> /</ span > < span class ="s2 "> "MeasurementLinkServices.json"</ span >
318+ < span class ="p "> )</ span >
319+ < span class ="k "> else</ span > < span class ="p "> :</ span >
320+ < span class ="k "> raise</ span > < span class ="ne "> NotImplementedError</ span > < span class ="p "> (</ span > < span class ="s2 "> "Platform not supported"</ span > < span class ="p "> )</ span >
321+
322+
323+ < span class ="k "> def</ span > < span class ="nf "> _key_file_exists</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> bool</ span > < span class ="p "> :</ span >
324+ < span class ="k "> return</ span > < span class ="n "> key_file_path</ span > < span class ="o "> .</ span > < span class ="n "> is_file</ span > < span class ="p "> ()</ span > < span class ="ow "> and</ span > < span class ="n "> key_file_path</ span > < span class ="o "> .</ span > < span class ="n "> stat</ span > < span class ="p "> ()</ span > < span class ="o "> .</ span > < span class ="n "> st_size</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span >
325+
326+
327+ < span class ="k "> def</ span > < span class ="nf "> _start_service</ span > < span class ="p "> (</ span > < span class ="n "> exe_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> PurePath</ span > < span class ="p "> ,</ span > < span class ="n "> key_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
328+ < span class ="w "> </ span > < span class ="sd "> """Starts the service at the specified path and wait for the service to get up and running."""</ span >
329+ < span class ="n "> subprocess</ span > < span class ="o "> .</ span > < span class ="n "> Popen</ span > < span class ="p "> ([</ span > < span class ="n "> exe_file_path</ span > < span class ="p "> ],</ span > < span class ="n "> cwd</ span > < span class ="o "> =</ span > < span class ="n "> exe_file_path</ span > < span class ="o "> .</ span > < span class ="n "> parent</ span > < span class ="p "> )</ span >
330+ < span class ="c1 "> # After the execution of process, check for key file existence in the path</ span >
331+ < span class ="c1 "> # stop checking after 30 seconds have elapsed and throw error</ span >
332+ < span class ="n "> timeout_time</ span > < span class ="o "> =</ span > < span class ="n "> time</ span > < span class ="o "> .</ span > < span class ="n "> time</ span > < span class ="p "> ()</ span > < span class ="o "> +</ span > < span class ="n "> _START_SERVICE_TIMEOUT</ span >
333+ < span class ="k "> while</ span > < span class ="kc "> True</ span > < span class ="p "> :</ span >
334+ < span class ="k "> try</ span > < span class ="p "> :</ span >
335+ < span class ="k "> with</ span > < span class ="n "> _open_key_file</ span > < span class ="p "> (</ span > < span class ="nb "> str</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> ))</ span > < span class ="k "> as</ span > < span class ="n "> _</ span > < span class ="p "> :</ span >
336+ < span class ="k "> return</ span >
337+ < span class ="k "> except</ span > < span class ="ne "> IOError</ span > < span class ="p "> :</ span >
338+ < span class ="k "> pass</ span >
339+ < span class ="k "> if</ span > < span class ="n "> time</ span > < span class ="o "> .</ span > < span class ="n "> time</ span > < span class ="p "> ()</ span > < span class ="o "> >=</ span > < span class ="n "> timeout_time</ span > < span class ="p "> :</ span >
340+ < span class ="k "> raise</ span > < span class ="ne "> TimeoutError</ span > < span class ="p "> (</ span > < span class ="s2 "> "Timed out waiting for discovery service to start"</ span > < span class ="p "> )</ span >
341+ < span class ="n "> time</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="n "> _START_SERVICE_POLLING_INTERVAL</ span > < span class ="p "> )</ span >
342+
343+
344+ < span class ="k "> def</ span > < span class ="nf "> _service_already_running</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> bool</ span > < span class ="p "> :</ span >
345+ < span class ="k "> try</ span > < span class ="p "> :</ span >
346+ < span class ="n "> _delete_existing_key_file</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> )</ span >
347+ < span class ="k "> except</ span > < span class ="ne "> IOError</ span > < span class ="p "> :</ span >
348+ < span class ="k "> return</ span > < span class ="kc "> True</ span >
349+ < span class ="k "> return</ span > < span class ="kc "> False</ span >
350+
351+
352+ < span class ="k "> def</ span > < span class ="nf "> _delete_existing_key_file</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> :</ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
353+ < span class ="k "> if</ span > < span class ="n "> _key_file_exists</ span > < span class ="p "> (</ span > < span class ="n "> key_file_path</ span > < span class ="p "> ):</ span >
354+ < span class ="k "> with</ span > < span class ="n "> key_file_path</ span > < span class ="o "> .</ span > < span class ="n "> open</ span > < span class ="p "> (</ span > < span class ="s2 "> "w"</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> _</ span > < span class ="p "> :</ span >
355+ < span class ="k "> pass</ span >
356+ < span class ="n "> key_file_path</ span > < span class ="o "> .</ span > < span class ="n "> unlink</ span > < span class ="p "> ()</ span >
357+
358+
288359< span class ="k "> def</ span > < span class ="nf "> _get_key_file_path</ span > < span class ="p "> (</ span > < span class ="n "> cluster_id</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> pathlib</ span > < span class ="o "> .</ span > < span class ="n "> Path</ span > < span class ="p "> :</ span >
289360 < span class ="k "> if</ span > < span class ="n "> cluster_id</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
290361 < span class ="k "> return</ span > < span class ="n "> _get_key_file_directory</ span > < span class ="p "> ()</ span > < span class ="o "> /</ span > < span class ="sa "> f</ span > < span class ="s2 "> "DiscoveryService_</ span > < span class ="si "> {</ span > < span class ="n "> cluster_id</ span > < span class ="si "> }</ span > < span class ="s2 "> .json"</ span >
0 commit comments