Module: TingYun::Agent::InstanceMethods::Connect
- Includes:
- HandleErrors
- Included in:
- TingYun::Agent::InstanceMethods
- Defined in:
- lib/ting_yun/agent/instance_methods/connect.rb
Instance Method Summary collapse
-
#catch_errors ⇒ Object
-
:keep_retrying => falseto only try to connect once, and return with the connection set to nil.
-
- #connect_in_sync ⇒ Object
-
#connect_settings ⇒ Object
Initializes the hash of settings that we send to the server.
-
#connect_to_server ⇒ Object
Returns connect data passed back from the server.
- #connected? ⇒ Boolean
-
#disconnect ⇒ Object
Disconnect just sets connected to false, which prevents the agent from trying to connect again.
- #disconnected? ⇒ Boolean
-
#environment_for_connect ⇒ Object
Checks whether we should send environment info, and if so, returns the snapshot from the local environment.
-
#finish_setup(config_data) ⇒ Object
Takes a hash of configuration data returned from the server and uses it to set local variables and to initialize various parts of the agent that are configured separately.
- #generate_environment_report ⇒ Object
- #local_host ⇒ Object
- #log_collector_messages(messages) ⇒ Object
- #log_connection!(config_data) ⇒ Object
-
#query_server_for_configuration ⇒ Object
merge server config.
-
#sanitize_environment_report ⇒ Object
We’ve seen objects in the environment report (Rails.env in particular) that can’t seralize to JSON.
-
#should_connect?(force = false) ⇒ Boolean
Don’t connect if we’re already connected, or if we tried to connect and were rejected with prejudice because of a license issue, unless we’re forced to by force_reconnect.
Methods included from HandleErrors
#handle_delay_restart, #handle_force_disconnect, #handle_force_restart, #handle_license_error, #handle_other_error, #handle_server_error, #handle_unrecoverable_agent_error, #log_error
Instance Method Details
#catch_errors ⇒ Object
-
:keep_retrying => falseto only try to connect once, and return with the connection set to nil. This ensures we may try again later (default true). -
force_reconnect => trueif you want to establish a new connection to the server before running the worker loop. This means you get a separate agent run and Ting Yun sees it as a separate instance (default is false).
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 115 def catch_errors yield rescue TingYun::Support::Exception::UnKnownServerException => e handle_force_restart(e) retry rescue TingYun::Support::Exception::ServerConnectionException => e handle_delay_restart(e, 30) retry rescue => e handle_delay_restart(e, 30) retry end |
#connect_in_sync ⇒ Object
162 163 164 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 162 def connect_in_sync TingYun::Agent.disable_all_tracing { connect!(:keep_retrying => false) } end |
#connect_settings ⇒ Object
Initializes the hash of settings that we send to the server. Returns a literal hash containing the options
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 71 def connect_settings sanitize_environment_report settings = { :host => local_host, :port => ::TingYun::Agent.config[:port], :instanceName => ::TingYun::Agent.config[:'instance.name'], :appName => ::TingYun::Agent.config[:app_name], :language => 'Ruby', :agentVersion => TingYun::VERSION::STRING, :firstRun => @connect_state==:first, :oneAgentUuid=> 'oneAgentUuid', :environment => { :meta => { :pid => $$, :agentVersion => ::TingYun::VERSION::STRING, :readonly => true }, :env => @environment_report, :config => ::TingYun::Agent.config.to_collector_hash } } settings end |
#connect_to_server ⇒ Object
Returns connect data passed back from the server
100 101 102 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 100 def connect_to_server @service.connect(connect_settings) end |
#connected? ⇒ Boolean
29 30 31 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 29 def connected? @connect_state == :connected end |
#disconnect ⇒ Object
Disconnect just sets connected to false, which prevents the agent from trying to connect again
24 25 26 27 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 24 def disconnect @connect_state = :disconnected true end |
#disconnected? ⇒ Boolean
33 34 35 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 33 def disconnected? @connect_state == :disconnected end |
#environment_for_connect ⇒ Object
Checks whether we should send environment info, and if so, returns the snapshot from the local environment. Generating the EnvironmentReport has the potential to trigger require calls in Rails environments, so this method should only be called synchronously from on the main thread.
64 65 66 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 64 def environment_for_connect ::TingYun::Agent.config[:send_environment_info] ? TingYun::EnvironmentReport.new.data : {} end |
#finish_setup(config_data) ⇒ Object
Takes a hash of configuration data returned from the server and uses it to set local variables and to initialize various parts of the agent that are configured separately.
135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 135 def finish_setup(config_data) return if config_data == nil if config_data['config'] ::TingYun::Agent.logger.debug "Using config from server" end ::TingYun::Agent.logger.debug "Server provided config: #{config_data.inspect}" server_config = TingYun::Configuration::ServerSource.new(config_data) ::TingYun::Agent.config.replace_or_add_config(server_config) #log_connection!(config_data) end |
#generate_environment_report ⇒ Object
45 46 47 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 45 def generate_environment_report @environment_report = environment_for_connect end |
#local_host ⇒ Object
95 96 97 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 95 def local_host TingYun::Support::Hostname.get end |
#log_collector_messages(messages) ⇒ Object
156 157 158 159 160 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 156 def () .each do || ::TingYun::Agent.logger.send(['level'].downcase, ['message']) end end |
#log_connection!(config_data) ⇒ Object
147 148 149 150 151 152 153 154 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 147 def log_connection!(config_data) ::TingYun::Agent.logger.debug "Connected to TingYun Service at #{@service.collector.name}" ::TingYun::Agent.logger.debug "Application Run = #{@service.applicationId}." ::TingYun::Agent.logger.debug "Connection data = #{config_data.inspect}" if config_data['messages'] && config_data['messages'].any? (config_data['messages']) end end |
#query_server_for_configuration ⇒ Object
merge server config
105 106 107 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 105 def query_server_for_configuration finish_setup(connect_to_server) end |
#sanitize_environment_report ⇒ Object
We’ve seen objects in the environment report (Rails.env in particular) that can’t seralize to JSON. Cope with that here and clear out so downstream code doesn’t have to check again.
52 53 54 55 56 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 52 def sanitize_environment_report if !@service.valid_to_marshal?(@environment_report) @environment_report = {} end end |
#should_connect?(force = false) ⇒ Boolean
Don’t connect if we’re already connected, or if we tried to connect and were rejected with prejudice because of a license issue, unless we’re forced to by force_reconnect.
40 41 42 |
# File 'lib/ting_yun/agent/instance_methods/connect.rb', line 40 def should_connect?(force=false) force || (!connected? && !disconnected?) end |