lib/gdk/command/measure_base.rb (66 lines of code) (raw):

# frozen_string_literal: true require 'time' require 'net/http' module GDK module Command class MeasureBase < BaseCommand SITESPEED_DOCKER_TAG = '29.5.0' def run(_ = []) check! if run_sitespeed open_report true else GDK::Output.warn('sitespeed failed to complete.') false end end private def open_report GDK::Output.notice("Opening Report open ./sitespeed_result/#{report_folder_name}/index.html") Shellout.new("open ./sitespeed-result/#{report_folder_name}/index.html").run end def check! GDK::Output.abort('Docker is not installed or running!', report_error: false) unless docker_running? GDK::Output.abort("GDK is not running locally on #{config.__uri}!", report_error: false) unless gdk_ok? end def use_git_branch_name? raise NotImplementedError end def gdk_ok? raise NotImplementedError end def items raise NotImplementedError end def gdk_running? GDK::HTTPHelper.new(config.__uri).up? end def docker_running? sh = Shellout.new('docker info') sh.run sh.success? end def report_folder_name @report_folder_name ||= begin folder_name = use_git_branch_name? ? Shellout.new('git rev-parse --abbrev-ref HEAD', chdir: config.gitlab.dir).run : 'external' folder_name + "_#{Time.now.strftime('%F-%H-%M-%S')}" end end def docker_command # For Linux, we need to add '--network=host' to the Docker command # https://www.sitespeed.io/documentation/sitespeed.io/docker/#access-localhost network_host = GDK::Machine.linux? ? '--network=host' : '' # Start Sitespeed through docker command = ["docker run #{network_host} --cap-add=NET_ADMIN --shm-size 2g --rm -v \"$(pwd):/sitespeed.io\" sitespeedio/sitespeed.io:#{SITESPEED_DOCKER_TAG} -b chrome"] # 4 repetitions command << '-n 4' # Limit Cable Connection command << '-c cable' # Deactivate the performance bar as it slows the measurements down command << '--cookie perf_bar_enabled=false' # Track CPU metrics command << '--cpu' # Write report to outputFolder command << "--outputFolder sitespeed-result/#{report_folder_name}" end def run_sitespeed GDK::Output.notice "Starting Sitespeed measurements for #{items.join(', ')}" sh = Shellout.new(docker_command.join(' ')) sh.stream sh.success? end end end end