普通文本  |  108行  |  3.94 KB

# 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