From c20da0f4786991cbf346a0832043598da4ff6e24 Mon Sep 17 00:00:00 2001 From: Kumar Anirudha Date: Fri, 22 Nov 2024 04:57:18 +0530 Subject: [PATCH] initial commit --- .DS_Store | Bin 0 -> 6148 bytes .codecov.yml | 1 + .flake8 | 5 + .github/renovate.json | 3 + .gitignore | 13 ++ .pre-commit-config.yaml | 21 +++ CONTRIBUTING.md | 7 + LICENSE | 22 +++ README.md | 70 ++++++++ images/orb.png | Bin 0 -> 196229 bytes images/sot.png | Bin 0 -> 8294 bytes justfile | 23 +++ pyproject.toml | 45 +++++ setup.py | 6 + src/sot/__about__.py | 4 + src/sot/__init__.py | 6 + src/sot/_app.py | 107 +++++++++++ src/sot/_battery.py | 62 +++++++ src/sot/_cpu.py | 346 ++++++++++++++++++++++++++++++++++++ src/sot/_disk.py | 187 +++++++++++++++++++ src/sot/_helpers.py | 14 ++ src/sot/_info.py | 84 +++++++++ src/sot/_mem.py | 106 +++++++++++ src/sot/_net.py | 223 +++++++++++++++++++++++ src/sot/_procs_list.py | 139 +++++++++++++++ src/sot/_sot.py | 37 ++++ src/sot/blockchar_stream.py | 28 +++ src/sot/braille_stream.py | 149 ++++++++++++++++ tests/test_streams.py | 90 ++++++++++ tox.ini | 10 ++ 30 files changed, 1808 insertions(+) create mode 100644 .DS_Store create mode 100644 .codecov.yml create mode 100644 .flake8 create mode 100644 .github/renovate.json create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 images/orb.png create mode 100644 images/sot.png create mode 100644 justfile create mode 100644 pyproject.toml create mode 100644 setup.py create mode 100644 src/sot/__about__.py create mode 100644 src/sot/__init__.py create mode 100644 src/sot/_app.py create mode 100644 src/sot/_battery.py create mode 100644 src/sot/_cpu.py create mode 100644 src/sot/_disk.py create mode 100644 src/sot/_helpers.py create mode 100644 src/sot/_info.py create mode 100644 src/sot/_mem.py create mode 100644 src/sot/_net.py create mode 100644 src/sot/_procs_list.py create mode 100644 src/sot/_sot.py create mode 100644 src/sot/blockchar_stream.py create mode 100644 src/sot/braille_stream.py create mode 100644 tests/test_streams.py create mode 100644 tox.ini diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cd3a2cf86a516c8064df523e3cb54a7528c4c45a GIT binary patch literal 6148 zcmeHKOKQU~5S>X)F?8c)mbyZ2AcAuOU!aACP{;>bnzdIsSC7^=pN;Ew=WfCq7(Hn; zPeO0u@ra0SKVLT@ortt>L%G>7H`_O#*(xIngyW38d|Ze3^YL;%%(8zE823@$ + tiptop +

Command-line system oberving tool.

+

+ +`sot` is a Command-line System Obervation Tool in the spirit of [top](). It displays various interesting system stats and graphs them. Works on all operating systems. + +Install and run with + + + +```sh +pip install sot +sot +``` + +For all options, see + + + +```sh +sot -H +``` + + + +``` +usage: sot [--help] [--version] [--log LOG] [--net NET] + +Command-line System Obervation Tool ≈ + +options: + --help, -H Show this help message and exit. + --version, -V Display version information + --log, -L LOG Debug log file + --net, -N NET Network interface to display (default: auto) +``` + +Main Theme: + +| Color | Hex | RGB | +| --- | --- | --- | +| sky_blue3 | `#5fafd7` | `rgb(95,175,215)` | +| aquamarine3 | `#5fd7af` | `rgb(95,215,175)` | +| yellow | `#808000` | `rgb(128,128,0)` | +| bright_black | `#808080` | `rgb(128,128,128)` | +| slate_blue1 | `#875fff` | `rgb(135,95,255)` | +| red3 | `#d70000` | `rgb(215,0,0)` | +| dark_orange | `#d75f00` | `rgb(215,95,0)` | + +All supported [colors](https://rich.readthedocs.io/en/latest/appendix/colors.html). + +--- + +

+

🏴 ≈ 🏴

+

+ +--- + +`sot` uses [Textual](https://github.com/willmcgugan/textual/) for layouting, [rich](https://rich.readthedocs.io/en/latest/index.html) for rich text and [psutil](https://github.com/giampaolo/psutil) for fetching system data. + +Other top alternatives in alphabetical order: + +- [tiptop](https://github.com/nschloe/tiptop) ✨ This project was created on top of `tiptop`, when it became unmaintained. +- [bashtop](https://github.com/aristocratos/bashtop), [bpytop](https://github.com/aristocratos/bpytop), [btop](https://github.com/aristocratos/btop) +- [bottom](https://github.com/ClementTsang/bottom) (one of my fav) +- [Glances](https://github.com/nicolargo/glances) +- [gtop](https://github.com/aksakalli/gtop) +- [htop](https://github.com/htop-dev/htop) diff --git a/images/orb.png b/images/orb.png new file mode 100644 index 0000000000000000000000000000000000000000..9a99a8fb6dba688ca0b78cb7723badf74257a609 GIT binary patch literal 196229 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�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 bEu~_J1k>YQ!!>TJlOA(+`?2D1$mRb6T>Eta literal 0 HcmV?d00001 diff --git a/justfile b/justfile new file mode 100644 index 0000000..5fbc5d6 --- /dev/null +++ b/justfile @@ -0,0 +1,23 @@ +version := `python3 -c "from src.sot.__about__ import __version__; print(__version__)"` + +default: + @echo "\"just publish\"?" + +publish: clean + @if [ "$(git rev-parse --abbrev-ref HEAD)" != "main" ]; then exit 1; fi + gh release create "v{{version}}" + python3 -m build --sdist --wheel . + twine upload dist/* + +clean: + @find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf + @rm -rf src/*.egg-info/ build/ dist/ .tox/ + +format: + isort . + black . + blacken-docs README.md + +lint: + black --check . + flake8 . diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..d1b0770 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[build-system] +requires = ["setuptools>=61"] +build-backend = "setuptools.build_meta" + +[tool.isort] +profile = "black" + +[project] +name = "sot" +authors = [{name = "Kumar Anirudha", email = "dev@anirudha.dev"}] +description = "System Oberving Tool" +readme = "README.md" +license = {file = "LICENSE"} +classifiers = [ + "Development Status :: 4 - Beta", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Topic :: Utilities", +] +dynamic = ["version"] +requires-python = ">=3.7" +dependencies = [ + "py-cpuinfo", + "distro", + "psutil", + "rich >= 11.0.0", + "textual >=0.1.15, <0.2", +] + +[tool.setuptools.dynamic] +version = {attr = "sot.__about__.__version__"} + +[project.urls] +Code = "https://github.com/anistark/sot" +Issues = "https://github.com/anistark/sot/issues" + +[project.scripts] +sot = "sot._app:run" diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..bac24a4 --- /dev/null +++ b/setup.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +import setuptools + +if __name__ == "__main__": + setuptools.setup() diff --git a/src/sot/__about__.py b/src/sot/__about__.py new file mode 100644 index 0000000..ea29809 --- /dev/null +++ b/src/sot/__about__.py @@ -0,0 +1,4 @@ +from datetime import datetime + +__version__ = "1.0.0" +__current_year__ = datetime.now().year diff --git a/src/sot/__init__.py b/src/sot/__init__.py new file mode 100644 index 0000000..eea3d6c --- /dev/null +++ b/src/sot/__init__.py @@ -0,0 +1,6 @@ +from .__about__ import __version__, __current_year__ +from ._app import run +from .blockchar_stream import BlockCharStream +from .braille_stream import BrailleStream + +__all__ = ["BrailleStream", "BlockCharStream", "run", "__version__", "__current_year__"] diff --git a/src/sot/_app.py b/src/sot/_app.py new file mode 100644 index 0000000..e5a5a21 --- /dev/null +++ b/src/sot/_app.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +import argparse +from sys import version_info + +from textual.app import App + +from .__about__ import __version__, __current_year__ +from ._cpu import CPU +from ._disk import Disk +from ._info import InfoLine +from ._mem import Mem +from ._net import Net +from ._procs_list import ProcsList +# from ._sot import Sot + +def run(argv=None): + parser = argparse.ArgumentParser( + description="Command-line System Obervation Tool ≈", + formatter_class=argparse.RawTextHelpFormatter, + add_help=False + ) + + parser.add_argument( + "--help", + "-H", + action="help", + default=argparse.SUPPRESS, + help="Show this help message and exit." + ) + + parser.add_argument( + "--version", + "-V", + action="version", + version=_get_version_text(), + help="Display version information", + ) + + parser.add_argument( + "--log", + "-L", + type=str, + default=None, + help="Debug log file", + ) + + parser.add_argument( + "--net", + "-N", + type=str, + default=None, + help="Network interface to display (default: auto)", + ) + + args = parser.parse_args(argv) + + # with a grid + class sotApp(App): + async def on_mount(self) -> None: + grid = await self.view.dock_grid(edge="left") + + grid.add_column(fraction=36, name="left") + # grid.add_column(fraction=15, name="middle") + # grid.add_column(fraction=36, name="right") + grid.add_column(fraction=45, name="right") + + grid.add_row(size=1, name="r0") + grid.add_row(fraction=1, name="r1") + grid.add_row(fraction=1, name="r2") + grid.add_row(fraction=1, name="r3") + grid.add_areas( + area0="left-start|right-end,r0", + area1="left,r1", + # area2a="middle,r1-start|r1-end", + # area2b="middle,r2-start|r2-end", + # area2c="middle,r3-start|r3-end", + area3a="right,r1", + area3b="right,r2", + area3c="right,r3", + area4="left,r2-start|r3-end", + ) + grid.place( + area0=InfoLine(), + area1=CPU(), + # area2b=Sot(), + area3a=Mem(), + area3b=Disk(), + area3c=Net(args.net), + area4=ProcsList(), + ) + + async def on_load(self, _): + await self.bind("q", "quit", "quit") + + sotApp.run(log=args.log) + + +def _get_version_text(): + python_version = f"{version_info.major}.{version_info.minor}.{version_info.micro}" + + return "\n".join( + [ + f"sot {__version__} [Python {python_version}]", + f"Copyright (c) 2024-{__current_year__} Kumar Anirudha", + ] + ) diff --git a/src/sot/_battery.py b/src/sot/_battery.py new file mode 100644 index 0000000..1a97705 --- /dev/null +++ b/src/sot/_battery.py @@ -0,0 +1,62 @@ +import psutil +from rich import box +from rich.panel import Panel +from rich.text import Text +from textual.widget import Widget + +from .braille_stream import BrailleStream + + +class Battery(Widget): + def on_mount(self): + self.bat_stream = BrailleStream(40, 3, 0.0, 100.0) + + self.panel = Panel( + "", + title="", + title_align="left", + # border_style="yellow", + border_style="bright_black", + box=box.SQUARE, + ) + self.collect_data() + # update frequency: 1 min + self.set_interval(60.0, self.collect_data) + + def collect_data(self): + bat = psutil.sensors_battery() + assert bat is not None + + self.bat_stream.add_value(bat.percent) + self.refresh_graph() + + if bat.power_plugged: + status = "charging" + else: + mm = bat.secsleft // 60 + hh, mm = divmod(mm, 60) + time_left_str = [] + if hh > 0: + time_left_str.append(f"{hh}h") + if mm > 0: + time_left_str.append(f"{mm}min") + status = " ".join(time_left_str) + " left" + + title = f"[b]battery[/] - {self.bat_stream.values[-1]:.1f}% - {status}" + if bat.percent < 15 and not bat.power_plugged: + title = "[red3 reverse bold]" + title + "[/]" + + self.panel.title = title + + self.refresh() + + def refresh_graph(self): + self.panel.renderable = Text("\n".join(self.bat_stream.graph), style="yellow") + + def render(self) -> Panel: + return self.panel + + async def on_resize(self, event): + self.bat_stream.reset_width(event.width - 4) + self.bat_stream.reset_height(event.height - 2) + self.refresh_graph() diff --git a/src/sot/_cpu.py b/src/sot/_cpu.py new file mode 100644 index 0000000..03950d3 --- /dev/null +++ b/src/sot/_cpu.py @@ -0,0 +1,346 @@ +import re +from pathlib import Path + +import psutil +from rich import box +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from textual.widget import Widget + +from .braille_stream import BrailleStream + + +def val_to_color(val: float, minval: float, maxval: float) -> str: + t = (val - minval) / (maxval - minval) + k = round(t * 3) + return {0: "yellow", 1: "dark_orange", 2: "sky_blue3", 3: "aquamarine3"}[k] + + +# https://stackoverflow.com/a/312464/353337 +def chunks(lst, n): + for i in range(0, len(lst), n): + yield lst[i : i + n] + + +# https://stackoverflow.com/a/6473724/353337 +def transpose(lst): + return list(map(list, zip(*lst))) + + +def flatten(lst): + return [item for sublist in lst for item in sublist] + + +def get_cpu_model(): + # cpuinfo does computation in addition to reading data, see + # . + # Try to work around this. + # TODO keep an eye on the above bug. + try: + # On Linux, the file contains lines like + # ``` + # model name : Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz + # ``` + with open("/proc/cpuinfo") as f: + content = f.read() + m = re.search(r"model name\t: (.*)", content) + model_name = m.group(1) + except Exception: + import cpuinfo + + model_name = cpuinfo.get_cpu_info()["brand_raw"] + return model_name + + +def get_current_temps(): + # First try manually reading the temperatures. (pyutil is slow.) + for key in ["coretemp", "k10temp"]: + path = Path(f"/sys/devices/platform/{key}.0/hwmon/hwmon6/") + if not path.is_dir(): + continue + + k = 1 + temps = [] + while True: + file = path / f"temp{k}_input" + if not file.exists(): + break + with open(file) as f: + content = f.read() + temps.append(int(content) / 1000) + k += 1 + + return temps + + # Not try psutil.sensors_temperatures(). + # Slow, see . + try: + temps = psutil.sensors_temperatures() + except AttributeError: + return None + else: + # coretemp: intel, k10temp: amd + # + for key in ["coretemp", "k10temp"]: + if key not in temps: + continue + return [t.current for t in temps[key]] + + return None + + +def get_current_freq(): + # psutil.cpu_freq() is slow, so first try something else: + # + candidates = [ + "/sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", + ] + for candidate in candidates: + if Path(candidate).exists(): + with open(candidate) as f: + content = f.read() + return int(content) / 1000 + + try: + cpu_freq = psutil.cpu_freq().current + except Exception: + # https://github.com/nschloe/tiptop/issues/25#issuecomment-1061390966 + return None + + if psutil.__version__ == "5.9.0" and cpu_freq < 10: + # Work around + cpu_freq *= 1000 + return cpu_freq + + +class CPU(Widget): + def on_mount(self): + self.width = 0 + self.height = 0 + + # self.max_graph_width = 200 + + self.num_cores = psutil.cpu_count(logical=False) + num_threads = psutil.cpu_count(logical=True) + + # 8 threads, 4 cores -> [[0, 4], [1, 5], [2, 6], [3, 7]] + assert num_threads % self.num_cores == 0 + self.core_threads = transpose(list(chunks(range(num_threads), self.num_cores))) + + self.cpu_total_stream = BrailleStream(50, 7, 0.0, 100.0) + + self.thread_load_streams = [ + BrailleStream(10, 1, 0.0, 100.0) + for _ in range(num_threads) + # BlockCharStream(10, 1, 0.0, 100.0) for _ in range(num_threads) + ] + + temps = get_current_temps() + + if temps is None: + self.has_cpu_temp = False + self.has_core_temps = False + else: + self.has_cpu_temp = len(temps) > 0 + self.has_core_temps = len(temps) == 1 + self.num_cores + + temp_low = 30.0 + # TODO read from file + temp_high = 100.0 + + if self.has_cpu_temp: + self.temp_total_stream = BrailleStream( + 50, 7, temp_low, temp_high, flipud=True + ) + + if self.has_core_temps: + self.core_temp_streams = [ + BrailleStream(5, 1, temp_low, temp_high) + for _ in range(self.num_cores) + ] + + self.has_fan_rpm = False + try: + fan_current = list(psutil.sensors_fans().values())[0][0].current + except (AttributeError, IndexError): + pass + else: + self.has_fan_rpm = True + fan_low = 0 + # Sometimes, psutil/computers will incorrectly report a fan + # speed of 2 ** 16 - 1; dismiss that. + if fan_current == 65535: + fan_current = 1 + fan_high = max(fan_current, 1) + self.fan_stream = BrailleStream(50, 1, fan_low, fan_high) + + box_title = ", ".join( + [ + f"{self.num_cores} core" + ("s" if self.num_cores > 1 else ""), + f"{num_threads} thread" + ("s" if num_threads > 1 else ""), + ] + ) + self.info_box = Panel( + "", + title=box_title, + title_align="left", + subtitle=None, + subtitle_align="left", + border_style="bright_black", + box=box.SQUARE, + expand=False, + ) + + self.panel = Panel( + "", + title=f"[b]CPU[/] - {get_cpu_model()}", + title_align="left", + border_style="bright_black", + box=box.SQUARE, + ) + + # immediately collect data to refresh info_box_width + self.collect_data() + self.set_interval(2.0, self.collect_data) + + def collect_data(self): + # CPU loads + self.cpu_total_stream.add_value(psutil.cpu_percent()) + # + load_per_thread = psutil.cpu_percent(percpu=True) + assert isinstance(load_per_thread, list) + for stream, load in zip(self.thread_load_streams, load_per_thread): + stream.add_value(load) + + # CPU temperatures + if self.has_cpu_temp or self.has_core_temps: + temps = get_current_temps() + assert temps is not None + + if self.has_cpu_temp: + self.temp_total_stream.add_value(temps[0]) + + if self.has_core_temps: + for stream, temp in zip(self.core_temp_streams, temps[1:]): + stream.add_value(temp) + + lines_cpu = self.cpu_total_stream.graph + current_val_string = f"{self.cpu_total_stream.values[-1]:5.1f}%" + lines0 = lines_cpu[0][: -len(current_val_string)] + current_val_string + lines_cpu = [lines0] + lines_cpu[1:] + # + cpu_total_graph = "[yellow]" + "\n".join(lines_cpu) + "[/]\n" + # + if self.has_cpu_temp: + lines_temp = self.temp_total_stream.graph + current_val_string = f"{round(self.temp_total_stream.values[-1]):3d}°C" + lines0 = lines_temp[-1][: -len(current_val_string)] + current_val_string + lines_temp = lines_temp[:-1] + [lines0] + cpu_total_graph += "[slate_blue1]" + "\n".join(lines_temp) + "[/]" + + # construct right info box + self._refresh_info_box(load_per_thread) + + t = Table(expand=True, show_header=False, padding=0, box=None) + # Add ratio 1 to expand that column as much as possible + t.add_column("graph", no_wrap=True, ratio=1) + t.add_column("box", no_wrap=True, justify="left", vertical="middle") + t.add_row(cpu_total_graph, self.info_box) + + if self.has_fan_rpm: + fan_current = list(psutil.sensors_fans().values())[0][0].current + + # See comment above + if fan_current == 65535: + fan_current = self.fan_stream.maxval + + if fan_current > self.fan_stream.maxval: + # TODO There should be a method that also rewrites all previous values + self.fan_stream.maxval = fan_current + + self.fan_stream.add_value(fan_current) + string = f" {fan_current}rpm" + graph = Text( + self.fan_stream.graph[-1][: -len(string)] + string, + style="dark_orange", + ) + t.add_row(graph, "") + + self.panel.renderable = t + + # textual method + self.refresh() + + def _refresh_info_box(self, load_per_thread): + lines = [] + for core_id, thread_ids in enumerate(self.core_threads): + line = [] + for i in thread_ids: + color = val_to_color(load_per_thread[i], 0.0, 100.0) + line.append( + f"[{color}]" + + f"{self.thread_load_streams[i].graph[0]}" + + f"{round(self.thread_load_streams[i].values[-1]):3d}%" + + "[/]" + ) + if self.has_core_temps: + stream = self.core_temp_streams[core_id] + val = stream.values[-1] + color = "slate_blue1" if val < 70.0 else "red3" + line.append( + f"[{color}]{stream.graph[0]} {round(stream.values[-1])}°C[/]" + ) + + lines.append(" ".join(line)) + + self.info_box.renderable = "\n".join(lines) + + cpu_freq = get_current_freq() + + if cpu_freq is None: + # https://github.com/nschloe/tiptop/issues/25 + self.info_box.subtitle = None + else: + self.info_box.subtitle = f"{round(cpu_freq):4d} MHz" + + # https://github.com/willmcgugan/rich/discussions/1559#discussioncomment-1459008 + self.info_box_width = 4 + len(Text.from_markup(lines[0])) + + def render(self): + return self.panel + + async def on_resize(self, event): + self.width = event.width + self.height = event.height + + # reset graph widths + graph_width = self.width - self.info_box_width - 5 + self.cpu_total_stream.reset_width(graph_width) + if self.has_cpu_temp: + self.temp_total_stream.reset_width(graph_width) + if self.has_fan_rpm: + self.fan_stream.reset_width(graph_width) + + # reset graph heights + # subtract border + total_height = self.height - 2 + if self.has_cpu_temp: + # cpu total stream height: divide by two and round _down_ + self.cpu_total_stream.reset_height(total_height // 2) + # + # temp total stream height: divide by two and round _up_. Subtract + # one if a fan stream is present. + temp_stream_height = -((-total_height) // 2) + if self.has_fan_rpm: + temp_stream_height -= 1 + + self.temp_total_stream.reset_height(temp_stream_height) + else: + # full size cpu stream + cpu_stream_height = total_height + if self.has_fan_rpm: + cpu_stream_height -= 1 + + self.cpu_total_stream.reset_height(cpu_stream_height) diff --git a/src/sot/_disk.py b/src/sot/_disk.py new file mode 100644 index 0000000..a2abc52 --- /dev/null +++ b/src/sot/_disk.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +import psutil +from rich import box +from rich.console import Group +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from textual.widget import Widget + +from ._helpers import sizeof_fmt +from .braille_stream import BrailleStream + + +class Disk(Widget): + def __init__(self): + super().__init__() + + def on_mount(self): + # kick out /dev/loop* devices + self.mountpoints = [ + item.mountpoint + for item in psutil.disk_partitions() + if not item.device.startswith("/dev/loop") + ] + + # io counters aren't always available, see + # + self.has_io_counters = False + try: + psutil.disk_io_counters() + except Exception: + pass + else: + self.has_io_counters = True + + if self.has_io_counters: + self.down_box = Panel( + "", + title="read", + title_align="left", + style="aquamarine3", + width=20, + box=box.SQUARE, + ) + self.up_box = Panel( + "", + title="write", + title_align="left", + style="yellow", + width=20, + box=box.SQUARE, + ) + self.table = Table(expand=True, show_header=False, padding=0, box=None) + # Add ratio 1 to expand that column as much as possible + self.table.add_column("graph", no_wrap=True, ratio=1) + self.table.add_column("box", no_wrap=True, width=20) + self.table.add_row("", self.down_box) + self.table.add_row("", self.up_box) + + self.group = Group(self.table, "") + + self.last_io = None + self.max_read_bytes_s = 0 + self.max_read_bytes_s_str = "" + self.max_write_bytes_s = 0 + self.max_write_bytes_s_str = "" + + self.read_stream = BrailleStream(20, 5, 0.0, 1.0e6) + self.write_stream = BrailleStream(20, 5, 0.0, 1.0e6, flipud=True) + else: + self.group = Group("") + + self.panel = Panel( + self.group, + title="[b]Disk[/]", + # border_style="slate_blue1", + border_style="bright_black", + title_align="left", + box=box.SQUARE, + ) + + self.refresh_panel() + + self.interval_s = 2.0 + self.set_interval(self.interval_s, self.refresh_panel) + + def refresh_panel(self): + if self.has_io_counters: + self.refresh_io_counters() + + self.refresh_disk_usage() + self.refresh() + + def refresh_io_counters(self): + io = psutil.disk_io_counters() + + if self.last_io is None: + read_bytes_s_string = "" + write_bytes_s_string = "" + else: + read_bytes_s = (io.read_bytes - self.last_io.read_bytes) / self.interval_s + read_bytes_s_string = sizeof_fmt(read_bytes_s, fmt=".1f") + "/s" + write_bytes_s = ( + io.write_bytes - self.last_io.write_bytes + ) / self.interval_s + write_bytes_s_string = sizeof_fmt(write_bytes_s, fmt=".1f") + "/s" + + if read_bytes_s > self.max_read_bytes_s: + self.max_read_bytes_s = read_bytes_s + self.max_read_bytes_s_str = sizeof_fmt(read_bytes_s, fmt=".1f") + "/s" + + if write_bytes_s > self.max_write_bytes_s: + self.max_write_bytes_s = write_bytes_s + self.max_write_bytes_s_str = sizeof_fmt(write_bytes_s, fmt=".1f") + "/s" + + self.read_stream.add_value(read_bytes_s) + self.write_stream.add_value(write_bytes_s) + + self.last_io = io + + total_read_string = sizeof_fmt(io.read_bytes, sep=" ", fmt=".1f") + total_write_string = sizeof_fmt(io.write_bytes, sep=" ", fmt=".1f") + + self.down_box.renderable = "\n".join( + [ + f"{read_bytes_s_string}", + f"max {self.max_read_bytes_s_str}", + f"total {total_read_string}", + ] + ) + self.up_box.renderable = "\n".join( + [ + f"{write_bytes_s_string}", + f"max {self.max_write_bytes_s_str}", + f"total {total_write_string}", + ] + ) + self.refresh_graphs() + + def refresh_graphs(self): + self.table.columns[0]._cells[0] = Text( + "\n".join(self.read_stream.graph), style="aquamarine3" + ) + self.table.columns[0]._cells[1] = Text( + "\n".join(self.write_stream.graph), style="yellow" + ) + + def refresh_disk_usage(self): + table = Table(box=None, expand=False, padding=(0, 1), show_header=True) + table.add_column("", justify="left", no_wrap=True, style="bold") + table.add_column(Text("Free", justify="right"), justify="right", no_wrap=True) + table.add_column(Text("Used", justify="right"), justify="right", no_wrap=True) + table.add_column(Text("Total", justify="right"), justify="right", no_wrap=True) + table.add_column(Text("🍕", justify="right"), justify="right", no_wrap=True) + + for mp in self.mountpoints: + try: + du = psutil.disk_usage(mp) + except PermissionError: + # https://github.com/nschloe/tiptop/issues/71 + continue + + style = None + if du.percent > 99: + style = "red3 reverse bold" + elif du.percent > 95: + style = "dark_orange" + + table.add_row( + mp, + sizeof_fmt(du.free, fmt=".1f"), + sizeof_fmt(du.used, fmt=".1f"), + sizeof_fmt(du.total, fmt=".1f"), + f"{du.percent:.1f}%", + style=style, + ) + self.group.renderables[-1] = table + + def render(self): + return self.panel + + async def on_resize(self, event): + if self.has_io_counters: + self.read_stream.reset_width(event.width - 25) + self.write_stream.reset_width(event.width - 25) + self.refresh_graphs() diff --git a/src/sot/_helpers.py b/src/sot/_helpers.py new file mode 100644 index 0000000..5a58475 --- /dev/null +++ b/src/sot/_helpers.py @@ -0,0 +1,14 @@ +# https://stackoverflow.com/a/1094933/353337 +def sizeof_fmt(num, fmt=".0f", suffix: str = "iB", sep=" "): + assert num >= 0 + for unit in ["B", "K", "M", "G", "T", "P", "E", "Z"]: + # actually 1024, but be economical with the return string size: + if unit != "B": + unit += suffix + + if num < 1000: + string = f"{{:{fmt}}}".format(num) + return f"{string}{sep}{unit}" + num /= 1024 + string = f"{{:{fmt}}}".format(num) + return f"{string}{sep}Y{suffix}" diff --git a/src/sot/_info.py b/src/sot/_info.py new file mode 100644 index 0000000..0d6906f --- /dev/null +++ b/src/sot/_info.py @@ -0,0 +1,84 @@ +import getpass +import platform +import time +from datetime import datetime, timedelta + +import distro +import psutil +from rich.table import Table +from textual.widget import Widget + + +class InfoLine(Widget): + def on_mount(self): + self.width = 0 + self.height = 0 + self.set_interval(1.0, self.refresh) + + # The getlogin docs say: + # > For most purposes, it is more useful to use getpass.getuser() [...] + # username = os.getlogin() + username = getpass.getuser() + ustring = f"{username} @" + node = platform.node() + if node: + ustring += f" [b]{platform.node()}[/]" + + system = platform.system() + if system == "Linux": + ri = distro.os_release_info() + system_list = [ri["name"]] + if "version_id" in ri: + system_list.append(ri["version_id"]) + system_list.append(f"{platform.architecture()[0]} / {platform.release()}") + system_string = " ".join(system_list) + elif system == "Darwin": + system_string = f" macOS {platform.mac_ver()[0]}" + else: + # fallback + system_string = "" + + self.left_string = " ".join([ustring, system_string]) + self.boot_time = psutil.boot_time() + + def render(self): + uptime = timedelta(seconds=time.time() - self.boot_time) + h, m = seconds_to_h_m(uptime.seconds) + + right = [f"💚 {uptime.days}d, {h}:{m:02d}h"] + + bat = psutil.sensors_battery() + if bat is not None: + # hh, mm = seconds_to_h_m(bat.secsleft) + bat_string = f"{bat.percent:.1f}%" + if bat.power_plugged: + bat_string = "🔋 [aquamarine3]" + bat_string + "[/]" + elif bat.percent < 10: + bat_string = "🪫 [red3 reverse bold]" + bat_string + "[/]" + elif bat.percent < 15: + bat_string = "🪫 [slate_blue1]" + bat_string + "[/]" + elif bat.percent < 20: + bat_string = "🔋 [yellow]" + bat_string + "[/]" + right.append(bat_string) + + table = Table(show_header=False, expand=True, box=None, padding=0) + if self.width < 100: + table.add_column(justify="left", no_wrap=True) + table.add_column(justify="right", no_wrap=True) + table.add_row(self.left_string, ", ".join(right)) + else: + table.add_column(justify="left", no_wrap=True, ratio=1) + table.add_column(justify="center", no_wrap=True, ratio=1) + table.add_column(justify="right", no_wrap=True, ratio=1) + table.add_row( + self.left_string, datetime.now().strftime("%c"), " ".join(right) + ) + return table + + async def on_resize(self, event): + self.width = event.width + self.height = event.height + + +def seconds_to_h_m(seconds): + return seconds // 3600, (seconds // 60) % 60 diff --git a/src/sot/_mem.py b/src/sot/_mem.py new file mode 100644 index 0000000..70ef58a --- /dev/null +++ b/src/sot/_mem.py @@ -0,0 +1,106 @@ +import psutil +from rich import box +from rich.console import Group +from rich.panel import Panel +from rich.text import Text +from textual.widget import Widget + +from ._helpers import sizeof_fmt +from .braille_stream import BrailleStream + + +class Mem(Widget): + def on_mount(self): + mem = psutil.virtual_memory() + self.mem_total_bytes = mem.total + + # check which mem sections are available on the machine + self.attrs = [] + self.colors = ["yellow", "aquamarine3", "sky_blue3", "slate_blue1", "red3"] + for attr in ["free", "available", "cached", "used"]: + if hasattr(mem, attr): + self.attrs.append(attr) + + swap = psutil.swap_memory() + if swap is not None: + self.attrs.append("swap") + + # append spaces to make all names equally long + maxlen = max(len(string) for string in self.attrs) + maxlen = min(maxlen, 5) + self.labels = [attr[:maxlen].ljust(maxlen) for attr in self.attrs] + + # can't use + # [BrailleStream(40, 4, 0.0, self.mem_total_bytes)] * len(self.names) + # since that only creates one BrailleStream, references n times. + self.mem_streams = [] + for attr in self.attrs: + total = swap.total if attr == "swap" else self.mem_total_bytes + self.mem_streams.append(BrailleStream(40, 4, 0.0, total)) + + self.group = Group("", "", "", "", "") + + mem_total_string = sizeof_fmt(self.mem_total_bytes, fmt=".2f") + self.panel = Panel( + self.group, + title=f"[b]Mem[/] - {mem_total_string}", + title_align="left", + border_style="bright_black", + box=box.SQUARE, + ) + + self.refresh_table() + self.set_interval(2.0, self.refresh_table) + + def refresh_table(self): + mem = psutil.virtual_memory() + swap = psutil.swap_memory() + + for k, (attr, label, stream, col) in enumerate( + zip(self.attrs, self.labels, self.mem_streams, self.colors) + ): + if attr == "swap": + val = swap.used + total = swap.total + if total == 0: + total = 1 + else: + val = getattr(mem, attr) + total = self.mem_total_bytes + + stream.add_value(val) + val_string = " ".join( + [ + label, + sizeof_fmt(val, fmt=".2f"), + f"({val / total * 100:.0f}%)", + ] + ) + graph = "\n".join( + [val_string + stream.graph[0][len(val_string) :]] + stream.graph[1:] + ) + self.group.renderables[k] = Text(graph, style=col) + + self.refresh() + + def render(self) -> Panel: + return self.panel + + async def on_resize(self, event): + for ms in self.mem_streams: + ms.reset_width(event.width - 4) + + # split the available event.height-2 into n even blocks, and if there's + # a rest, divide it up into the first, e.g., with n=4 + # 17 -> 5, 4, 4, 4 + n = len(self.attrs) + heights = [(event.height - 2) // n] * n + for k in range((event.height - 2) % n): + heights[k] += 1 + # add to last: + # heights[-(k + 1)] += 1 + + for ms, h in zip(self.mem_streams, heights): + ms.reset_height(h) + + self.refresh_table() diff --git a/src/sot/_net.py b/src/sot/_net.py new file mode 100644 index 0000000..63c416a --- /dev/null +++ b/src/sot/_net.py @@ -0,0 +1,223 @@ +from __future__ import annotations + +import socket + +import psutil +from rich import box +from rich.console import Group +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from textual.widget import Widget + +from .__about__ import __version__ +from ._helpers import sizeof_fmt +from .braille_stream import BrailleStream + +# def get_ip(): +# s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +# s.connect(("8.8.8.8", 80)) +# ip = s.getsockname()[0] +# s.close() +# return ip + + +def _autoselect_interface(): + """ + TCP/IP supports types of network interfaces: + + - Standard Ethernet Version 2 (en) + - IEEE 802.3 (et) + - Token-ring (tr) + - Serial Line Internet Protocol (SLIP) + - Loopback (lo) + - FDDI + - Serial Optical (so) + - ATM (at) + - Point-to-Point Protocol (PPP) + - Virtual IP Address (vi) + - Apple NCM Private Interface(anpi) + - Apple Specific for VPN and Back to My Mac (utun) + - Bonded Interfaces (bond) + - VPN Interfaces (tun/tap) + - ISDN (Integrated Services Digital Network) + - VLAN Interfaces (vlan) + - Virtual Machine Interfaces (vmx, vnet, etc.) + - MPLS (Multiprotocol Label Switching) + - Fibre Channel over Ethernet (FCoE) + - LTE/5G (cellular) + - InfiniBand (ib) + - Virtual Ethernet (veth) + - Bluetooth (bt) + - Wi-Fi (Wireless LAN Interface) (wlan) + """ + stats = psutil.net_if_stats() + score_dict = {} + for name, stats in stats.items(): + if not stats.isup: + score_dict[name] = 0 + elif ( + # On Unix, we have `lo`, on Windows `Loopback Pseudo-Interface k` + # and `Local Area Connection k` (the latter is valid) + name.startswith("lo") + or name.lower().startswith("loopback") + or name.lower().startswith("docker") + or name.lower().startswith("anpi") + ): + score_dict[name] = 1 + elif name.lower().startswith("fw") or name.lower().startswith("Bluetooth"): + # firewire + # or bluetooth + score_dict[name] = 2 + elif name.lower().startswith("en"): + # Preference given to Standard Ethernet Version 2. + # TODO: Make this dynamic by detecting network states and activity. + score_dict[name] = 4 + else: + score_dict[name] = 3 + + # Amongst all keys with max score, get the alphabetically first. + # This is to prefer en0 over en5, . + max_score = max(score_dict.values()) + max_keys = [key for key, score in score_dict.items() if score == max_score] + return sorted(max_keys)[0] + + +class Net(Widget): + def __init__(self, interface: str | None = None): + self.interface = _autoselect_interface() if interface is None else interface + self.sot_string = f"sot v{__version__}" + super().__init__() + + def on_mount(self): + self.down_box = Panel( + "", + title="▼ down", + title_align="left", + style="aquamarine3", + width=20, + box=box.SQUARE, + ) + self.up_box = Panel( + "", + title="▲ up", + title_align="left", + style="yellow", + width=20, + box=box.SQUARE, + ) + self.table = Table(expand=True, show_header=False, padding=0, box=None) + # Add ratio 1 to expand that column as much as possible + self.table.add_column("graph", no_wrap=True, ratio=1) + self.table.add_column("box", no_wrap=True, width=20) + self.table.add_row("", self.down_box) + self.table.add_row("", self.up_box) + + self.group = Group(self.table, "", "") + self.panel = Panel( + self.group, + title=f"[b]Net[/] - {self.interface}", + # border_style="red3", + border_style="bright_black", + title_align="left", + box=box.SQUARE, + subtitle=self.sot_string, + subtitle_align="right", + ) + + self.last_net = None + self.max_recv_bytes_s = 0 + self.max_recv_bytes_s_str = "" + self.max_sent_bytes_s = 0 + self.max_sent_bytes_s_str = "" + + self.recv_stream = BrailleStream(20, 5, 0.0, 1.0e6) + self.sent_stream = BrailleStream(20, 5, 0.0, 1.0e6, flipud=True) + + self.refresh_ips() + self.refresh_panel() + + self.interval_s = 2.0 + self.set_interval(self.interval_s, self.refresh_panel) + self.set_interval(60.0, self.refresh_ips) + + def refresh_ips(self): + addrs = psutil.net_if_addrs()[self.interface] + ipv4 = [] + for addr in addrs: + # ipv4? + if addr.family == socket.AF_INET: + ipv4.append(addr.address + " / " + addr.netmask) + ipv6 = [] + for addr in addrs: + # ipv4? + if addr.family == socket.AF_INET6: + ipv6.append(addr.address) + + ipv4 = "\n ".join(ipv4) + ipv6 = "\n ".join(ipv6) + self.group.renderables[1] = f"[b]IPv4:[/] {ipv4}" + self.group.renderables[2] = f"[b]IPv6:[/] {ipv6}" + + # would love to collect data upon each render(), but render is called too often + # + def refresh_panel(self): + net = psutil.net_io_counters(pernic=True)[self.interface] + if self.last_net is None: + recv_bytes_s_string = "" + sent_bytes_s_string = "" + else: + recv_bytes_s = (net.bytes_recv - self.last_net.bytes_recv) / self.interval_s + recv_bytes_s_string = sizeof_fmt(recv_bytes_s, fmt=".1f") + "/s" + sent_bytes_s = (net.bytes_sent - self.last_net.bytes_sent) / self.interval_s + sent_bytes_s_string = sizeof_fmt(sent_bytes_s, fmt=".1f") + "/s" + + if recv_bytes_s > self.max_recv_bytes_s: + self.max_recv_bytes_s = recv_bytes_s + self.max_recv_bytes_s_str = sizeof_fmt(recv_bytes_s, fmt=".1f") + "/s" + + if sent_bytes_s > self.max_sent_bytes_s: + self.max_sent_bytes_s = sent_bytes_s + self.max_sent_bytes_s_str = sizeof_fmt(sent_bytes_s, fmt=".1f") + "/s" + + self.recv_stream.add_value(recv_bytes_s) + self.sent_stream.add_value(sent_bytes_s) + + self.last_net = net + + total_recv_string = sizeof_fmt(net.bytes_recv, sep=" ", fmt=".1f") + total_sent_string = sizeof_fmt(net.bytes_sent, sep=" ", fmt=".1f") + + self.down_box.renderable = "\n".join( + [ + f"{recv_bytes_s_string}", + f"max {self.max_recv_bytes_s_str}", + f"total {total_recv_string}", + ] + ) + self.up_box.renderable = "\n".join( + [ + f"{sent_bytes_s_string}", + f"max {self.max_sent_bytes_s_str}", + f"total {total_sent_string}", + ] + ) + self.refresh_graphs() + + self.refresh() + + def refresh_graphs(self): + self.table.columns[0]._cells[0] = Text( + "\n".join(self.recv_stream.graph), style="aquamarine3" + ) + self.table.columns[0]._cells[1] = Text( + "\n".join(self.sent_stream.graph), style="yellow" + ) + + def render(self): + return self.panel + + async def on_resize(self, event): + self.sent_stream.reset_width(event.width - 25) + self.recv_stream.reset_width(event.width - 25) + self.refresh_graphs() diff --git a/src/sot/_procs_list.py b/src/sot/_procs_list.py new file mode 100644 index 0000000..b0e8602 --- /dev/null +++ b/src/sot/_procs_list.py @@ -0,0 +1,139 @@ +import psutil +from rich import box +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from textual.widget import Widget + +from ._helpers import sizeof_fmt + + +def get_process_list(num_procs: int): + processes = list( + psutil.process_iter( + [ + "pid", + "name", + "username", + "cmdline", + "cpu_percent", + "num_threads", + "memory_info", + "status", + ] + ) + ) + + if processes[0].pid == 0: + # Remove process with PID 0. On Windows, that's SYSTEM IDLE, and we + # don't want that to appear at the top of the list. + # + processes = processes[1:] + + processes = [p.info for p in processes] + + processes = sorted( + processes, + # The item.info["cpu_percent"] can be `ad_value` (default None). + # It gets assigned to a dict key in case AccessDenied or + # ZombieProcess exception is raised when retrieving that particular + # process information. + key=lambda p: (p["cpu_percent"] or 0.0), + reverse=True, + ) + processes = processes[:num_procs] + return processes + + +class ProcsList(Widget): + def on_mount(self): + self.max_num_procs = 100 + self.collect_data() + self.set_interval(6.0, self.collect_data) + + def collect_data(self): + processes = get_process_list(self.max_num_procs) + + table = Table( + show_header=True, + header_style="bold", + box=None, + padding=(0, 1), + expand=True, + ) + # set ration=1 on all columns that should be expanded + # + table.add_column(Text("PID", justify="left"), no_wrap=True, justify="right") + table.add_column("Process", style="aquamarine3", no_wrap=True, ratio=1) + # table.add_column("Args", no_wrap=True, ratio=2) + table.add_column( + Text("🧵", justify="left"), + style="aquamarine3", + no_wrap=True, + justify="right", + ) + # table.add_column("👤", no_wrap=True) + table.add_column( + Text("Mem", justify="left"), style="aquamarine3", no_wrap=True, justify="right" + ) + table.add_column( + Text("CPU %", style="u", justify="left"), + no_wrap=True, + justify="right", + ) + + for p in processes: + # Everything can be None here, see comment above + pid = p["pid"] + pid = "" if pid is None else str(pid) + # + name = p["name"] + if name is None: + name = "" + # + # cmdline = p["cmdline"] + # cmdline = "" if cmdline is None else " ".join(p["cmdline"][1:]) + # + num_threads = p["num_threads"] + num_threads = "" if num_threads is None else str(num_threads) + # + # username = p["username"] + # if username is None: + # username = "" + # + mem_info = p["memory_info"] + mem_info = ( + "" if mem_info is None else sizeof_fmt(mem_info.rss, suffix="", sep="") + ) + # + cpu_percent = p["cpu_percent"] + cpu_percent = "" if cpu_percent is None else f"{cpu_percent:.1f}" + table.add_row( + pid, + name, + # cmdline, + num_threads, + # username, + mem_info, + cpu_percent + ) + + total_num_threads = sum((p["num_threads"] or 0) for p in processes) + num_sleep = sum(p["status"] == "sleeping" for p in processes) + + self.panel = Panel( + table, + title=f"[b]📋 Processes [/] - {len(processes)} ({total_num_threads} 🧵), {num_sleep} 😴", + title_align="left", + # border_style="dark_orange", + border_style="bright_black", + box=box.SQUARE, + ) + + self.refresh() + + def render(self) -> Panel: + return self.panel + + async def on_resize(self, event): + self.max_num_procs = event.height - 3 diff --git a/src/sot/_sot.py b/src/sot/_sot.py new file mode 100644 index 0000000..06634f6 --- /dev/null +++ b/src/sot/_sot.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import psutil +from rich import box +from rich.console import Group +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from textual.widget import Widget + +from .braille_stream import BrailleStream + + +class Sot(Widget): + def __init__(self): + super().__init__() + + def on_mount(self): + self.table = Table(expand=True, show_header=False, padding=0, box=None) + self.group = Group(self.table, "") + self.read_stream = BrailleStream(20, 5, 0.0, 1.0e6) + self.write_stream = BrailleStream(20, 5, 0.0, 1.0e6, flipud=True) + + self.panel = Panel( + self.group, + box=box.SIMPLE, + ) + + # self.refresh_panel() + # self.interval_s = 2.0 + # self.set_interval(self.interval_s, self.refresh_panel) + + # def refresh_panel(self): + # self.refresh() + + def render(self): + return self.panel diff --git a/src/sot/blockchar_stream.py b/src/sot/blockchar_stream.py new file mode 100644 index 0000000..32fe5bd --- /dev/null +++ b/src/sot/blockchar_stream.py @@ -0,0 +1,28 @@ +from math import ceil + +num_to_blockchar = [" ", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"] + + +class BlockCharStream: + def __init__(self, width: int, height: int, minval: float, maxval: float): + self.graph = [" " * width] * height + self.height = height + self.minval = minval + self.maxval = maxval + self.last_value: float = minval + + def add_value(self, value): + k = ceil((value - self.minval) / (self.maxval - self.minval) * 8 * self.height) + + blocks = [8] * (k // 8) + if k % 8 > 0: + blocks += [k % 8] + blocks += [0] * (self.height - len(blocks)) + + chars = [num_to_blockchar[i] for i in blocks] + + # update stream + for k, char in enumerate(chars[::-1]): + self.graph[k] = self.graph[k][1:] + char + + self.last_value = value diff --git a/src/sot/braille_stream.py b/src/sot/braille_stream.py new file mode 100644 index 0000000..a15e23f --- /dev/null +++ b/src/sot/braille_stream.py @@ -0,0 +1,149 @@ +from __future__ import annotations + +from math import ceil + +# String lookup and list lookup are equally fast, see +# +num_to_braille = [ + [" ", "⢀", "⢠", "⢰", "⢸"], + ["⡀", "⣀", "⣠", "⣰", "⣸"], + ["⡄", "⣄", "⣤", "⣴", "⣼"], + ["⡆", "⣆", "⣦", "⣶", "⣾"], + ["⡇", "⣇", "⣧", "⣷", "⣿"], +] + +num_to_braille_upside_down = [ + [" ", "⠈", "⠘", "⠸", "⢸"], + ["⠁", "⠉", "⠙", "⠹", "⢹"], + ["⠃", "⠋", "⠛", "⠻", "⢻"], + ["⠇", "⠏", "⠟", "⠿", "⢿"], + ["⡇", "⡏", "⡟", "⡿", "⣿"], +] + + +def _transpose(l): + # https://stackoverflow.com/a/6473724/353337 + return map(list, zip(*l)) + + +class BrailleStream: + def __init__( + self, + width: int, + height: int, + minval: float, + maxval: float, + flipud: bool = False, + ): + # Store two alternating sets of graphs. This is necessary because + # Braille symbols fit two values in each character. + self._graphs = [ + [" " * width] * height, + [" " * width] * height, + ] + self.graph_0_is_active = True + self.width = width + self.height = height + self.minval = minval + self.maxval = maxval + self._last_blocks = [0] * height + # store all values for resize purposes + # we store one more value than what is displayed to account for the "old" graph + self.values: list[float] = [minval] * (2 * self.width + 1) + self.flipud = flipud + self.lookup = num_to_braille_upside_down if flipud else num_to_braille + + def value_to_blocks(self, value: float): + # value -> number of dots + if value < self.minval: + k = 0 + elif value > self.maxval: + k = 4 * self.height + else: + diff = self.maxval - self.minval + if diff == 0: + diff = 1 + k = ceil((value - self.minval) / diff * 4 * self.height) + # form blocks of 4 + blocks = [4] * (k // 4) + if k % 4 > 0: + blocks += [k % 4] + blocks += [0] * (self.height - len(blocks)) + return blocks + + def add_value(self, value: float): + blocks = self.value_to_blocks(value) + + chars = [self.lookup[i0][i1] for i0, i1 in zip(self._last_blocks, blocks)] + if not self.flipud: + chars = chars[::-1] + + # alternate between graphs[0] and graphs[1] + self.graph_0_is_active = not self.graph_0_is_active + g = self._graphs[0 if self.graph_0_is_active else 1] + + # update stream + for k, char in enumerate(chars): + g[k] = g[k][1:] + char + + self.values = self.values[1:] + [value] + self._last_blocks = blocks + + @property + def graph(self): + return self._graphs[0 if self.graph_0_is_active else 1] + + def reset_width(self, width: int): + if width == self.width: + return + elif width > self.width: + diff = width - self.width + self._graphs = [[" " * diff + row for row in g] for g in self._graphs] + self.values = [self.minval] * (2 * diff) + self.values + elif width < self.width: + self._graphs = [[row[-width:] for row in g] for g in self._graphs] + self.values = self.values[-(2 * width + 1) :] + + self.width = width + + def reset_height(self, height: int): + if height == self.height: + return + + # recreate both _graphs + self.height = height + blocks = [self.value_to_blocks(value) for value in self.values] + + assert len(self.values) == 2 * self.width + 1 + g = [ + # 0 -> 2 * k + 1 + [ + [ + self.lookup[i0][i1] + for i0, i1 in zip(blocks[2 * k], blocks[2 * k + 1]) + ] + for k in range(self.width) + ], + # 1 -> 2 * k + 2 + [ + [ + self.lookup[i0][i1] + for i0, i1 in zip(blocks[2 * k + 1], blocks[2 * k + 2]) + ] + for k in range(self.width) + ], + ] + if not self.flipud: + g = [ + [row[::-1] for row in g[0]], + [row[::-1] for row in g[1]], + ] + # transpose and join + self._graphs = [ + ["".join(row) for row in _transpose(g[0])], + ["".join(row) for row in _transpose(g[1])], + ] + if self.graph_0_is_active: + self._graphs = [self._graphs[1], self._graphs[0]] + + self._last_blocks = blocks[-1] diff --git a/tests/test_streams.py b/tests/test_streams.py new file mode 100644 index 0000000..fbf21e7 --- /dev/null +++ b/tests/test_streams.py @@ -0,0 +1,90 @@ +import sot + + +def test_braille_stream(): + stream = sot.BrailleStream(3, 1, 0.0, 100.0) + + stream.add_value(10.0) + assert stream.graph == [" ⢀"] + + stream.add_value(30.0) + assert stream.graph == [" ⣠"] + + stream.add_value(60.0) + assert stream.graph == [" ⢀⣴"] + + stream.add_value(90.0) + assert stream.graph == [" ⣠⣾"] + + +def test_braille_stream_upside_down(): + stream = sot.BrailleStream(3, 1, 0.0, 100.0, flipud=True) + + stream.add_value(10.0) + assert stream.graph == [" ⠈"] + + stream.add_value(30.0) + assert stream.graph == [" ⠙"] + + stream.add_value(60.0) + assert stream.graph == [" ⠈⠻"] + + stream.add_value(90.0) + assert stream.graph == [" ⠙⢿"] + + +def test_braille_stream_tall(): + stream = sot.BrailleStream(3, 4, 0.0, 100.0) + + stream.add_value(43.0) + assert stream.graph == [" ", " ", " ⢰", " ⢸"] + + stream.add_value(10.0) + assert stream.graph == [" ", " ", " ⡆", " ⣧"] + + stream.add_value(100.0) + assert stream.graph == [" ⢸", " ⢸", " ⢰⢸", " ⢸⣼"] + + stream.add_value(76.0) + assert stream.graph == [" ⣇", " ⣿", " ⡆⣿", " ⣧⣿"] + + stream.add_value(0.0) + assert stream.graph == [" ⢸⡀", " ⢸⡇", "⢰⢸⡇", "⢸⣼⡇"] + + +def test_blockchar_stream(): + stream = sot.BlockCharStream(5, 1, 0.0, 100.0) + + stream.add_value(10.0) + assert stream.graph == [" ▁"] + + stream.add_value(30.0) + assert stream.graph == [" ▁▃"] + + stream.add_value(60.0) + assert stream.graph == [" ▁▃▅"] + + stream.add_value(100.0) + assert stream.graph == [" ▁▃▅█"] + + stream.add_value(0.0) + assert stream.graph == ["▁▃▅█ "] + + +def test_blockchar_stream_tall(): + stream = sot.BlockCharStream(3, 4, 0.0, 100.0) + + stream.add_value(10.0) + assert stream.graph == [" ", " ", " ", " ▄"] + + stream.add_value(30.0) + assert stream.graph == [" ", " ", " ▂", " ▄█"] + + stream.add_value(60.0) + assert stream.graph == [" ", " ▄", " ▂█", "▄██"] + + stream.add_value(100.0) + assert stream.graph == [" █", " ▄█", "▂██", "███"] + + stream.add_value(0.0) + assert stream.graph == [" █ ", "▄█ ", "██ ", "██ "] diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..1b17d27 --- /dev/null +++ b/tox.ini @@ -0,0 +1,10 @@ +[tox] +envlist = py3 +isolated_build = True + +[testenv] +deps = + pytest + pytest-codeblocks +commands = + pytest {posargs} --codeblocks