Sha256: b2ecb6a9090e8efcd6197ce91ce89e9c182045da2d679445ec8832e9d1170195

Contents?: true

Size: 1.98 KB

Versions: 61

Compression:

Stored size: 1.98 KB

Contents

require "inspec/config"
require "inspec/utils/telemetry/data_series"
require "singleton"

module Inspec::Telemetry
  # A Singleton collection of data series objects.
  class Collector
    include Singleton

    attr_reader :config

    def initialize
      @data_series = []
      @telemetry_toggled_off = false
      load_config
    end

    # Allow loading a configuration, useful when testing.
    def load_config(config = Inspec::Config.cached)
      @config = config
    end

    # Add a data series to the collection.
    # @return [True]
    def add_data_series(data_series)
      @data_series << data_series
    end

    # The loaded configuration should have a option to configure
    # telemetry, if not default to false.
    # @return [True, False]
    def telemetry_enabled?
      if @telemetry_toggled_off
        false
      else
        config_telemetry_options.fetch("enable_telemetry", false)
      end
    end

    # A way to disable the telemetry system.
    def disable_telemetry
      @telemetry_toggled_off = true
    end

    # The entire data series collection.
    # @return [Array]
    def list_data_series
      @data_series
    end

    # Finds the data series object with the specified name and returns it.
    # If it does not exist then creates a new data series with that name
    # and returns it.
    # @return [Inspec::Telemetry::DataSeries]
    def find_or_create_data_series(name)
      ds = @data_series.select { |data_series| data_series.name.eql?(name) }
      if ds.empty?
        new_data_series = Inspec::Telemetry::DataSeries.new(name)
        @data_series << new_data_series
        new_data_series
      else
        ds.first
      end
    end

    # Blanks the contents of the data series collection.
    # Reset telemetry toggle
    # @return [True]
    def reset!
      @data_series = []
      @telemetry_toggled_off = false
    end

    private

    # Minimize exposure of Inspec::Config interface
    def config_telemetry_options
      config.telemetry_options
    end
  end
end

Version data entries

61 entries across 61 versions & 2 rubygems

Version Path
inspec-core-4.24.8 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.23.15 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.23.11 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.23.10 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.23.4 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.22.22 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.22.8 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.22.1 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.22.0 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.21.3 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.21.1 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.20.10 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.20.6 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.20.2 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.19.2 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.19.0 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.18.114 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.18.111 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.18.108 lib/inspec/utils/telemetry/collector.rb
inspec-core-4.18.104 lib/inspec/utils/telemetry/collector.rb