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