3030OpenC3 . require_file 'openc3/utilities/secrets'
3131OpenC3 . require_file 'openc3/utilities/sleeper'
3232OpenC3 . require_file 'openc3/utilities/open_telemetry'
33+ OpenC3 . require_file 'openc3/utilities/thread_manager'
3334OpenC3 . require_file 'openc3/models/microservice_model'
3435OpenC3 . require_file 'openc3/models/microservice_status_model'
3536OpenC3 . require_file 'tmpdir'
@@ -49,22 +50,27 @@ class Microservice
4950 def self . run ( name = nil )
5051 name = ENV [ 'OPENC3_MICROSERVICE_NAME' ] unless name
5152 microservice = self . new ( name )
52- begin
53- MicroserviceStatusModel . set ( microservice . as_json ( :allow_nan => true ) , scope : microservice . scope )
54- microservice . state = 'RUNNING'
55- microservice . run
56- microservice . state = 'FINISHED'
57- rescue Exception => e
58- if SystemExit === e or SignalException === e
59- microservice . state = 'KILLED'
60- else
61- microservice . error = e
62- microservice . state = 'DIED_ERROR'
63- Logger . fatal ( "Microservice #{ name } dying from exception\n #{ e . formatted } " )
53+ thread = Thread . new do
54+ begin
55+ MicroserviceStatusModel . set ( microservice . as_json ( :allow_nan => true ) , scope : microservice . scope )
56+ microservice . state = 'RUNNING'
57+ microservice . run
58+ microservice . state = 'FINISHED'
59+ rescue Exception => e
60+ if SystemExit === e or SignalException === e
61+ microservice . state = 'KILLED'
62+ else
63+ microservice . error = e
64+ microservice . state = 'DIED_ERROR'
65+ Logger . fatal ( "Microservice #{ name } dying from exception\n #{ e . formatted } " )
66+ end
67+ ensure
68+ MicroserviceStatusModel . set ( microservice . as_json ( :allow_nan => true ) , scope : microservice . scope )
6469 end
65- ensure
66- MicroserviceStatusModel . set ( microservice . as_json ( :allow_nan => true ) , scope : microservice . scope )
6770 end
71+ ThreadManager . instance . register ( thread , shutdown_object : microservice )
72+ ThreadManager . instance . monitor
73+ ThreadManager . instance . shutdown
6874 end
6975
7076 def as_json ( *a )
@@ -192,6 +198,7 @@ def initialize(name, is_plugin: false)
192198 @logger . error "#{ @name } status thread died: #{ e . formatted } "
193199 raise e
194200 end
201+ ThreadManager . instance . register ( @microservice_status_thread )
195202 end
196203 end
197204
0 commit comments