def register_sentry(argv, settings, topsrcdir): if not is_telemetry_enabled(settings): return NoopErrorReporter() sentry_sdk.init( _SENTRY_DSN, before_send=lambda event, _: _process_event(event, topsrcdir) ) sentry_sdk.add_breadcrumb(message="./mach {}".format(" ".join(argv))) return SentryErrorReporter()
def register_sentry(argv, settings, topsrcdir): if not is_telemetry_enabled(settings): return NoopErrorReporter() global _is_unmodified_mach_core_thread _is_unmodified_mach_core_thread = Thread(target=_is_unmodified_mach_core, args=[topsrcdir]) _is_unmodified_mach_core_thread.start() sentry_sdk.init( _SENTRY_DSN, before_send=lambda event, _: _process_event(event, topsrcdir)) sentry_sdk.add_breadcrumb(message="./mach {}".format(" ".join(argv))) return SentryErrorReporter()
def register_sentry(argv, settings, topsrcdir=None): if not is_telemetry_enabled(settings): return NoopErrorReporter() if topsrcdir: repo = _get_repository_object(topsrcdir) if repo is not None: email = repo.get_user_email() if email in _DEVELOPER_BLOCKLIST: return NoopErrorReporter() sentry_sdk.init( _SENTRY_DSN, before_send=lambda event, _: _process_event(event, topsrcdir)) sentry_sdk.add_breadcrumb(message="./mach {}".format(" ".join(argv))) return SentryErrorReporter()
def _finalize_telemetry_legacy(context, instance, handler, success, start_time, end_time, topsrcdir): """Record and submit legacy telemetry. Parameterized by the raw gathered telemetry, this function handles persisting and submission of the data. This has been designated as "legacy" telemetry because modern telemetry is being submitted with "Glean". """ from mozboot.util import get_state_dir from mozbuild.base import MozbuildObject from mozbuild.telemetry import gather_telemetry from mach.telemetry import (is_telemetry_enabled, is_applicable_telemetry_environment) if not (is_applicable_telemetry_environment() and is_telemetry_enabled(context.settings)): return if not isinstance(instance, MozbuildObject): instance = MozbuildObject.from_environment() command_attrs = getattr(context, 'command_attrs', {}) # We gather telemetry for every operation. data = gather_telemetry(command=handler.name, success=success, start_time=start_time, end_time=end_time, mach_context=context, instance=instance, command_attrs=command_attrs) if data: telemetry_dir = os.path.join(get_state_dir(), 'telemetry') try: os.mkdir(telemetry_dir) except OSError as e: if e.errno != errno.EEXIST: raise outgoing_dir = os.path.join(telemetry_dir, 'outgoing') try: os.mkdir(outgoing_dir) except OSError as e: if e.errno != errno.EEXIST: raise with open(os.path.join(outgoing_dir, str(uuid.uuid4()) + '.json'), 'w') as f: json.dump(data, f, sort_keys=True) # The user is performing a maintenance command, skip the upload if handler.name in ( 'bootstrap', 'doctor', 'mach-commands', 'vcs-setup', 'create-mach-environment', # We call mach environment in client.mk which would cause the # data submission to block the forward progress of make. 'environment'): return False if 'TEST_MACH_TELEMETRY_NO_SUBMIT' in os.environ: # In our telemetry tests, we want telemetry to be collected for analysis, but # we don't want it submitted. return False state_dir = get_state_dir() machpath = os.path.join(instance.topsrcdir, 'mach') with open(os.devnull, 'wb') as devnull: subprocess.Popen([ sys.executable, machpath, 'python', '--no-virtualenv', os.path.join(topsrcdir, 'build', 'submit_telemetry_data.py'), state_dir ], stdout=devnull, stderr=devnull)