Bug 1522604 - Use Raptor's custom logger class r=davehunt

Used custom logger for testing.raptor.raptor files to mention log level in messages

Differential Revision: https://phabricator.services.mozilla.com/D32985

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Marian Raiciof 2019-06-07 08:33:52 +00:00
parent fceda518ee
commit 11334f29e9
11 changed files with 124 additions and 118 deletions

View File

@ -8,11 +8,10 @@ import os
import shutil
import socket
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
from wptserve import server, handlers
LOG = get_proxy_logger(component="raptor-benchmark")
LOG = RaptorLogger(component='raptor-benchmark')
here = os.path.abspath(os.path.dirname(__file__))

View File

@ -14,9 +14,9 @@ import socket
import threading
import time
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
LOG = get_proxy_logger(component='raptor-control-server')
LOG = RaptorLogger(component='raptor-control-server')
here = os.path.abspath(os.path.dirname(__file__))

View File

@ -13,12 +13,12 @@ import tempfile
import zipfile
import mozfile
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
from profiler import symbolication, profiling
here = os.path.dirname(os.path.realpath(__file__))
LOG = get_proxy_logger()
LOG = RaptorLogger(component='raptor-gecko-profile')
class GeckoProfile(object):

View File

@ -5,12 +5,12 @@ from __future__ import absolute_import
import os
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
here = os.path.abspath(os.path.dirname(__file__))
webext_dir = os.path.join(os.path.dirname(here), 'webext', 'raptor')
LOG = get_proxy_logger(component="raptor-gen-test-config")
LOG = RaptorLogger(component='raptor-gen-test-config')
def gen_test_config(browser, test, cs_port, post_startup_delay,

View File

@ -6,14 +6,14 @@ from __future__ import absolute_import
import json
import os
from logger.logger import RaptorLogger
from manifestparser import TestManifest
from mozlog import get_proxy_logger
from utils import transform_platform
here = os.path.abspath(os.path.dirname(__file__))
raptor_ini = os.path.join(here, 'raptor.ini')
tests_dir = os.path.join(here, 'tests')
LOG = get_proxy_logger(component="raptor-manifest")
LOG = RaptorLogger(component='raptor-manifest')
LIVE_SITE_TIMEOUT_MULTIPLIER = 1.2
@ -93,7 +93,7 @@ def validate_test_ini(test_details):
if setting == "page-cycles" and test_details.get('browser_cycles') is not None:
continue
valid_settings = False
LOG.error("ERROR: setting '%s' is required but not found in %s"
LOG.error("setting '%s' is required but not found in %s"
% (setting, test_details['manifest']))
test_details.setdefault("page_timeout", 30000)
@ -103,7 +103,7 @@ def validate_test_ini(test_details):
for setting in playback_settings:
if test_details.get(setting) is None:
valid_settings = False
LOG.error("ERROR: setting '%s' is required but not found in %s"
LOG.error("setting '%s' is required but not found in %s"
% (setting, test_details['manifest']))
# if 'alert-on' is specified, we need to make sure that the value given is valid
@ -117,7 +117,7 @@ def validate_test_ini(test_details):
# now make sure each alert_on value provided is valid
for alert_on_value in test_details['alert_on']:
if alert_on_value not in test_details['measure']:
LOG.error("ERROR: The 'alert_on' value of '%s' is not valid because "
LOG.error("The 'alert_on' value of '%s' is not valid because "
"it doesn't exist in the 'measure' test setting!"
% alert_on_value)
valid_settings = False

View File

@ -13,9 +13,9 @@ import filters
import json
import os
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
LOG = get_proxy_logger(component="raptor-output")
LOG = RaptorLogger(component='raptor-output')
class Output(object):
@ -43,7 +43,7 @@ class Output(object):
# check if we actually have any results
if len(self.results) == 0:
LOG.error("error: no raptor test results found for %s" %
LOG.error("no raptor test results found for %s" %
', '.join(test_names))
return
@ -822,7 +822,7 @@ class Output(object):
screenshot_path = os.path.join(os.getcwd(), 'screenshots.html')
if self.summarized_results == {}:
LOG.error("error: no summarized raptor results found for %s" %
LOG.error("no summarized raptor results found for %s" %
', '.join(test_names))
else:
with open(results_path, 'w') as f:
@ -871,7 +871,7 @@ class Output(object):
from the actual Raptor test that was ran when the supporting data was gathered.
'''
if len(self.summarized_supporting_data) == 0:
LOG.error("error: no summarized supporting data found for %s" %
LOG.error("no summarized supporting data found for %s" %
', '.join(test_names))
return False

View File

@ -7,10 +7,10 @@ from __future__ import absolute_import
import json
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
LOG = get_proxy_logger(component='raptor-output-handler')
LOG = RaptorLogger(component='raptor-output-handler')
class OutputHandler(object):

View File

@ -7,11 +7,16 @@ from __future__ import absolute_import
import os
import re
from logger.logger import RaptorLogger
LOG = RaptorLogger(component='raptor-power')
def init_android_power_test(raptor):
upload_dir = os.getenv("MOZ_UPLOAD_DIR")
if not upload_dir:
raptor.log.critical(
LOG.critical(
"% power test ignored; MOZ_UPLOAD_DIR unset" % raptor.config["app"]
)
return
@ -85,7 +90,7 @@ def init_android_power_test(raptor):
def finish_android_power_test(raptor, test_name):
upload_dir = os.getenv("MOZ_UPLOAD_DIR")
if not upload_dir:
raptor.log.critical(
LOG.critical(
"% power test ignored because MOZ_UPLOAD_DIR was not set" % test_name
)
return
@ -181,7 +186,7 @@ def finish_android_power_test(raptor, test_name):
screen = full_screen if screen == 0 else screen
wifi = full_wifi if wifi is None else wifi
raptor.log.info(
LOG.info(
"power data for uid: %s, cpu: %s, wifi: %s, screen: %s, proportional: %s"
% (uid, cpu, wifi, screen, proportional)
)
@ -200,13 +205,12 @@ def finish_android_power_test(raptor, test_name):
},
}
# Only submit proportional measurement on Android 8+
LOG.info("submitting power data via control server directly")
if major_android_version >= 8:
power_data['values']['proportional'] = float(proportional)
raptor.log.info("submitting power data via control server directly")
raptor.control_server.submit_supporting_data(power_data)
# Generate power bugreport zip
raptor.log.info("generating power bugreport zip")
LOG.info("generating power bugreport zip")
raptor.device.command_output(["bugreport", upload_dir])

View File

@ -19,8 +19,9 @@ import requests
import mozcrash
import mozinfo
from logger.logger import RaptorLogger
from mozdevice import ADBDevice
from mozlog import commandline, get_default_logger
from mozlog import commandline
from mozprofile import create_profile
from mozproxy import get_playback
from mozrunner import runners
@ -59,6 +60,9 @@ from results import RaptorResultsHandler
from utils import view_gecko_profile
LOG = RaptorLogger(component='raptor-main')
class SignalHandler:
def __init__(self):
@ -106,7 +110,6 @@ class Raptor(object):
}
self.raptor_venv = os.path.join(os.getcwd(), 'raptor-venv')
self.log = get_default_logger(component='raptor-main')
self.control_server = None
self.playback = None
self.benchmark = None
@ -124,10 +127,10 @@ class Raptor(object):
# if running debug-mode reduce the pause after browser startup
if self.debug_mode:
self.post_startup_delay = min(self.post_startup_delay, 3000)
self.log.info("debug-mode enabled, reducing post-browser startup pause to %d ms"
% self.post_startup_delay)
LOG.info("debug-mode enabled, reducing post-browser startup pause to %d ms"
% self.post_startup_delay)
self.log.info("main raptor init, config is: %s" % str(self.config))
LOG.info("main raptor init, config is: %s" % str(self.config))
# create results holder
self.results_handler = RaptorResultsHandler()
@ -147,9 +150,9 @@ class Raptor(object):
raise NotImplementedError
def run_test_setup(self, test):
self.log.info("starting raptor test: %s" % test['name'])
self.log.info("test settings: %s" % str(test))
self.log.info("raptor config: %s" % str(self.config))
LOG.info("starting raptor test: %s" % test['name'])
LOG.info("test settings: %s" % str(test))
LOG.info("raptor config: %s" % str(self.config))
if test.get('type') == "benchmark":
self.serve_benchmark_source(test)
@ -211,7 +214,7 @@ class Raptor(object):
if not self.debug_mode:
elapsed_time += 1
if elapsed_time > (timeout) - 5: # stop 5 seconds early
self.log.info("application timed out after {} seconds".format(timeout))
LOG.info("application timed out after {} seconds".format(timeout))
self.control_server.wait_for_quit()
break
@ -227,12 +230,12 @@ class Raptor(object):
if self.config['gecko_profile'] is True:
self.gecko_profiler.symbolicate()
# clean up the temp gecko profiling folders
self.log.info("cleaning up after gecko profiling")
LOG.info("cleaning up after gecko profiling")
self.gecko_profiler.clean()
def set_browser_test_prefs(self, raw_prefs):
# add test specific preferences
self.log.info("setting test-specific Firefox preferences")
LOG.info("setting test-specific Firefox preferences")
self.profile.set_preferences(json.loads(raw_prefs))
def build_browser_profile(self):
@ -244,7 +247,7 @@ class Raptor(object):
for profile in base_profiles:
path = os.path.join(self.profile_data_dir, profile)
self.log.info("Merging profile: {}".format(path))
LOG.info("Merging profile: {}".format(path))
self.profile.merge(path)
# add profile dir to our config
@ -280,7 +283,7 @@ class Raptor(object):
continue
self.config[key] = os.path.join(playback_dir, self.config[key])
self.log.info("test uses playback tool: %s " % self.config['playback_tool'])
LOG.info("test uses playback tool: %s " % self.config['playback_tool'])
def serve_benchmark_source(self, test):
# benchmark-type tests require the benchmark test to be served out
@ -293,7 +296,7 @@ class Raptor(object):
# note: for chrome the addon is just a list of paths that ultimately are added
# to the chromium command line '--load-extension' argument
self.raptor_webext = os.path.join(webext_dir, 'raptor')
self.log.info("installing webext %s" % self.raptor_webext)
LOG.info("installing webext %s" % self.raptor_webext)
self.profile.addons.install(self.raptor_webext)
# on firefox we can get an addon id; chrome addon actually is just cmd line arg
@ -304,7 +307,7 @@ class Raptor(object):
def remove_raptor_webext(self):
# remove the raptor webext; as it must be reloaded with each subtest anyway
self.log.info("removing webext %s" % self.raptor_webext)
LOG.info("removing webext %s" % self.raptor_webext)
if self.config['app'] in ['firefox', 'geckoview', 'fennec', 'refbrow', 'fenix']:
self.profile.addons.remove_addon(self.webext_id)
@ -379,10 +382,10 @@ class Raptor(object):
userjsfile.writelines(prefs)
def _init_gecko_profiling(self, test):
self.log.info("initializing gecko profiler")
LOG.info("initializing gecko profiler")
upload_dir = os.getenv('MOZ_UPLOAD_DIR')
if not upload_dir:
self.log.critical("Profiling ignored because MOZ_UPLOAD_DIR was not set")
LOG.critical("Profiling ignored because MOZ_UPLOAD_DIR was not set")
else:
self.gecko_profiler = GeckoProfile(upload_dir,
self.config,
@ -411,7 +414,7 @@ class Raptor(object):
self.control_server_wait_clear('all')
self.control_server.stop()
self.log.info("finished")
LOG.info("finished")
def control_server_wait_set(self, state):
response = requests.post("http://127.0.0.1:%s/" % self.control_server.port,
@ -445,7 +448,7 @@ class RaptorDesktop(Raptor):
super(RaptorDesktop, self).__init__(*args, **kwargs)
# create the desktop browser runner
self.log.info("creating browser runner using mozrunner")
LOG.info("creating browser runner using mozrunner")
self.output_handler = OutputHandler()
process_args = {
'processOutputLine': [self.output_handler],
@ -495,13 +498,13 @@ class RaptorDesktop(Raptor):
The default will be to run in warm mode; unless 'cold = true' is set in the test INI.
'''
self.log.info("test %s is running in cold mode; browser WILL be restarted between "
"page cycles" % test['name'])
LOG.info("test %s is running in cold mode; browser WILL be restarted between "
"page cycles" % test['name'])
for test['browser_cycle'] in range(1, test['expected_browser_cycles'] + 1):
self.log.info("begin browser cycle %d of %d for test %s"
% (test['browser_cycle'], test['expected_browser_cycles'], test['name']))
LOG.info("begin browser cycle %d of %d for test %s"
% (test['browser_cycle'], test['expected_browser_cycles'], test['name']))
self.run_test_setup(test)
@ -559,7 +562,7 @@ class RaptorDesktop(Raptor):
else:
# in debug mode, and running locally, leave the browser running
if self.config['run_local']:
self.log.info("* debug-mode enabled - please shutdown the browser manually...")
LOG.info("* debug-mode enabled - please shutdown the browser manually...")
self.runner.wait(timeout=None)
super(RaptorDesktop, self).run_test_teardown()
@ -582,16 +585,16 @@ class RaptorDesktopFirefox(RaptorDesktop):
# For Firefox we need to set MOZ_DISABLE_NONLOCAL_CONNECTIONS=1 env var before startup
# when testing release builds from mozilla-beta/release. This is because of restrictions
# on release builds that require webextensions to be signed unless this env var is set
self.log.info("setting MOZ_DISABLE_NONLOCAL_CONNECTIONS=1")
LOG.info("setting MOZ_DISABLE_NONLOCAL_CONNECTIONS=1")
os.environ['MOZ_DISABLE_NONLOCAL_CONNECTIONS'] = "1"
def enable_non_local_connections(self):
# pageload tests need to be able to access non-local connections via mitmproxy
self.log.info("setting MOZ_DISABLE_NONLOCAL_CONNECTIONS=0")
LOG.info("setting MOZ_DISABLE_NONLOCAL_CONNECTIONS=0")
os.environ['MOZ_DISABLE_NONLOCAL_CONNECTIONS'] = "0"
def launch_desktop_browser(self, test):
self.log.info("starting %s" % self.config['app'])
LOG.info("starting %s" % self.config['app'])
if self.config['is_release_build']:
self.disable_non_local_connections()
@ -630,7 +633,7 @@ class RaptorDesktopChrome(RaptorDesktop):
self.runner.cmdargs.extend(chrome_args)
def launch_desktop_browser(self, test):
self.log.info("starting %s" % self.config['app'])
LOG.info("starting %s" % self.config['app'])
# some chromium-specfic cmd line opts required
self.runner.cmdargs.extend(['--use-mock-keychain', '--no-default-browser-check'])
@ -645,7 +648,7 @@ class RaptorDesktopChrome(RaptorDesktop):
def set_browser_test_prefs(self, raw_prefs):
# add test-specific preferences
self.log.info("preferences were configured for the test, however \
LOG.info("preferences were configured for the test, however \
we currently do not install them on non-Firefox browsers.")
@ -669,15 +672,15 @@ class RaptorAndroid(Raptor):
def set_reverse_ports(self, is_benchmark=False):
# Make services running on the host available to the device
if self.config['host'] in ('localhost', '127.0.0.1'):
self.log.info("making the raptor control server port available to device")
LOG.info("making the raptor control server port available to device")
self.set_reverse_port(self.control_server.port)
if self.config['host'] in ('localhost', '127.0.0.1'):
self.log.info("making the raptor playback server port available to device")
LOG.info("making the raptor playback server port available to device")
self.set_reverse_port(8080)
if is_benchmark and self.config['host'] in ('localhost', '127.0.0.1'):
self.log.info("making the raptor benchmarks server port available to device")
LOG.info("making the raptor benchmarks server port available to device")
self.set_reverse_port(self.benchmark_port)
def setup_adb_device(self):
@ -685,7 +688,7 @@ class RaptorAndroid(Raptor):
self.device = ADBDevice(verbose=True)
self.tune_performance()
self.log.info("creating remote root folder for raptor: %s" % self.remote_test_root)
LOG.info("creating remote root folder for raptor: %s" % self.remote_test_root)
self.device.rm(self.remote_test_root, force=True, recursive=True)
self.device.mkdir(self.remote_test_root)
self.device.chmod(self.remote_test_root, recursive=True, root=True)
@ -697,10 +700,10 @@ class RaptorAndroid(Raptor):
For more information, see https://bugzilla.mozilla.org/show_bug.cgi?id=1547135.
"""
self.log.info("tuning android device performance")
LOG.info("tuning android device performance")
self.set_svc_power_stayon()
if (self.device._have_su or self.device._have_android_su):
self.log.info("executing additional tuning commands requiring root")
LOG.info("executing additional tuning commands requiring root")
device_name = self.device.shell_output('getprop ro.product.model')
# all commands require root shell from here on
self.set_scheduler()
@ -710,22 +713,22 @@ class RaptorAndroid(Raptor):
self.set_gpu_performance_parameters(device_name)
self.set_kernel_performance_parameters()
self.device.clear_logcat()
self.log.info("android device performance tuning complete")
LOG.info("android device performance tuning complete")
def _set_value_and_check_exitcode(self, file_name, value, root=False):
self.log.info('setting {} to {}'.format(file_name, value))
LOG.info('setting {} to {}'.format(file_name, value))
process = self.device.shell(' '.join(['echo', str(value), '>', str(file_name)]), root=root)
if process.exitcode == 0:
self.log.info('successfully set {} to {}'.format(file_name, value))
LOG.info('successfully set {} to {}'.format(file_name, value))
else:
self.log.warning('command failed with exitcode {}'.format(str(process.exitcode)))
LOG.warning('command failed with exitcode {}'.format(str(process.exitcode)))
def set_svc_power_stayon(self):
self.log.info('set device to stay awake on usb')
LOG.info('set device to stay awake on usb')
self.device.shell('svc power stayon usb')
def set_scheduler(self):
self.log.info('setting scheduler to noop')
LOG.info('setting scheduler to noop')
scheduler_location = '/sys/block/sda/queue/scheduler'
self._set_value_and_check_exitcode(scheduler_location, 'noop')
@ -737,18 +740,18 @@ class RaptorAndroid(Raptor):
'thermald',
]
for service in services:
self.log.info(' '.join(['turning off service:', service]))
LOG.info(' '.join(['turning off service:', service]))
self.device.shell(' '.join(['stop', service]), root=True)
services_list_output = self.device.shell_output('service list')
for service in services:
if service not in services_list_output:
self.log.info(' '.join(['successfully terminated:', service]))
LOG.info(' '.join(['successfully terminated:', service]))
else:
self.log.warning(' '.join(['failed to terminate:', service]))
LOG.warning(' '.join(['failed to terminate:', service]))
def disable_animations(self):
self.log.info('disabling animations')
LOG.info('disabling animations')
commands = {
'animator_duration_scale': 0.0,
'transition_animation_scale': 0.0,
@ -757,12 +760,12 @@ class RaptorAndroid(Raptor):
for key, value in commands.items():
command = ' '.join(['settings', 'put', 'global', key, str(value)])
self.log.info('setting {} to {}'.format(key, value))
LOG.info('setting {} to {}'.format(key, value))
self.device.shell(command)
def restore_animations(self):
# animation settings are not restored to default by reboot
self.log.info('restoring animations')
LOG.info('restoring animations')
commands = {
'animator_duration_scale': 1.0,
'transition_animation_scale': 1.0,
@ -774,7 +777,7 @@ class RaptorAndroid(Raptor):
self.device.shell(command)
def set_virtual_memory_parameters(self):
self.log.info('setting virtual memory parameters')
LOG.info('setting virtual memory parameters')
commands = {
'/proc/sys/vm/swappiness': 0,
'/proc/sys/vm/dirty_ratio': 85,
@ -785,7 +788,7 @@ class RaptorAndroid(Raptor):
self._set_value_and_check_exitcode(key, value, root=True)
def set_cpu_performance_parameters(self, device_name):
self.log.info('setting cpu performance parameters')
LOG.info('setting cpu performance parameters')
commands = {}
if device_name == 'Pixel 2':
@ -817,7 +820,7 @@ class RaptorAndroid(Raptor):
self._set_value_and_check_exitcode(key, value, root=True)
def set_gpu_performance_parameters(self, device_name):
self.log.info('setting gpu performance parameters')
LOG.info('setting gpu performance parameters')
commands = {
'/sys/class/kgsl/kgsl-3d0/bus_split': '0',
'/sys/class/kgsl/kgsl-3d0/force_bus_on': '1',
@ -853,7 +856,7 @@ class RaptorAndroid(Raptor):
self._set_value_and_check_exitcode(key, value, root=True)
def set_kernel_performance_parameters(self):
self.log.info('setting kernel performance parameters')
LOG.info('setting kernel performance parameters')
commands = {
'/sys/kernel/debug/msm-bus-dbg/shell-client/update_request': '1',
'/sys/kernel/debug/msm-bus-dbg/shell-client/mas': '1',
@ -868,11 +871,11 @@ class RaptorAndroid(Raptor):
# Merge in the android profile
path = os.path.join(self.profile_data_dir, 'raptor-android')
self.log.info("Merging profile: {}".format(path))
LOG.info("Merging profile: {}".format(path))
self.profile.merge(path)
def clear_app_data(self):
self.log.info("clearing %s app data" % self.config['binary'])
LOG.info("clearing %s app data" % self.config['binary'])
self.device.shell("pm clear %s" % self.config['binary'])
def copy_profile_to_device(self):
@ -881,21 +884,21 @@ class RaptorAndroid(Raptor):
raise Exception('%s is not installed' % self.config['binary'])
try:
self.log.info("copying profile to device: %s" % self.remote_profile)
LOG.info("copying profile to device: %s" % self.remote_profile)
self.device.rm(self.remote_profile, force=True, recursive=True)
# self.device.mkdir(self.remote_profile)
self.device.push(self.profile.profile, self.remote_profile)
self.device.chmod(self.remote_profile, recursive=True, root=True)
except Exception:
self.log.error("Unable to copy profile to device.")
LOG.error("Unable to copy profile to device.")
raise
def turn_on_android_app_proxy(self):
# for geckoview/android pageload playback we can't use a policy to turn on the
# proxy; we need to set prefs instead; note that the 'host' may be different
# than '127.0.0.1' so we must set the prefs accordingly
self.log.info("setting profile prefs to turn on the android app proxy")
LOG.info("setting profile prefs to turn on the android app proxy")
proxy_prefs = {}
proxy_prefs["network.proxy.type"] = 1
proxy_prefs["network.proxy.http"] = self.config['host']
@ -906,7 +909,7 @@ class RaptorAndroid(Raptor):
self.profile.set_preferences(proxy_prefs)
def launch_firefox_android_app(self, test_name):
self.log.info("starting %s" % self.config['app'])
LOG.info("starting %s" % self.config['app'])
extra_args = ["-profile", self.remote_profile,
"--es", "env0", "LOG_VERBOSE=1",
@ -944,8 +947,8 @@ class RaptorAndroid(Raptor):
raise Exception("Error launching %s. App did not start properly!" %
self.config['binary'])
except Exception as e:
self.log.error("Exception launching %s" % self.config['binary'])
self.log.error("Exception: %s %s" % (type(e).__name__, str(e)))
LOG.error("Exception launching %s" % self.config['binary'])
LOG.error("Exception: %s %s" % (type(e).__name__, str(e)))
if self.config['power_test']:
finish_android_power_test(self, test_name)
raise
@ -961,10 +964,10 @@ class RaptorAndroid(Raptor):
_source = os.path.join(source_dir, next_file)
_dest = os.path.join(target_dir, next_file)
if os.path.exists(_source):
self.log.info("copying %s to %s" % (_source, _dest))
LOG.info("copying %s to %s" % (_source, _dest))
shutil.copyfile(_source, _dest)
else:
self.log.critical("unable to find ssl cert db file: %s" % _source)
LOG.critical("unable to find ssl cert db file: %s" % _source)
def run_tests(self, tests, test_names):
self.setup_adb_device()
@ -978,7 +981,7 @@ class RaptorAndroid(Raptor):
self.set_reverse_ports(is_benchmark=is_benchmark)
def run_test_teardown(self):
self.log.info('removing reverse socket connections')
LOG.info('removing reverse socket connections')
self.device.remove_socket_connections('reverse')
super(RaptorAndroid, self).run_test_teardown()
@ -1025,16 +1028,16 @@ class RaptorAndroid(Raptor):
The default will be to run in warm mode; unless 'cold = true' is set in the test INI.
'''
self.log.info("test %s is running in cold mode; browser WILL be restarted between "
"page cycles" % test['name'])
LOG.info("test %s is running in cold mode; browser WILL be restarted between "
"page cycles" % test['name'])
if self.config['power_test']:
init_android_power_test(self)
for test['browser_cycle'] in range(1, test['expected_browser_cycles'] + 1):
self.log.info("begin browser cycle %d of %d for test %s"
% (test['browser_cycle'], test['expected_browser_cycles'], test['name']))
LOG.info("begin browser cycle %d of %d for test %s"
% (test['browser_cycle'], test['expected_browser_cycles'], test['name']))
self.run_test_setup(test)
@ -1048,7 +1051,7 @@ class RaptorAndroid(Raptor):
# an ssl cert db has now been created in the profile; copy it out so we
# can use the same cert db in future test cycles / browser restarts
local_cert_db_dir = tempfile.mkdtemp()
self.log.info("backing up browser ssl cert db that was created via certutil")
LOG.info("backing up browser ssl cert db that was created via certutil")
self.copy_cert_db(self.config['local_profile_dir'], local_cert_db_dir)
if self.config['host'] not in ('localhost', '127.0.0.1'):
@ -1065,7 +1068,7 @@ class RaptorAndroid(Raptor):
if test.get('playback') is not None:
# get cert db from previous cycle profile and copy into new clean profile
# this saves us from having to start playback again / recreate cert db etc.
self.log.info("copying existing ssl cert db into new browser profile")
LOG.info("copying existing ssl cert db into new browser profile")
self.copy_cert_db(local_cert_db_dir, self.config['local_profile_dir'])
self.run_test_setup(test)
@ -1085,7 +1088,7 @@ class RaptorAndroid(Raptor):
# in debug mode, and running locally, leave the browser running
if self.debug_mode and self.config['run_local']:
self.log.info("* debug-mode enabled - please shutdown the browser manually...")
LOG.info("* debug-mode enabled - please shutdown the browser manually...")
self.runner.wait(timeout=None)
# break test execution if a exception is present
@ -1093,8 +1096,8 @@ class RaptorAndroid(Raptor):
break
def run_test_warm(self, test, timeout=None):
self.log.info("test %s is running in warm mode; browser will NOT be restarted between "
"page cycles" % test['name'])
LOG.info("test %s is running in warm mode; browser will NOT be restarted between "
"page cycles" % test['name'])
if self.config['power_test']:
init_android_power_test(self)
@ -1122,7 +1125,7 @@ class RaptorAndroid(Raptor):
# in debug mode, and running locally, leave the browser running
if self.debug_mode and self.config['run_local']:
self.log.info("* debug-mode enabled - please shutdown the browser manually...")
LOG.info("* debug-mode enabled - please shutdown the browser manually...")
self.runner.wait(timeout=None)
def check_for_crashes(self):
@ -1138,18 +1141,18 @@ class RaptorAndroid(Raptor):
dump_dir = tempfile.mkdtemp()
remote_dir = posixpath.join(self.remote_profile, 'minidumps')
if not self.device.is_dir(remote_dir):
self.log.error("No crash directory (%s) found on remote device" % remote_dir)
LOG.error("No crash directory (%s) found on remote device" % remote_dir)
return
self.device.pull(remote_dir, dump_dir)
mozcrash.log_crashes(self.log, dump_dir, self.config['symbols_path'])
mozcrash.log_crashes(LOG, dump_dir, self.config['symbols_path'])
finally:
try:
shutil.rmtree(dump_dir)
except Exception:
self.log.warning("unable to remove directory: %s" % dump_dir)
LOG.warning("unable to remove directory: %s" % dump_dir)
def clean_up(self):
self.log.info("removing test folder for raptor: %s" % self.remote_test_root)
LOG.info("removing test folder for raptor: %s" % self.remote_test_root)
self.device.rm(self.remote_test_root, force=True, recursive=True)
super(RaptorAndroid, self).clean_up()
@ -1158,7 +1161,6 @@ class RaptorAndroid(Raptor):
def main(args=sys.argv[1:]):
args = parse_args()
commandline.setup_logging('raptor', args, {'tbpl': sys.stdout})
LOG = get_default_logger(component='raptor-main')
LOG.info("raptor-start")

View File

@ -6,10 +6,10 @@
# received from the raptor control server
from __future__ import absolute_import
from mozlog import get_proxy_logger
from logger.logger import RaptorLogger
from output import Output
LOG = get_proxy_logger(component='results-handler')
LOG = RaptorLogger(component='raptor-results-handler')
class RaptorResultsHandler():

View File

@ -10,9 +10,9 @@ import subprocess
import sys
import time
from mozlog import get_proxy_logger, get_default_logger
from logger.logger import RaptorLogger
LOG = get_proxy_logger(component="raptor-utils")
LOG = RaptorLogger(component='raptor-utils')
here = os.path.dirname(os.path.realpath(__file__))
external_tools_path = os.environ.get('EXTERNALTOOLSPATH', None)
@ -50,30 +50,31 @@ def transform_platform(str_to_transform, config_platform, config_processor=None)
def view_gecko_profile(ffox_bin):
# automatically load the latest talos gecko-profile archive in profiler.firefox.com
LOG = get_default_logger(component='raptor-view-gecko-profile')
LOG_GECKO = RaptorLogger(component='raptor-view-gecko-profile')
if sys.platform.startswith('win') and not ffox_bin.endswith(".exe"):
ffox_bin = ffox_bin + ".exe"
if not os.path.exists(ffox_bin):
LOG.info("unable to find Firefox bin, cannot launch view-gecko-profile")
LOG_GECKO.info("unable to find Firefox bin, cannot launch view-gecko-profile")
return
profile_zip = os.environ.get('RAPTOR_LATEST_GECKO_PROFILE_ARCHIVE', None)
if profile_zip is None or not os.path.exists(profile_zip):
LOG.info("No local talos gecko profiles were found so not launching profiler.firefox.com")
LOG_GECKO.info("No local talos gecko profiles were found so not "
"launching profiler.firefox.com")
return
# need the view-gecko-profile tool, it's in repo/testing/tools
repo_dir = os.environ.get('MOZ_DEVELOPER_REPO_DIR', None)
if repo_dir is None:
LOG.info("unable to find MOZ_DEVELOPER_REPO_DIR, can't launch view-gecko-profile")
LOG_GECKO.info("unable to find MOZ_DEVELOPER_REPO_DIR, can't launch view-gecko-profile")
return
view_gp = os.path.join(repo_dir, 'testing', 'tools',
'view_gecko_profile', 'view_gecko_profile.py')
if not os.path.exists(view_gp):
LOG.info("unable to find the view-gecko-profile tool, cannot launch it")
LOG_GECKO.info("unable to find the view-gecko-profile tool, cannot launch it")
return
command = ['python',
@ -81,8 +82,8 @@ def view_gecko_profile(ffox_bin):
'-b', ffox_bin,
'-p', profile_zip]
LOG.info('Auto-loading this profile in perfhtml.io: %s' % profile_zip)
LOG.info(command)
LOG_GECKO.info('Auto-loading this profile in perfhtml.io: %s' % profile_zip)
LOG_GECKO.info(command)
# if the view-gecko-profile tool fails to launch for some reason, we don't
# want to crash talos! just dump error and finsh up talos as usual
@ -92,12 +93,12 @@ def view_gecko_profile(ffox_bin):
stderr=subprocess.PIPE)
# that will leave it running in own instance and let talos finish up
except Exception as e:
LOG.info("failed to launch view-gecko-profile tool, exeption: %s" % e)
LOG_GECKO.info("failed to launch view-gecko-profile tool, exeption: %s" % e)
return
time.sleep(5)
ret = view_profile.poll()
if ret is None:
LOG.info("view-gecko-profile successfully started as pid %d" % view_profile.pid)
LOG_GECKO.info("view-gecko-profile successfully started as pid %d" % view_profile.pid)
else:
LOG.error('view-gecko-profile process failed to start, poll returned: %s' % ret)
LOG_GECKO.error('view-gecko-profile process failed to start, poll returned: %s' % ret)