Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQingyu Zhao <qzhao@gitlab.com>2019-06-19 03:52:34 +0300
committerQingyu Zhao <qzhao@gitlab.com>2019-06-21 13:05:59 +0300
commit940fcc9ff2d53bcfb050e402b3defa8619cce592 (patch)
tree3efbf47f9654a921c9eef41d5d482db417c38853 /scripts/generate-gems-size-metrics-static
parent1f3086a99c5837d50da0e2a55fdbb194d6a699a3 (diff)
Generate gem size metrics in memory CI
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-xscripts/generate-gems-size-metrics-static30
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)