#!/usr/bin/env python3 import asyncio import functools import json import os import signal import sys import threading import time from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer from utils import ChangedFloat from ws.message import MessageDispatcher from ws.server.ws_server_multi_user import WsServerMultiUser from components.pid import PidFactory from components.plant import PlantFactory from components.actor import StirrerFactory from components.sud import Sud from components.sud_forecast import SudForecastEstimator from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, SudTask, ServerLogTask, SudLogTask import argparse as ap class Tee: """Duplicates writes to multiple streams - used to mirror stdout/stderr (everything the rest of the codebase already reaches via print()) into a log file under logs/ as well as the console, without having to touch every print() call site. Also stamps every line with a "T