| # Copyright (c) 2017 The Chromium OS Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| from autotest_lib.client.cros.power import power_dashboard | |
| class ServerTestDashboard(power_dashboard.BaseDashboard): | |
| """Dashboard class for autotests that run on server side. | |
| """ | |
| def __init__(self, logger, testname, host, start_ts=None, resultsdir=None, | |
| uploadurl=None, note=''): | |
| """Create ServerTestDashboard objects. | |
| Args: | |
| logger: object that store the log. This will get convert to | |
| dictionary by self._convert() | |
| testname: name of current test | |
| resultsdir: directory to save the power json | |
| uploadurl: url to upload power data | |
| host: autotest_lib.server.hosts.cros_host.CrosHost object of DUT | |
| note: note for current test run | |
| """ | |
| self._host = host | |
| self._note = note | |
| super(ServerTestDashboard, self).__init__(logger, testname, start_ts, | |
| resultsdir, uploadurl) | |
| def _create_dut_info_dict(self, power_rails): | |
| """Create a dictionary that contain information of the DUT. | |
| Args: | |
| power_rails: list of measured power rails | |
| Returns: | |
| DUT info dictionary | |
| """ | |
| board = self._host.get_board().replace('board:', '') | |
| platform = self._host.get_platform() | |
| if not platform.startswith(board): | |
| board += '_' + platform | |
| if self._host.has_hammer(): | |
| board += '_hammer' | |
| dut_info_dict = { | |
| 'board': board, | |
| 'version': { | |
| 'hw': self._host.get_hardware_revision(), | |
| 'milestone': self._host.get_chromeos_release_milestone(), | |
| 'os': self._host.get_release_version(), | |
| 'channel': self._host.get_channel(), | |
| 'firmware': self._host.get_firmware_version(), | |
| 'ec': self._host.get_ec_version(), | |
| 'kernel': self._host.get_kernel_version(), | |
| }, | |
| 'sku' : { | |
| 'cpu': self._host.get_cpu_name(), | |
| 'memory_size': self._host.get_mem_total_gb(), | |
| 'storage_size': self._host.get_disk_size_gb(), | |
| 'display_resolution': self._host.get_screen_resolution(), | |
| }, | |
| 'ina': { | |
| 'version': 0, | |
| 'ina': power_rails, | |
| }, | |
| 'note': self._note, | |
| } | |
| if self._host.has_battery(): | |
| # Round the battery size to nearest tenth because it is fluctuated | |
| # for platform without battery nominal voltage data. | |
| dut_info_dict['sku']['battery_size'] = round( | |
| self._host.get_battery_size(), 1) | |
| dut_info_dict['sku']['battery_shutdown_percent'] = \ | |
| self._host.get_low_battery_shutdown_percent() | |
| return dut_info_dict | |
| class PowerTelemetryLoggerDashboard(ServerTestDashboard): | |
| """Dashboard class for power_telemetry_logger.PowerTelemetryLogger class. | |
| """ | |
| def __init__(self, logger, testname, host, start_ts, checkpoint_logger, | |
| resultsdir=None, uploadurl=None, note=''): | |
| if uploadurl is None: | |
| uploadurl = 'http://chrome-power.appspot.com' | |
| self._checkpoint_logger = checkpoint_logger | |
| super(PowerTelemetryLoggerDashboard, self).__init__( | |
| logger, testname, host, start_ts, resultsdir, uploadurl, note) | |
| def _create_checkpoint_dict(self): | |
| """Create dictionary for checkpoint. | |
| """ | |
| return self._checkpoint_logger.convert_relative(self._start_ts) | |
| def _convert(self): | |
| """ | |
| self._logger is already in correct format, so just return it. | |
| Returns: | |
| raw measurement dictionary | |
| """ | |
| self._tag_with_checkpoint(self._logger) | |
| return self._logger |