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.config import Config
from logging import Formatter
class AppClass:
def __init__(self, _config: Config) -> None:
self._config = _config
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__}')
@@ -8,19 +8,16 @@ from cpu_governor_auto_adjust.governor import GovernorControl
from cpu_governor_auto_adjust.schedule import TriggerScheduler
def main() -> None:
asyncio.run(_main())
async def _main() -> None:
config = Config()
log = getLogger('main', loglevel=config.loglevel.upper())
if config.testmode:
log.warning("starting in testmode, cpu adjustments have been disabled")
governor = GovernorControl(config)
scheduler = TriggerScheduler(config)
for triggertuple in config.triggertuples:
_trigger = trigger_mapping[triggertuple.name](config)
+1 -4
View File
@@ -58,10 +58,7 @@ class GovernorControl(AppClass):
return governor
def set_governor(self, governor_name: str) -> None:
self.log.debug(
"setting cpu governor to %s by using command self._cpufreq.set_governors(%s)",
governor_name, governor_name
)
self.log.info("setting cpu governor to %s", governor_name)
if self._config.testmode:
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)'
else:
fmt = '%(asctime)s %(levelname)-8s %(message)s'
fmt_date = '%Y-%m-%dT%T'
formatter = logging.Formatter(fmt, fmt_date)
formatter = logging.Formatter(fmt)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
+14 -1
View File
@@ -30,6 +30,17 @@ class TriggerScheduler(AppClass):
self.log.debug('preferred governor: %s', 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:
"""Run a callback_trigger with a specific name and check its status at a given interval."""
await _trigger.async_run()
@@ -76,7 +87,9 @@ class TriggerScheduler(AppClass):
try:
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
except asyncio.exceptions.CancelledError:
pass
+8 -5
View File
@@ -4,6 +4,8 @@ from roonapi import RoonApi, RoonDiscovery # type: ignore
from functools import cached_property
from typing import Any, NamedTuple, Union
from pathlib import Path
from importlib.metadata import version
from socket import gethostname
class RoonServer(NamedTuple):
@@ -27,17 +29,18 @@ class RoonTrigger(Trigger):
self.log.debug("zone_id: %s zone_info: %s" , zone_id, zone)
zone_name = zone['display_name']
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)
self.active = True if "playing" in zones_state else False
self.active = "playing" in zones_state or "loading" in zones_state
@cached_property
def appinfo(self) -> dict[str, Any]:
_appinfo = {
"extension_id": self.config.custom_config['extensionId'],
"display_name": self.config.custom_config['displayName'],
"display_version": self.config.custom_config['displayVersion'],
"extension_id": f"{self.config.custom_config['extensionId']}_{gethostname()}",
"display_name": f"{self.config.custom_config['displayName']} on {gethostname()}",
"display_version": version('cpu_governor_auto_adjust'),
"publisher": self.config.custom_config['publisher'],
"email": self.config.custom_config['email'],
}
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
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."
authors = [
{ name = "Martin Reurekas", email = "martin@semrks.nl" }