| # Copyright 2023 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """cros telemetry: Manage telemetry options.""" | |
| import logging | |
| from chromite.cli import command | |
| from chromite.lib import chromite_config | |
| from chromite.utils import telemetry | |
| @command.command_decorator("telemetry") | |
| class TelemetryCommand(command.CliCommand): | |
| """Manage telemetry related options.""" | |
| @classmethod | |
| def AddParser(cls, parser): | |
| super(cls, TelemetryCommand).AddParser(parser) | |
| opts = parser.add_mutually_exclusive_group(required=True) | |
| opts.add_argument( | |
| "--enable", | |
| help="Enable telemetry collection.", | |
| action="store_true", | |
| ) | |
| opts.add_argument( | |
| "--disable", | |
| help="Disable telemetry collection.", | |
| action="store_true", | |
| ) | |
| opts.add_argument( | |
| "--show", | |
| help="Show telemetry related information.", | |
| action="store_true", | |
| ) | |
| def _UpdateTelemetry(self, enable: bool): | |
| chromite_config.initialize() | |
| cfg = telemetry.config.Config(chromite_config.TELEMETRY_CONFIG) | |
| cfg.trace_config.update(enabled=enable, reason="USER") | |
| cfg.flush() | |
| def _ShowTelemetry(self): | |
| chromite_config.initialize() | |
| cfg = telemetry.config.Config(chromite_config.TELEMETRY_CONFIG) | |
| if cfg.trace_config.has_enabled(): | |
| print(f"enabled = {cfg.trace_config.enabled}") | |
| print(f"enabled_reason = {cfg.trace_config.enabled_reason}") | |
| else: | |
| print(f"notice_countdown = {cfg.root_config.notice_countdown}") | |
| def Run(self): | |
| """Run cros telemetry.""" | |
| if self.options.enable: | |
| self._UpdateTelemetry(enable=True) | |
| logging.notice("Telemetry enabled successfully.") | |
| if self.options.disable: | |
| self._UpdateTelemetry(enable=False) | |
| logging.notice("Telemetry disabled successfully.") | |
| if self.options.show: | |
| self._ShowTelemetry() |