1# Copyright (c) 2017 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from autotest_lib.client.cros.power import power_dashboard 6 7class ServerTestDashboard(power_dashboard.BaseDashboard): 8 """Dashboard class for autotests that run on server side. 9 """ 10 11 def __init__(self, logger, testname, host, start_ts=None, resultsdir=None, 12 uploadurl=None, note=''): 13 """Create ServerTestDashboard objects. 14 15 Args: 16 logger: object that store the log. This will get convert to 17 dictionary by self._convert() 18 testname: name of current test 19 resultsdir: directory to save the power json 20 uploadurl: url to upload power data 21 host: autotest_lib.server.hosts.cros_host.CrosHost object of DUT 22 note: note for current test run 23 """ 24 25 self._host = host 26 self._note = note 27 super(ServerTestDashboard, self).__init__(logger, testname, start_ts, 28 resultsdir, uploadurl) 29 30 def _create_dut_info_dict(self, power_rails): 31 """Create a dictionary that contain information of the DUT. 32 33 Args: 34 power_rails: list of measured power rails 35 36 Returns: 37 DUT info dictionary 38 """ 39 40 board = self._host.get_board().replace('board:', '') 41 platform = self._host.get_model_from_cros_config() 42 43 if platform and not platform.startswith(board): 44 board += '_' + platform 45 46 if self._host.has_hammer(): 47 board += '_hammer' 48 49 dut_info_dict = { 50 'board': board, 51 'version': { 52 'hw': self._host.get_hardware_revision(), 53 'milestone': 54 self._host.get_chromeos_release_milestone(), 55 'os': self._host.get_release_version(), 56 'channel': self._host.get_channel(), 57 'firmware': self._host.get_firmware_version(), 58 'ec': self._host.get_ec_version(), 59 'kernel': self._host.get_kernel_version(), 60 }, 61 'sku': { 62 'cpu': self._host.get_cpu_name(), 63 'memory_size': self._host.get_mem_total_gb(), 64 'storage_size': self._host.get_disk_size_gb(), 65 'display_resolution': 66 self._host.get_screen_resolution(), 67 'hwid': self._host.get_hardware_id(), 68 }, 69 'ina': { 70 'version': 0, 71 'ina': power_rails, 72 }, 73 'note': self._note, 74 } 75 76 if self._host.has_battery(): 77 # Round the battery size to nearest tenth because it is fluctuated 78 # for platform without battery nominal voltage data. 79 dut_info_dict['sku']['battery_size'] = round( 80 self._host.get_battery_size(), 1) 81 dut_info_dict['sku']['battery_shutdown_percent'] = \ 82 self._host.get_low_battery_shutdown_percent() 83 return dut_info_dict 84 85class PowerTelemetryLoggerDashboard(ServerTestDashboard): 86 """Dashboard class for power_telemetry_logger.PowerTelemetryLogger class. 87 """ 88 89 def __init__(self, logger, testname, host, start_ts, checkpoint_logger, 90 resultsdir=None, uploadurl=None, note=''): 91 if uploadurl is None: 92 uploadurl = 'http://chrome-power.appspot.com' 93 self._checkpoint_logger = checkpoint_logger 94 super(PowerTelemetryLoggerDashboard, self).__init__( 95 logger, testname, host, start_ts, resultsdir, uploadurl, note) 96 97 def _create_checkpoint_dict(self): 98 """Create dictionary for checkpoint. 99 """ 100 return self._checkpoint_logger.convert_relative(self._start_ts) 101 102 def _convert(self): 103 """ 104 self._logger is already in correct format, so just return it. 105 106 Returns: 107 raw measurement dictionary 108 """ 109 self._tag_with_checkpoint(self._logger) 110 return self._logger 111