| # 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() |