def test_shortcuts(): assert Align.left("foo").align == "left" assert Align.left("foo").renderable == "foo" assert Align.right("foo").align == "right" assert Align.right("foo").renderable == "foo" assert Align.center("foo").align == "center" assert Align.center("foo").renderable == "foo"
def render(self) -> RenderableType: """Build a Rich renderable to render the calculator display.""" return Padding( Align.right(FigletText(self.value), vertical="middle"), (0, 1), style="white on rgb(51,51,51)", )
def live(self, callback): try: with Live( self.layout, refresh_per_second=2, screen=False, redirect_stderr=False, redirect_stdout=False, ) as live: while True: if self.stop_flag: break if callback: callback(self) if not self.resources_by_endpoint: self.layout["endpoints"].update( Panel( Align.center( Text( "Waiting for endpoints to come alive"), vertical="middle", ))) else: self.endpoints_layout["data"].update( EndpointMonitor(self.resources_by_endpoint)) self.endpoints_values = [] updated_keys = set() max_value = 0 for ( endpoint_name, endpoint_data, ) in self.resources_by_endpoint.items(): updated_keys.add(endpoint_name) # todo: finish total_used = 0 total_max = 0 for entry in endpoint_data.values(): total_used += entry.used total_max += entry.available max_value = max(max_value, total_max) # self.endpoints_values.append(data) past_entries = self.endpoints_past_values.setdefault( endpoint_name, []) past_entries.append(total_used) self.endpoints_values.append(past_entries) self.endpoints_graph = AsciiGraph( self.endpoints_values, max_value, BACKEND_COLORS) self.endpoints_layout["graph"].update( self.endpoints_graph) self.layout["endpoints"].update( Panel(self.endpoints_layout, title="Endpoints")) uptime = datetime.datetime.now() - self.start_time self.layout["header"]["info"].update( Align.right( Text(f"""Node ID: {self.node_id} Uptime: {humanize.naturaldelta(uptime)} https://discord.gg/94KqBcE"""), vertical="middle", )) titles = [] table = Table.grid() table.add_column(style="green") table.add_column(no_wrap=True) self.cpu_usage[0].append(psutil.cpu_percent(interval=None)) self.ram_usage[0].append( int(round(psutil.virtual_memory().used / 1024**2))) total_gpus_actual = py3nvml.nvmlDeviceGetCount() for i in range(total_gpus_actual): handle = py3nvml.nvmlDeviceGetHandleByIndex(i) meminfo = py3nvml.nvmlDeviceGetMemoryInfo(handle) utilization_info = py3nvml.nvmlDeviceGetUtilizationRates( handle) table.add_row( py3nvml.nvmlDeviceGetName(handle), str(round(meminfo.used / 1024**2)), ) self.gpu_mem_usage[i].append( round(meminfo.used / 1024**2)) self.gpu_usage[i].append(utilization_info.gpu) color = RICH_COLORS[i] titles.append( f"[{color}]" + py3nvml.nvmlDeviceGetName(handle) + f" {utilization_info.gpu}%, {humanize.naturalsize(meminfo.used)}/{humanize.naturalsize(meminfo.total)}" + "[/]") self.gpu_layout["utilization"].update( self.gpu_usage_graph, ) self.gpu_layout["memory"].update(self.gpu_mem_usage_graph) self.layout["gpu"].update( Panel(self.gpu_layout, title=" ".join(titles))) self.cpu_layout["utilization"].update( Panel(self.cpu_usage_graph)) self.cpu_layout["memory"].update( Panel(self.ram_usage_graph)) self.cpu_layout["utilization"].update( self.cpu_usage_graph, ) self.cpu_layout["memory"].update(self.ram_usage_graph) self.layout["cpu"].update( Panel(self.cpu_layout, title=CPU_NAME)) self.layout["console"].update(self.tail) sleep(1.0) except KeyboardInterrupt as e: py3nvml.nvmlShutdown() raise e
def render(self): style = None if self.mouse_over: style = 'bold' return Align.right(self.icon, height=2, style=style)