# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: LicenseRef-NvidiaProprietary # # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual # property and proprietary rights in and to this material, related # documentation and any modifications thereto. Any use, reproduction, # disclosure or distribution of this material and related documentation # without an express license agreement from NVIDIA CORPORATION or # its affiliates is strictly prohibited. from tkinter import StringVar from tkinter.ttk import Button, Label, LabelFrame from ...utils.common import PAttrs, PNames from ...utils.datacenter import rail_reset_avg_power from ...utils.layoutmanager import fill_parent, grid_span, padding from ...utils.subjectobserver import Observer class PowerFrame(LabelFrame, Observer): def __init__(self, master=None, **kwargs): super().__init__(master, text="Power Monitor", **kwargs) self.create_widgets() self.manage_layout() fill_parent(self) def create_widgets(self): self.rail_names = PNames.RAIL_NAMES self.rail_nums = len(self.rail_names) self.rail_l = [None] * self.rail_nums self.inst_l = [None] * self.rail_nums self.avg_l = [None] * self.rail_nums self.inst_v = [None] * self.rail_nums self.avg_v = [None] * self.rail_nums self.name_hl = Label(self, text="Name") self.inst_hl = Label(self, text="Inst (mW)") self.avg_hl = Label(self, text="Avg (mW)") for i in range(self.rail_nums): self.inst_v[i] = StringVar() self.avg_v[i] = StringVar() self.rail_l[i] = Label(self, text=self.rail_names[i]) self.inst_l[i] = Label(self, textvariable=self.inst_v[i]) self.avg_l[i] = Label(self, textvariable=self.avg_v[i]) self.reset_b = Button(self, text="reset avg", command=self.reset_all_avg_power) def manage_layout(self): self.name_hl.grid(row=0, column=0, **grid_span, **padding) self.inst_hl.grid(row=0, column=1, **grid_span, **padding) self.avg_hl.grid(row=0, column=2, **grid_span, **padding) for i in range(self.rail_nums): self.rail_l[i].grid(row=1 + i, column=0, **grid_span, **padding) self.inst_l[i].grid(row=1 + i, column=1, **grid_span, **padding) self.avg_l[i].grid(row=1 + i, column=2, **grid_span, **padding) self.reset_b.grid(row=1 + self.rail_nums, column=2, rowspan=1, columnspan=1, **padding) def reset_all_avg_power(self): for i in range(self.rail_nums): rail_reset_avg_power(self.rail_names[i]) def update_data(self, data): for i in range(self.rail_nums): rail_name = self.rail_names[i] self.inst_v[i].set(f"{data[(rail_name, PAttrs.IN_POWER)]} mW") self.avg_v[i].set(f"{data[(rail_name, PAttrs.AVG_POWER)]} mW")