Class: OpenC3::PeriodicMicroservice
- Inherits:
-
Microservice
- Object
- Microservice
- OpenC3::PeriodicMicroservice
- 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
- #get_news ⇒ Object
-
#initialize(*args) ⇒ PeriodicMicroservice
constructor
A new instance of PeriodicMicroservice.
- #run ⇒ Object
- #shutdown ⇒ Object
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_news ⇒ Object
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 |
#run ⇒ Object
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 |
#shutdown ⇒ Object
83 84 85 86 |
# File 'lib/openc3/microservices/periodic_microservice.rb', line 83 def shutdown @run_sleeper.cancel if @run_sleeper super() end |