File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/chef-telemetry-1.0.8/lib/chef/telemetry/

Viewing File: client.rb

require "net/http"
require "uri"
require "json"
require "concurrent"

class Chef
  class Telemetry
    class Client
      include Concurrent::Async

      TELEMETRY_ENDPOINT = "https://telemetry.chef.io".freeze

      attr_reader :http
      def initialize(endpoint = TELEMETRY_ENDPOINT)
        super()
        uri = URI(endpoint)
        @http = Net::HTTP.new(uri.host, uri.port)
        @http.use_ssl = uri.scheme == "https"
        @http.start
      end

      def fire(event)
        req = Net::HTTP::Post.new("/events")
        req["Content-Type"] = "application/json"
        req.body = JSON.dump(event)
        # TODO: @cwolfe use response and at least debug log status
        http.request req
      end
    end

    class OptOutClient
      def fire(_); end
    end
  end
end