fixes and improvements

This commit is contained in:
2025-03-07 13:54:54 +01:00
parent 94f7df610c
commit d84c0d58db
7 changed files with 29 additions and 19 deletions
+3 -2
View File
@@ -1,10 +1,11 @@
from cpu_governor_auto_adjust.logger import getLogger from cpu_governor_auto_adjust.logger import getLogger
from cpu_governor_auto_adjust.config import Config from cpu_governor_auto_adjust.config import Config
from logging import Formatter
class AppClass: class AppClass:
def __init__(self, _config: Config) -> None: def __init__(self, _config: Config) -> None:
self._config = _config self._config = _config
self.log = getLogger(self.__class__.__name__, loglevel=_config.loglevel.upper()) self.log = getLogger(self.__class__.__name__, loglevel=_config.loglevel.upper())
app_class_logging_format = self.log.handlers[0].formatter._fmt.replace("%(asctime)s %(levelname)-8s", f"%(asctime)s %(levelname)-8s [{self.__class__.__name__}]")
self.log.handlers[0].setFormatter(Formatter(app_class_logging_format))
self.log.info(f'initializing {self.__class__.__name__}') self.log.info(f'initializing {self.__class__.__name__}')
@@ -8,19 +8,16 @@ from cpu_governor_auto_adjust.governor import GovernorControl
from cpu_governor_auto_adjust.schedule import TriggerScheduler from cpu_governor_auto_adjust.schedule import TriggerScheduler
def main() -> None: def main() -> None:
asyncio.run(_main()) asyncio.run(_main())
async def _main() -> None: async def _main() -> None:
config = Config() config = Config()
log = getLogger('main', loglevel=config.loglevel.upper()) log = getLogger('main', loglevel=config.loglevel.upper())
if config.testmode: if config.testmode:
log.warning("starting in testmode, cpu adjustments have been disabled") log.warning("starting in testmode, cpu adjustments have been disabled")
governor = GovernorControl(config)
scheduler = TriggerScheduler(config) scheduler = TriggerScheduler(config)
for triggertuple in config.triggertuples: for triggertuple in config.triggertuples:
_trigger = trigger_mapping[triggertuple.name](config) _trigger = trigger_mapping[triggertuple.name](config)
+1 -4
View File
@@ -58,10 +58,7 @@ class GovernorControl(AppClass):
return governor return governor
def set_governor(self, governor_name: str) -> None: def set_governor(self, governor_name: str) -> None:
self.log.debug( self.log.info("setting cpu governor to %s", governor_name)
"setting cpu governor to %s by using command self._cpufreq.set_governors(%s)",
governor_name, governor_name
)
if self._config.testmode: if self._config.testmode:
self.log.warning("application is running in testmode, cpu governor not set") self.log.warning("application is running in testmode, cpu governor not set")
+1 -2
View File
@@ -20,8 +20,7 @@ def getLogger(name: str = 'root', loglevel: str = 'INFO') -> Logger:
fmt = '%(asctime)s %(levelname)-8s %(message)s (%(filename)s:%(lineno)d)' fmt = '%(asctime)s %(levelname)-8s %(message)s (%(filename)s:%(lineno)d)'
else: else:
fmt = '%(asctime)s %(levelname)-8s %(message)s' fmt = '%(asctime)s %(levelname)-8s %(message)s'
fmt_date = '%Y-%m-%dT%T' formatter = logging.Formatter(fmt)
formatter = logging.Formatter(fmt, fmt_date)
handler = logging.StreamHandler() handler = logging.StreamHandler()
handler.setFormatter(formatter) handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
+14 -1
View File
@@ -30,6 +30,17 @@ class TriggerScheduler(AppClass):
self.log.debug('preferred governor: %s', preferred_governor.name) self.log.debug('preferred governor: %s', preferred_governor.name)
return preferred_governor.name return preferred_governor.name
async def set_governor(self, governor_name: str) -> None:
if self.governor_control.current_governor is None:
self.log.debug("unable to retrieve current governor")
return
if self.governor_control.current_governor.name == governor_name:
self.log.debug("governor is already set to: %s", governor_name)
return
self.governor_control.set_governor(governor_name)
async def callback_trigger(self, _trigger: Trigger) -> None: async def callback_trigger(self, _trigger: Trigger) -> None:
"""Run a callback_trigger with a specific name and check its status at a given interval.""" """Run a callback_trigger with a specific name and check its status at a given interval."""
await _trigger.async_run() await _trigger.async_run()
@@ -76,7 +87,9 @@ class TriggerScheduler(AppClass):
try: try:
while True: while True:
self.establish_preferred_governor() preferred_governor = self.establish_preferred_governor()
task = self.loop.create_task(self.set_governor(preferred_governor))
await task
await asyncio.sleep(1) # Keep the main function alive await asyncio.sleep(1) # Keep the main function alive
except asyncio.exceptions.CancelledError: except asyncio.exceptions.CancelledError:
pass pass
+8 -5
View File
@@ -4,6 +4,8 @@ from roonapi import RoonApi, RoonDiscovery # type: ignore
from functools import cached_property from functools import cached_property
from typing import Any, NamedTuple, Union from typing import Any, NamedTuple, Union
from pathlib import Path from pathlib import Path
from importlib.metadata import version
from socket import gethostname
class RoonServer(NamedTuple): class RoonServer(NamedTuple):
@@ -27,17 +29,18 @@ class RoonTrigger(Trigger):
self.log.debug("zone_id: %s zone_info: %s" , zone_id, zone) self.log.debug("zone_id: %s zone_info: %s" , zone_id, zone)
zone_name = zone['display_name'] zone_name = zone['display_name']
zone_state = zone['state'] zone_state = zone['state']
self.log.info("zone_id: %s name: %s, state: %s" , zone_id, zone_name, zone_state) zone_now_playing = zone['now_playing']['one_line']['line1']
self.log.info("zone_id: %s name: %s, state: %s, now playing: %s" , zone_id, zone_name, zone_state, zone_now_playing)
zones_state.append(zone_state) zones_state.append(zone_state)
self.active = True if "playing" in zones_state else False self.active = "playing" in zones_state or "loading" in zones_state
@cached_property @cached_property
def appinfo(self) -> dict[str, Any]: def appinfo(self) -> dict[str, Any]:
_appinfo = { _appinfo = {
"extension_id": self.config.custom_config['extensionId'], "extension_id": f"{self.config.custom_config['extensionId']}_{gethostname()}",
"display_name": self.config.custom_config['displayName'], "display_name": f"{self.config.custom_config['displayName']} on {gethostname()}",
"display_version": self.config.custom_config['displayVersion'], "display_version": version('cpu_governor_auto_adjust'),
"publisher": self.config.custom_config['publisher'], "publisher": self.config.custom_config['publisher'],
"email": self.config.custom_config['email'], "email": self.config.custom_config['email'],
} }
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "cpu_governor_auto_adjust" name = "cpu_governor_auto_adjust"
version = "0.1.13" version = "0.1.26"
description = "This application has been developed to automatically change cpu governor based on certain triggers." description = "This application has been developed to automatically change cpu governor based on certain triggers."
authors = [ authors = [
{ name = "Martin Reurekas", email = "martin@semrks.nl" } { name = "Martin Reurekas", email = "martin@semrks.nl" }