Class: ChefApply::Telemeter::Sender
- Inherits:
-
Object
- Object
- ChefApply::Telemeter::Sender
- Defined in:
- lib/chef_apply/telemeter/sender.rb
Instance Attribute Summary collapse
-
#session_files ⇒ Object
readonly
Returns the value of attribute session_files.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(session_files) ⇒ Sender
constructor
A new instance of Sender.
- #process_session(path) ⇒ Object
- #run ⇒ Object
- #submit_entry(telemetry, entry, sequence, total) ⇒ Object
- #submit_session(content) ⇒ Object
Constructor Details
#initialize(session_files) ⇒ Sender
Returns a new instance of Sender.
46 47 48 |
# File 'lib/chef_apply/telemeter/sender.rb', line 46 def initialize(session_files) @session_files = session_files end |
Instance Attribute Details
#session_files ⇒ Object (readonly)
Returns the value of attribute session_files.
27 28 29 |
# File 'lib/chef_apply/telemeter/sender.rb', line 27 def session_files @session_files end |
Class Method Details
.find_session_files ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/chef_apply/telemeter/sender.rb', line 38 def self.find_session_files ChefApply::Log.info("Looking for telemetry data to submit") session_search = File.join(ChefApply::Config.telemetry_path, "telemetry-payload-*.yml") session_files = Dir.glob(session_search) ChefApply::Log.info("Found #{session_files.length} sessions to submit") session_files end |
.start_upload_thread ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/chef_apply/telemeter/sender.rb', line 29 def self.start_upload_thread # Find the files before we spawn the thread - otherwise # we may accidentally pick up the current run's session file if it # finishes before the thread scans for new files session_files = Sender.find_session_files sender = Sender.new(session_files) Thread.new { sender.run } end |
Instance Method Details
#process_session(path) ⇒ Object
71 72 73 74 75 |
# File 'lib/chef_apply/telemeter/sender.rb', line 71 def process_session(path) ChefApply::Log.info("Processing telemetry entries from #{path}") content = load_and_clear_session(path) submit_session(content) end |
#run ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/chef_apply/telemeter/sender.rb', line 50 def run if ChefApply::Telemeter.enabled? ChefApply::Log.info("Telemetry enabled, beginning upload of previous session(s)") # dev mode telemetry gets sent to a different location if ChefApply::Config.telemetry.dev ENV["CHEF_TELEMETRY_ENDPOINT"] ||= "https://telemetry-acceptance.chef.io" end session_files.each { |path| process_session(path) } else # If telemetry is not enabled, just clean up and return. Even though # the telemetry gem will not send if disabled, log output saying that we're submitting # it when it has been disabled can be alarming. ChefApply::Log.info("Telemetry disabled, clearing any existing session captures without sending them.") session_files.each { |path| FileUtils.rm_rf(path) } end FileUtils.rm_rf(ChefApply::Config.telemetry_session_file) ChefApply::Log.info("Terminating, nothing more to do.") rescue => e ChefApply::Log.fatal "Sender thread aborted: '#{e}' failed at #{e.backtrace[0]}" end |
#submit_entry(telemetry, entry, sequence, total) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/chef_apply/telemeter/sender.rb', line 96 def submit_entry(telemetry, entry, sequence, total) ChefApply::Log.info("Submitting telemetry entry #{sequence}/#{total}: #{entry} ") telemetry.deliver(entry) ChefApply::Log.info("Entry #{sequence}/#{total} submitted.") rescue => e # No error handling in telemetry lib, so at least track the failrue ChefApply::Log.error("Failed to send entry #{sequence}/#{total}: #{e}") ChefApply::Log.error("Backtrace: #{e.backtrace} ") end |
#submit_session(content) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/chef_apply/telemeter/sender.rb', line 77 def submit_session(content) # Each file contains the actions taken within a single run of the chef tool. # Each run is one session, so we'll first remove remove the session file # to force creating a new one. FileUtils.rm_rf(ChefApply::Config.telemetry_session_file) # We'll use the version captured in the sesion file entries = content["entries"] cli_version = content["version"] total = entries.length telemetry = Telemetry.new(product: "chef-workstation", origin: "command-line", product_version: cli_version, install_context: "omnibus") total = entries.length entries.each_with_index do |entry, x| submit_entry(telemetry, entry, x + 1, total) end end |