Class: Flare::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/flare/configuration.rb

Constant Summary collapse

DEFAULT_SUBSCRIBE_PATTERNS =

Default patterns to auto-subscribe to for custom instrumentation Use “app.” prefix in your ActiveSupport::Notifications.instrument calls

%w[app.].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/flare/configuration.rb', line 45

def initialize
  @enabled = true
  @retention_hours = 24
  @max_spans = 10_000
  @database_path = nil
  @ignore_request = ->(request) { false }
  @subscribe_patterns = DEFAULT_SUBSCRIBE_PATTERNS.dup
  @debug = ENV["FLARE_DEBUG"] == "1"
  @http_metrics_config = HttpMetricsConfig::DEFAULT

  # Environment-based defaults:
  # - Development: spans ON (detailed debugging), metrics ON
  # - Production: spans OFF (too expensive), metrics ON
  # - Test: spans OFF, metrics OFF
  @spans_enabled = rails_development?
  @metrics_enabled = !rails_test?
  @metrics_flush_interval = 60 # seconds
  @tracing_enabled = !rails_test?
  @tracing_poll_interval = 30  # seconds
  @tracing_max_queue = 5_000

  # Metrics HTTP submission defaults
  @url = ENV.fetch("FLARE_URL", credentials_url || "https://flare.am")
  @key = ENV["FLARE_KEY"]
  @metrics_timeout = 5
  @metrics_gzip = true
end

Instance Attribute Details

#database_pathObject



84
85
86
# File 'lib/flare/configuration.rb', line 84

def database_path
  @database_path || default_database_path
end

#debugObject

Enable debug logging to see what Flare is doing. Set FLARE_DEBUG=1 or configure debug: true in your initializer.



43
44
45
# File 'lib/flare/configuration.rb', line 43

def debug
  @debug
end

#enabledObject

Returns the value of attribute enabled.



7
8
9
# File 'lib/flare/configuration.rb', line 7

def enabled
  @enabled
end

#http_metrics_configObject (readonly)

HTTP metrics path tracking configuration. Controls which outgoing HTTP paths are tracked with detail vs collapsed to “*”.



39
40
41
# File 'lib/flare/configuration.rb', line 39

def http_metrics_config
  @http_metrics_config
end

#ignore_requestObject

Returns the value of attribute ignore_request.



10
11
12
# File 'lib/flare/configuration.rb', line 10

def ignore_request
  @ignore_request
end

#keyObject

API key for authentication



27
28
29
# File 'lib/flare/configuration.rb', line 27

def key
  @key
end

#max_spansObject

Returns the value of attribute max_spans.



9
10
11
# File 'lib/flare/configuration.rb', line 9

def max_spans
  @max_spans
end

#metrics_enabledObject

Returns the value of attribute metrics_enabled.



19
20
21
# File 'lib/flare/configuration.rb', line 19

def metrics_enabled
  @metrics_enabled
end

#metrics_flush_intervalObject

seconds between flushes (default: 60)



20
21
22
# File 'lib/flare/configuration.rb', line 20

def metrics_flush_interval
  @metrics_flush_interval
end

#metrics_gzipObject

Whether to gzip payloads (default: true)



29
30
31
# File 'lib/flare/configuration.rb', line 29

def metrics_gzip
  @metrics_gzip
end

#metrics_timeoutObject

HTTP timeout in seconds (default: 5)



28
29
30
# File 'lib/flare/configuration.rb', line 28

def metrics_timeout
  @metrics_timeout
end

#retention_hoursObject

Returns the value of attribute retention_hours.



8
9
10
# File 'lib/flare/configuration.rb', line 8

def retention_hours
  @retention_hours
end

#spans_enabledObject

Spans: detailed trace data stored in SQLite (default: development only) Metrics: aggregated counters in memory, flushed periodically (default: production only) Tracing: server-controlled per-route trace sampling. Polls /api/rules for which routes/jobs to capture, ships matched traces direct to R2 via presigned URLs, self-notifies POST /api/traces.



18
19
20
# File 'lib/flare/configuration.rb', line 18

def spans_enabled
  @spans_enabled
end

#subscribe_patternsObject

Returns the value of attribute subscribe_patterns.



35
36
37
# File 'lib/flare/configuration.rb', line 35

def subscribe_patterns
  @subscribe_patterns
end

#tracing_enabledObject

Returns the value of attribute tracing_enabled.



21
22
23
# File 'lib/flare/configuration.rb', line 21

def tracing_enabled
  @tracing_enabled
end

#tracing_max_queueObject

max traced spans buffered per process



23
24
25
# File 'lib/flare/configuration.rb', line 23

def tracing_max_queue
  @tracing_max_queue
end

#tracing_poll_intervalObject

seconds between /api/rules polls (default: 30)



22
23
24
# File 'lib/flare/configuration.rb', line 22

def tracing_poll_interval
  @tracing_poll_interval
end

#urlObject

Metrics HTTP submission settings



26
27
28
# File 'lib/flare/configuration.rb', line 26

def url
  @url
end

Instance Method Details

#http_metrics {|@http_metrics_config| ... } ⇒ Object

Configure HTTP metrics path tracking.

config.http_metrics do |http|
  http.host "api.stripe.com" do |h|
    h.allow %r{/v1/customers}
    h.allow %r{/v1/charges}
    h.map %r{/v1/connect/[\w-]+/transfers}, "/v1/connect/:account/transfers"
  end
  http.host "api.github.com", :all
end

Yields:



98
99
100
101
102
103
104
# File 'lib/flare/configuration.rb', line 98

def http_metrics(&block)
  # Clone defaults on first customization so user additions merge with built-in defaults
  if @http_metrics_config.equal?(HttpMetricsConfig::DEFAULT)
    @http_metrics_config = @http_metrics_config.dup
  end
  yield @http_metrics_config
end

#metrics_submission_configured?Boolean

Check if metrics can be submitted (endpoint and API key configured)

Returns:

  • (Boolean)


74
75
76
77
# File 'lib/flare/configuration.rb', line 74

def metrics_submission_configured?
  !@url.nil? && !@url.empty? &&
    !@key.nil? && !@key.empty?
end

#tracing_submission_configured?Boolean

Tracing reuses the same endpoint + key as metrics.

Returns:

  • (Boolean)


80
81
82
# File 'lib/flare/configuration.rb', line 80

def tracing_submission_configured?
  @tracing_enabled && metrics_submission_configured?
end