diff options
author | Qingyu Zhao <qzhao@gitlab.com> | 2019-06-19 10:52:34 +1000 |
---|---|---|
committer | Qingyu Zhao <qzhao@gitlab.com> | 2019-06-21 20:05:59 +1000 |
commit | 940fcc9ff2d53bcfb050e402b3defa8619cce592 (patch) | |
tree | 3efbf47f9654a921c9eef41d5d482db417c38853 /scripts/generate-gems-size-metrics-static | |
parent | 1f3086a99c5837d50da0e2a55fdbb194d6a699a3 (diff) | |
download | gitlab-ce-940fcc9ff2d53bcfb050e402b3defa8619cce592.tar.gz |
Generate gem size metrics in memory CI62722-add-gem-size-data-to-metrics-report
This includes several changes:
- Rename memory-static to generate-gems-size-metrics-static
- Rename memory-static-objects to generate-gems-memory-metrics-static
- Change generate-gems-size-metrics-static interface. The script now
expect `bundle exec derailed bundle:mem` output as its input. The
script output to stdout, or stderr for error message.
- Change generate-gems-memory-metrics-static interface. The script now
expect `bundle exec derailed bundle:objects` output as its input.
The script output to stdout, or stderr for error message.
- Generate gem size metrics. Script generate-gems-size-metrics-static
extract each gem size from `bundle exec derailed bundle:mem` output.
Save output to metrics file in format: 'gem_size_mb{name="zip"} 0.5'
Diffstat (limited to 'scripts/generate-gems-size-metrics-static')
-rwxr-xr-x | scripts/generate-gems-size-metrics-static | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/scripts/generate-gems-size-metrics-static b/scripts/generate-gems-size-metrics-static new file mode 100755 index 00000000000..ceec8aaccf1 --- /dev/null +++ b/scripts/generate-gems-size-metrics-static @@ -0,0 +1,30 @@ +#!/usr/bin/env ruby + +abort "usage: #{__FILE__} <memory_bundle_mem_file_name>" unless ARGV.length == 1 +memory_bundle_mem_file_name = ARGV.first + +full_report = File.readlines(memory_bundle_mem_file_name) + +def total_size(memory_bundle_mem_report) + stats = /TOP: (?<total_mibs_str>.*) MiB/.match(memory_bundle_mem_report.first) + abort 'failed to process the benchmark output' unless stats + "gem_total_size_mb #{stats[:total_mibs_str].to_f.round(1)}" +end + +TOP_LEVEL_GEM_LOG_FORMAT = /^ (?<gem_name>\S.*):\s*(?<gem_size>\d[.\d]*)\s*MiB/.freeze +def all_gems(memory_bundle_mem_report) + memory_bundle_mem_report.map do |line| + TOP_LEVEL_GEM_LOG_FORMAT.match(line) + end.compact +end + +def gems_as_metrics(gems_match_data) + gems_match_data.map do |gem| + gem_name = gem[:gem_name] + gem_size_mb = gem[:gem_size].to_f.round(1) + "gem_size_mb{name=\"#{gem_name}\"} #{gem_size_mb}" + end +end + +puts total_size(full_report) +puts gems_as_metrics(all_gems(full_report)).sort(&:casecmp) |