xref: /aosp_15_r20/external/autotest/server/cros/power/power_dashboard.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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