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.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)
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -29,6 +29,17 @@ class TriggerScheduler(AppClass):
|
|||||||
preferred_governor = trigger.governor
|
preferred_governor = trigger.governor
|
||||||
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."""
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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'],
|
||||||
}
|
}
|
||||||
@@ -88,4 +91,4 @@ class RoonTrigger(Trigger):
|
|||||||
self.set_status()
|
self.set_status()
|
||||||
|
|
||||||
async def async_run(self) -> None:
|
async def async_run(self) -> None:
|
||||||
self.roonapi.register_state_callback(self.roon_state_callback, "zones_changed")
|
self.roonapi.register_state_callback(self.roon_state_callback, "zones_changed")
|
||||||
|
|||||||
+1
-1
@@ -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" }
|
||||||
|
|||||||
Reference in New Issue
Block a user