Class: NewRelic::EnvironmentReport

Inherits:
Object
  • Object
show all
Defined in:
lib/new_relic/environment_report.rb

Overview

The EnvironmentReport is responsible for analyzing the application’s environment and generating the data for the Environment Report in New Relic’s interface.

It contains useful system information like Ruby version, OS, loaded gems, etc.

Additional logic can be registered by using the EnvironmentReport.report_on hook.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEnvironmentReport

Generate the report based on the class level logic.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/new_relic/environment_report.rb', line 94

def initialize
  @data = self.class.registered_reporters.inject(Hash.new) do |data, (key, logic)|
    begin
      value = logic.call
      if value
        data[key] = value

        Agent.record_metric("Supportability/EnvironmentReport/success", 0.0)
        Agent.record_metric("Supportability/EnvironmentReport/success/#{key}", 0.0)
      else
        Agent.logger.debug("EnvironmentReport ignoring value for #{key.inspect} which came back falsey: #{value.inspect}")
        Agent.record_metric("Supportability/EnvironmentReport/empty", 0.0)
        Agent.record_metric("Supportability/EnvironmentReport/empty/#{key}", 0.0)
      end
    rescue => e
      Agent.logger.debug("EnvironmentReport failed to retrieve value for #{key.inspect}: #{e}")
      Agent.record_metric("Supportability/EnvironmentReport/error", 0.0)
      Agent.record_metric("Supportability/EnvironmentReport/error/#{key}", 0.0)
    end
    data
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



92
93
94
# File 'lib/new_relic/environment_report.rb', line 92

def data
  @data
end

Class Method Details

.registered_reportersObject



35
36
37
# File 'lib/new_relic/environment_report.rb', line 35

def self.registered_reporters
  @registered_reporters ||= Hash.new
end

.registered_reporters=(logic) ⇒ Object

allow the logic to be swapped out in tests



40
41
42
# File 'lib/new_relic/environment_report.rb', line 40

def self.registered_reporters=(logic)
  @registered_reporters = logic
end

.report_on(key, &block) ⇒ Object

This is the main interface for registering logic that should be included in the Environment Report. For example:

EnvironmentReport.report_on “Day of week” do

Time.now.strftime("%A")

end

The passed blocks will be run in EnvironmentReport instances on #initialize.

Errors raised in passed blocks will be handled and logged at debug, so it is safe to report on things that may not work in certain environments.

The blocks should only return strings or arrays full of strings. Falsey values will be ignored.



31
32
33
# File 'lib/new_relic/environment_report.rb', line 31

def self.report_on(key, &block)
  registered_reporters[key] = block
end

Instance Method Details

#[](key) ⇒ Object



117
118
119
# File 'lib/new_relic/environment_report.rb', line 117

def [](key)
  @data[key]
end

#[]=(key, value) ⇒ Object



121
122
123
# File 'lib/new_relic/environment_report.rb', line 121

def []=(key, value)
  @data[key] = value
end

#to_aObject



125
126
127
# File 'lib/new_relic/environment_report.rb', line 125

def to_a
  @data.to_a
end