Class: Necropsy::Bench::SeedRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/necropsy/bench/seed_runner.rb

Instance Method Summary collapse

Constructor Details

#initialize(manifest_path:, output_dir:, io: $stdout, clock: Process.method(:clock_gettime), analyzer: nil, feature_ablation: {}, rss_reader: nil, revision_reader: nil, dirty_reader: nil) ⇒ SeedRunner

Returns a new instance of SeedRunner.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/necropsy/bench/seed_runner.rb', line 16

def initialize(
  manifest_path:,
  output_dir:,
  io: $stdout,
  clock: Process.method(:clock_gettime),
  analyzer: nil,
  feature_ablation: {},
  rss_reader: nil,
  revision_reader: nil,
  dirty_reader: nil
)
  @manifest_path = File.expand_path(manifest_path)
  @output_dir = File.expand_path(output_dir)
  @io = io
  @clock = clock
  @analyzer = analyzer || lambda { |root, config_path|
    Necropsy.analyze(root: root, config_path: config_path, profile: true)
  }
  @feature_ablation = feature_ablation
  @rss_reader = rss_reader || method(:read_process_rss)
  @revision_reader = revision_reader || method(:read_git_revision)
  @dirty_reader = dirty_reader || method(:tracked_git_dirty?)
end

Instance Method Details

#call(update_golden_reason: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/necropsy/bench/seed_runner.rb', line 40

def call(update_golden_reason: nil)
  prepare_output
  reports = {}
  corpus_runs = manifest.fetch('corpora').sort.map do |id, definition|
    run_corpus(id, definition, reports)
  end
  union = CandidateUnion.new(
    manifest: manifest,
    repository_root: repository_root,
    reports: reports,
    diagnostics: diagnostics
  ).call
  write_json(File.join(output_dir, 'candidate_union.json'), union)
  update_golden(update_golden_reason, corpus_runs) if update_golden_reason
  golden = golden_status
  report_golden_status(golden)
  summary = build_summary(corpus_runs, union, golden)
  write_json(File.join(output_dir, 'summary.json'), summary)
  summary
end