fixes and improvements
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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" }
|
||||
|
||||
Reference in New Issue
Block a user