Class: OpenC3::TriggerGroupManager
- Defined in:
- lib/openc3/microservices/trigger_group_microservice.rb
Overview
The trigger manager starts a thread pool and subscribes to the telemetry decom topic. It adds the “packet” to the thread pool queue and the thread will evaluate the “trigger”.
Instance Attribute Summary collapse
-
#group ⇒ Object
readonly
Returns the value of attribute group.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
-
#share ⇒ Object
readonly
Returns the value of attribute share.
-
#thread_pool ⇒ Object
readonly
Returns the value of attribute thread_pool.
-
#topics ⇒ Object
readonly
Returns the value of attribute topics.
Instance Method Summary collapse
- #block_for_updates ⇒ Object
- #generate_thread_pool ⇒ Object
-
#initialize(name:, logger:, scope:, group:, share:) ⇒ TriggerGroupManager
constructor
A new instance of TriggerGroupManager.
- #refresh ⇒ Object
- #run ⇒ Object
- #shutdown ⇒ Object
- #update_topics ⇒ Object
Constructor Details
#initialize(name:, logger:, scope:, group:, share:) ⇒ TriggerGroupManager
Returns a new instance of TriggerGroupManager.
502 503 504 505 506 507 508 509 510 511 512 513 514 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 502 def initialize(name:, logger:, scope:, group:, share:) @name = name @logger = logger @scope = scope @group = group @share = share @worker_count = 3 @queue = Queue.new @read_topic = true @topics = [] @thread_pool = nil @cancel_thread = false end |
Instance Attribute Details
#group ⇒ Object (readonly)
Returns the value of attribute group.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def group @group end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def name @name end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def scope @scope end |
#share ⇒ Object (readonly)
Returns the value of attribute share.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def share @share end |
#thread_pool ⇒ Object (readonly)
Returns the value of attribute thread_pool.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def thread_pool @thread_pool end |
#topics ⇒ Object (readonly)
Returns the value of attribute topics.
500 501 502 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 500 def topics @topics end |
Instance Method Details
#block_for_updates ⇒ Object
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 558 def block_for_updates @read_topic = true while @read_topic begin Topic.read_topics(@topics) do |topic, _msg_id, msg_hash, _redis| @logger.debug "TriggerGroupManager block_for_updates: #{topic} #{msg_hash}" if topic != @share.trigger_base.autonomic_topic packet = JsonPacket.new(:TLM, msg_hash['target_name'], msg_hash['packet_name'], msg_hash['time'].to_i, false, msg_hash["json_data"]) @share.packet_base.add(topic: topic, packet: packet) end @queue << "#{topic}" end rescue StandardError => e @logger.error "TriggerGroupManager failed to read topics #{@topics}\n#{e.formatted}" end end end |
#generate_thread_pool ⇒ Object
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 516 def generate_thread_pool() thread_pool = [] @worker_count.times do | i | worker = TriggerGroupWorker.new( name: @name, logger: @logger, scope: @scope, group: @group, queue: @queue, share: @share, ident: i, ) thread_pool << Thread.new { worker.run } end return thread_pool end |
#refresh ⇒ Object
576 577 578 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 576 def refresh @read_topic = false end |
#run ⇒ Object
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 533 def run @logger.info "TriggerGroupManager running" @thread_pool = generate_thread_pool() loop do begin update_topics() rescue StandardError => e @logger.error "TriggerGroupManager failed to update topics.\n#{e.formatted}" end break if @cancel_thread block_for_updates() break if @cancel_thread end @logger.info "TriggerGroupManager exiting" end |
#shutdown ⇒ Object
580 581 582 583 584 585 586 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 580 def shutdown @read_topic = false @cancel_thread = true @worker_count.times do | _i | @queue << nil end end |
#update_topics ⇒ Object
549 550 551 552 553 554 555 556 |
# File 'lib/openc3/microservices/trigger_group_microservice.rb', line 549 def update_topics past_topics = @topics @topics = @share.trigger_base.topics() @logger.debug "TriggerGroupManager past_topics: #{past_topics} topics: #{@topics}" (past_topics - @topics).each do | removed_topic | @share.packet_base.remove(topic: removed_topic) end end |