Class: FiberAudit::Configuration

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

Overview

rubocop:disable Metrics/ClassLength

Constant Summary collapse

KNOWN_TOP_LEVEL_KEYS =
%w[static rules report runtime].freeze
KNOWN_STATIC_KEYS =
%w[include exclude suppressions_path].freeze
KNOWN_REPORT_KEYS =
%w[formats min_severity].freeze
KNOWN_RULE_KEYS =
%w[enabled severity].freeze
KNOWN_RUNTIME_KEYS =
%w[redaction sampling overhead watchdog operation_liveness fail_open].freeze
KNOWN_OPERATION_LIVENESS_KEYS =
%w[enabled poll_interval_ms long_active_threshold_ms].freeze
KNOWN_REDACTION_KEYS =
%w[mode].freeze
KNOWN_SAMPLING_KEYS =
%w[rate].freeze
KNOWN_OVERHEAD_KEYS =
%w[
  max_events_per_second max_events_per_session max_record_bytes max_session_bytes
].freeze
KNOWN_WATCHDOG_KEYS =
%w[
  enabled heartbeat_interval_ms stall_threshold_ms max_frames
].freeze
RUNTIME_POLICY_PATHS =
{
  'redaction' => 'runtime.redaction.mode',
  'sampling_rate' => 'runtime.sampling.rate',
  'max_events_per_second' => 'runtime.overhead.max_events_per_second',
  'max_events_per_session' => 'runtime.overhead.max_events_per_session',
  'max_record_bytes' => 'runtime.overhead.max_record_bytes',
  'max_session_bytes' => 'runtime.overhead.max_session_bytes',
  'fail_open' => 'runtime.fail_open'
}.freeze
VALID_FORMATS =
%w[text json].freeze
DEFAULT_STATIC_INCLUDE =
%w[
  app/**/*.rb
  lib/**/*.rb
  config/**/*.rb
  config/initializers/**/*.rb
].freeze
DEFAULT_STATIC_EXCLUDE =
%w[
  vendor/**/*
  tmp/**/*
  node_modules/**/*
  db/schema.rb
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(static_include: DEFAULT_STATIC_INCLUDE, static_exclude: DEFAULT_STATIC_EXCLUDE, rules_config: {}, report_formats: %w[text],, min_severity: :low, suppressions_path: nil, runtime_policy: Runtime::Policy.new, runtime_watchdog_policy: Runtime::WatchdogPolicy.new, runtime_operation_liveness_policy: Runtime::OperationLivenessPolicy.new) ⇒ Configuration

Returns a new instance of Configuration.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/fiber_audit/configuration.rb', line 58

def initialize(
  static_include: DEFAULT_STATIC_INCLUDE,
  static_exclude: DEFAULT_STATIC_EXCLUDE,
  rules_config: {},
  report_formats: %w[text],
  min_severity: :low,
  suppressions_path: nil,
  runtime_policy: Runtime::Policy.new,
  runtime_watchdog_policy: Runtime::WatchdogPolicy.new,
  runtime_operation_liveness_policy: Runtime::OperationLivenessPolicy.new
)
  validate_types!(
    static_include, static_exclude, rules_config,
    report_formats, min_severity, suppressions_path, runtime_policy,
    runtime_watchdog_policy, runtime_operation_liveness_policy
  )

  @static_include = static_include
  @static_exclude = static_exclude
  @rules_config = rules_config
  @report_formats = report_formats
  @min_severity = coerce_severity(min_severity, 'report.min_severity')
  @suppressions_path = suppressions_path
  @runtime_policy = runtime_policy
  @runtime_watchdog_policy = runtime_watchdog_policy
  @runtime_operation_liveness_policy = runtime_operation_liveness_policy
end

Instance Attribute Details

#min_severityObject (readonly)

Returns the value of attribute min_severity.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def min_severity
  @min_severity
end

#report_formatsObject (readonly)

Returns the value of attribute report_formats.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def report_formats
  @report_formats
end

#rules_configObject (readonly)

Returns the value of attribute rules_config.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def rules_config
  @rules_config
end

#runtime_operation_liveness_policyObject (readonly)

Returns the value of attribute runtime_operation_liveness_policy.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def runtime_operation_liveness_policy
  @runtime_operation_liveness_policy
end

#runtime_policyObject (readonly)

Returns the value of attribute runtime_policy.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def runtime_policy
  @runtime_policy
end

#runtime_watchdog_policyObject (readonly)

Returns the value of attribute runtime_watchdog_policy.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def runtime_watchdog_policy
  @runtime_watchdog_policy
end

#static_excludeObject (readonly)

Returns the value of attribute static_exclude.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def static_exclude
  @static_exclude
end

#static_includeObject (readonly)

Returns the value of attribute static_include.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def static_include
  @static_include
end

#suppressions_pathObject (readonly)

Returns the value of attribute suppressions_path.



53
54
55
# File 'lib/fiber_audit/configuration.rb', line 53

def suppressions_path
  @suppressions_path
end

Class Method Details

.load(path = nil) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/fiber_audit/configuration.rb', line 102

def load(path = nil)
  return new unless path && File.exist?(path)

  yaml = YAML.safe_load_file(path) || {}
  validate_yaml_structure!(yaml)

  static = yaml['static'] || {}
  rules = yaml['rules'] || {}
  report = yaml['report'] || {}
  runtime = yaml['runtime'] || {}

  new(
    static_include: static['include'] || DEFAULT_STATIC_INCLUDE,
    static_exclude: static['exclude'] || DEFAULT_STATIC_EXCLUDE,
    rules_config: rules,
    report_formats: report['formats'] || %w[text],
    min_severity: report.fetch('min_severity', :low),
    suppressions_path: static['suppressions_path'],
    runtime_policy: runtime_policy_from(runtime),
    runtime_watchdog_policy: runtime_watchdog_policy_from(runtime),
    runtime_operation_liveness_policy: runtime_operation_liveness_policy_from(runtime)
  )
end

Instance Method Details

#rule_enabled?(rule_id) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
89
# File 'lib/fiber_audit/configuration.rb', line 86

def rule_enabled?(rule_id)
  entry = @rules_config[rule_id] || {}
  entry.fetch('enabled', true)
end

#severity_override(rule_id) ⇒ Object

Returns the overridden severity for a rule as a validated Symbol, or nil when no override is configured.



93
94
95
96
97
98
99
# File 'lib/fiber_audit/configuration.rb', line 93

def severity_override(rule_id)
  entry = @rules_config[rule_id] || {}
  sev = entry['severity']
  return nil unless sev

  coerce_severity(sev, "rules.#{rule_id}.severity")
end