From c93f2a8569e874c25c4a2bb3dac27d813f80cb34 Mon Sep 17 00:00:00 2001 From: NGnius Date: Thu, 21 Apr 2022 14:01:49 -0400 Subject: [PATCH] Add basic CPU count selection functionality --- main.py | 62 +++++++++++++++++++++++++++++++++++++++++------- main_view.html | 64 +++++++++++++++++++++++++++++++++++++++++++++++--- plugin.json | 6 ++--- 3 files changed, 118 insertions(+), 14 deletions(-) diff --git a/main.py b/main.py index 46c29c2..08c80e7 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,58 @@ -class Plugin: - # A normal method. It can be called from JavaScript using call_plugin_function("method_1", argument1, argument2) - async def method_1(self, *args): - pass +import time - # A normal method. It can be called from JavaScript using call_plugin_function("method_2", argument1, argument2) - async def method_2(self, *args): - pass +class Plugin: + CPU_COUNT = 8 + + # call from main_view.html with setCPUs(onclick_event) or call_plugin_method("set_cpus", count) + async def set_cpus(self, count) -> int: + print("Setting CPUs") + with open("/home/deck/PowerTools.log", "a") as f: + f.write(f"Setting {count} CPUs to active\n") + f.flush() + count = min(int(count), self.CPU_COUNT) + # never touch cpu0, since it's special + for cpu in range(1, count): + f.write(f"Setting CPU {cpu} to online\n") + enable_cpu(cpu) + for cpu in range(count, self.CPU_COUNT): + f.write(f"Setting CPU {cpu} to offline\n") + disable_cpu(cpu) + return self.CPU_COUNT + + async def get_cpus(self) -> int: + online_count = 1 # cpu0 is always online + for cpu in range(1, self.CPU_COUNT): + online_count += int(status_cpu(cpu)) + return online_count # Asyncio-compatible long-running code, executed in a task when the plugin is loaded async def _main(self): - pass \ No newline at end of file + with open("/home/deck/PowerTools.log", "w") as f: + f.write(f"Main loop\n") + pass + + +# these are stateless (well, the state is not saved internally) functions, so there's no need for these to be called like a class method + +def cpu_online_path(cpu_number: int) -> str: + return f"/sys/devices/system/cpu/cpu{cpu_number}/online" + +def write_to_sys(path, value: int): + with open(path, mode="w") as f: + f.write(str(value)) + +def read_from_sys(path): + with open(path, mode="r") as f: + return f.read(1) + +def enable_cpu(cpu_number: int): + filepath = cpu_online_path(cpu_number) + write_to_sys(filepath, 1) + +def disable_cpu(cpu_number: int): + filepath = cpu_online_path(cpu_number) + write_to_sys(filepath, 0) + +def status_cpu(cpu_number: int) -> bool: + filepath = cpu_online_path(cpu_number) + return read_from_sys(filepath) == "1" diff --git a/main_view.html b/main_view.html index b3a11a8..1f60259 100644 --- a/main_view.html +++ b/main_view.html @@ -4,8 +4,66 @@ + + - -

Hello World

+ +
+ + + + + +
- \ No newline at end of file + diff --git a/plugin.json b/plugin.json index e214d45..0fb7a24 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { - "name": "Plugin name", - "author": "Plugin author", + "name": "Power Tools", + "author": "NGnius", "main_view_html": "main_view.html", "tile_view_html": "", - "flags": ["hot_reload", "root"] + "flags": ["root", "_debug"] }