#!/usr/bin/env ruby require_relative '../lib/gitlab/popen' full_report_filename, metrics_filename = ARGV abort 'usage: memory-static-objects ' unless full_report_filename && metrics_filename full_report, status = Gitlab::Popen.popen(%w(bundle exec derailed bundle:objects)) abort 'failed to execute the benchmark' unless status.zero? File.open(full_report_filename, 'w') do |f| f.write(full_report) end allocated_str = full_report.lines[1] retained_str = full_report.lines[2] allocated_stats = /Total allocated: (?.*) bytes \((?.*) objects\)/.match(allocated_str) retained_stats = /Total retained: (?.*) bytes \((?.*) objects\)/.match(retained_str) abort 'failed to process the benchmark output' unless allocated_stats && retained_stats File.open(metrics_filename, 'a') do |f| f.puts "memory_static_objects_allocated_mb #{(allocated_stats[:bytes].to_f / (1024 * 1024)).round(1)}" f.puts "memory_static_objects_retained_mb #{(retained_stats[:bytes].to_f / (104 * 1024)).round(1)}" f.puts "memory_static_objects_allocated_items #{allocated_stats[:objects]}" f.puts "memory_static_objects_retained_items #{retained_stats[:objects]}" end