Class: OpenC3::PeriodicMicroservice

Inherits:
Microservice show all
Includes:
Api
Defined in:
lib/openc3/microservices/periodic_microservice.rb

Constant Summary collapse

STARTUP_DELAY_SECONDS =

Two Minutes

2 * 60
SLEEP_PERIOD_SECONDS =

Run once per day

24 * 60 * 60

Constants included from Api

Api::DELAY_METRICS, Api::DURATION_METRICS, Api::SUBSCRIPTION_DELIMITER, Api::SUM_METRICS

Constants included from ApiShared

ApiShared::DEFAULT_TLM_POLLING_RATE

Constants included from Extract

Extract::SCANNING_REGULAR_EXPRESSION

Instance Attribute Summary

Attributes inherited from Microservice

#count, #custom, #error, #logger, #microservice_status_thread, #name, #scope, #secrets, #state

Instance Method Summary collapse

Methods included from Api

#_build_cmd_output_string, #_cmd_implementation, #_extract_target_command_names, #_extract_target_command_parameter_names, #_extract_target_packet_item_names, #_extract_target_packet_names, #_get_and_set_cmd, #_get_item, #_limits_group, #_set_tlm_process_args, #_tlm_process_args, #_validate_tlm_type, #build_cmd, #cmd, #cmd_no_checks, #cmd_no_hazardous_check, #cmd_no_range_check, #cmd_raw, #cmd_raw_no_checks, #cmd_raw_no_hazardous_check, #cmd_raw_no_range_check, #config_tool_names, #connect_interface, #connect_router, #delete_config, #disable_cmd, #disable_limits, #disable_limits_group, #disconnect_interface, #disconnect_router, #enable_cmd, #enable_limits, #enable_limits_group, #get_all_cmd_names, #get_all_cmds, #get_all_interface_info, #get_all_router_info, #get_all_settings, #get_all_tlm, #get_all_tlm_names, #get_cmd, #get_cmd_buffer, #get_cmd_cnt, #get_cmd_cnts, #get_cmd_hazardous, #get_cmd_time, #get_cmd_value, #get_interface, #get_interface_names, #get_item, #get_limits, #get_limits_events, #get_limits_groups, #get_limits_set, #get_limits_sets, #get_metrics, #get_out_of_limits, #get_overall_limits_state, #get_overrides, #get_packet_derived_items, #get_packets, #get_param, #get_router, #get_router_names, #get_setting, #get_settings, #get_target, #get_target_interfaces, #get_target_names, #get_tlm, #get_tlm_buffer, #get_tlm_cnt, #get_tlm_cnts, #get_tlm_packet, #get_tlm_values, #inject_tlm, #interface_cmd, #interface_protocol_cmd, #limits_enabled?, #list_configs, #list_settings, #load_config, #map_target_to_interface, #normalize_tlm, #offline_access_needed, #override_tlm, #router_cmd, #router_protocol_cmd, #save_config, #send_raw, #set_limits, #set_limits_set, #set_offline_access, #set_setting, #set_tlm, #start_raw_logging_interface, #start_raw_logging_router, #stash_all, #stash_delete, #stash_get, #stash_keys, #stash_set, #stop_raw_logging_interface, #stop_raw_logging_router, #subscribe_packets, #tlm, #tlm_formatted, #tlm_raw, #tlm_variable, #tlm_with_units, #update_news

Methods inherited from Microservice

#as_json, #microservice_cmd, run, #setup_microservice_topic

Constructor Details

#initialize(*args) ⇒ PeriodicMicroservice

Returns a new instance of PeriodicMicroservice.



32
33
34
35
36
37
# File 'lib/openc3/microservices/periodic_microservice.rb', line 32

def initialize(*args)
  super(*args)
  @metric.set(name: 'periodic_total', value: @count, type: 'counter')
  @conn = nil # Faraday connection set by get_news
  get_news()
end

Instance Method Details

#get_newsObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/openc3/microservices/periodic_microservice.rb', line 39

def get_news
  if get_setting('news_feed', scope: @scope)
    unless @conn
      @conn = Faraday.new(
        url: 'https://news.openc3.com',
        params: {version: VERSION, enterprise: ENTERPRISE},
      )
    end
    response = @conn.get('/news')
    if response.success?
      NewsModel.set(response.body)
    else
      NewsModel.news_error(response)
    end
  end
end

#runObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/openc3/microservices/periodic_microservice.rb', line 56

def run
  @run_sleeper = Sleeper.new
  return if @run_sleeper.sleep(STARTUP_DELAY_SECONDS)
  while true
    models = OfflineAccessModel.get_all_models(scope: @scope)
    models.each do |name, model|
      if model.offline_access_token
        auth = OpenC3KeycloakAuthentication.new(ENV['OPENC3_KEYCLOAK_URL'])
        valid_token = auth.get_token_from_refresh_token(model.offline_access_token)
        if valid_token
          @logger.info("Refreshed offline access token for #{name}")
          model.offline_access_token = auth.refresh_token
        else
          @logger.error("Unable to refresh offline access token for #{name}")
          model.offline_access_token = nil
        end
        model.update
      end
    end
    @count += 1
    @metric.set(name: 'periodic_total', value: @count, type: 'counter')
    break if @cancel_thread
    break if @run_sleeper.sleep(SLEEP_PERIOD_SECONDS)
    get_news()
  end
end

#shutdownObject



83
84
85
86
# File 'lib/openc3/microservices/periodic_microservice.rb', line 83

def shutdown
  @run_sleeper.cancel if @run_sleeper
  super()
end