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