Ejemplo n.º 1
0
 def __init__(self, name="Sensor Engine"):
     self.readouts_by_name: Dict[str, str] = {}
     self.readouts_table: Dict[str, Readout[Any]] = {}
     self.predicates_table: Dict[str, Predicate] = {}
     self.events_table: Dict[str, Event] = {}
     self.events_by_name: Dict[str, str] = {}
     self.events_by_predicate: Dict[str, List[str]] = {}
     self.handlers_table: Dict[str, List[EventHandler]] = {}
     self.predicates_by_signature: Dict[str, str] = {}
     self.machine_table: Dict[str, StateMachine] = {}
     self.name = name
     self.log = ansilog.getLogger("sensors.Engine")
     self.log.setLevel(logging.DEBUG)
     self._alive = True
Ejemplo n.º 2
0
class Readout(Generic[T]):
    name: str
    freq: timedelta
    timeout = timedelta(seconds=5)
    last_updated_time = datetime(1900, 1, 1)
    value: Optional[T] = None
    id: str = field(default_factory=get_id)
    log = ansilog.getLogger("sensors.Readout")

    def scheduled_for(self) -> datetime:
        return self.last_updated_time + self.freq

    async def get_value(self) -> T:
        raise NotImplementedError()

    def read(self) -> T:
        if self.value is not None:
            return self.value
        raise ValueError("The sensor has never been updated.")

    async def update(self) -> bool:
        self.last_updated_time = datetime.now()
        old_value = self.value
        try:
            self.value = await self.get_value()
            if self.value != old_value:
                self.log.debug(
                    f"Readout changed: '{self.name}' ({old_value} -> {self.value})"
                )
            return self.value != old_value
        except asyncio.TimeoutError:
            self.log.error(
                f"Timed out waiting for readout '{self.name}' to update.")
            return False
        except Exception:
            self.log.exception(
                f"Failed to update readout '{self.name}' due to an exception.")
            return False

    def __repr__(self):
        return f"Readout<name={self.name}, id={str(self.id)}"
Ejemplo n.º 3
0
CONFIG_DEFAULTS = {
    'cooldown_freq': 2000000,
    'battery_freq': 1500000,
    'max_freq': 9999999,
    'hot_threshold': 90,
    'cool_threshold': 70,
    'cpu_base_path': '/sys/devices/system/cpu',
    'cpu_freq_max_path': 'cpufreq/scaling_max_freq',
    'temperature_path': '/sys/class/thermal/thermal_zone0/temp',
    'ac_status_path': '/sys/class/power_supply/AC/online',
    'kill_nvidia_on_battery': False,
    'nvidia_kill_command': '/usr/bin/disable-nvidia'
}


log = ansilog.getLogger("x1e2-custodian")


# --------------------------------------------------------------------
class CPU:
    BASE_PATH = Path("/sys/devices/system/cpu")
    FREQ_MAX = Path("cpufreq/scaling_max_freq")

    @classmethod
    def get_all(cls):
        return (CPU(n) for n in range(psutil.cpu_count()))

    @classmethod
    def set_all_max_freq(cls, freq: int):
        for cpu in cls.get_all():
            cpu.set_max_freq(freq)
Ejemplo n.º 4
0
from argparse import ArgumentParser, Namespace
from dataclasses import dataclass, field
from pathlib import Path
from subprocess import check_call
from typing import Dict, List, Optional, Type

from ansilog import fg, getLogger

from .zettel import Zettel, Zettelkasten, ShellError

# --------------------------------------------------------------------
DEFAULT_ZK_PATH = Path.home() / "zk"
DEFAULT_ZETTEL = "index"

# --------------------------------------------------------------------
log = getLogger("zk")

# --------------------------------------------------------------------
error = log.error
info = log.info


# --------------------------------------------------------------------
class UnknownActionError(Exception):
    def __init__(self, action):
        self.action = action


# --------------------------------------------------------------------
@dataclass
class ActionMap:
Ejemplo n.º 5
0
def get_logger(name="bakery"):
    logger = ansilog.getLogger(name)
    if DEBUG:
        ansilog.handler.setLevel(logging.DEBUG)
        logger.setLevel(logging.DEBUG)
    return logger