commit: dd37968c903a503fa15bd984076292ceb24992b7
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 9 18:03:01 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Nov 9 18:03:01 2025 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=dd37968c
Print available job tokens on SIGUSR1
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
steve.py | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/steve.py b/steve.py
index 80269d7..12466cc 100755
--- a/steve.py
+++ b/steve.py
@@ -8,14 +8,18 @@
from __future__ import annotations
import argparse
+import array
import contextlib
+import fcntl
import multiprocessing
import os
import signal
+import termios
from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
+ import io
from collections.abc import Generator
from types import FrameType
@@ -28,6 +32,12 @@ def exit_sig_handler(signum: int, _: FrameType | None) ->
None:
raise SystemExit(0)
+def print_state(job_file: io.FileIO) -> None:
+ data_buf = array.array("i", [0])
+ fcntl.ioctl(job_file.fileno(), termios.FIONREAD, data_buf)
+ print(f"Available job tokens: {data_buf[0]}")
+
+
@contextlib.contextmanager
def hold_fifo(path: Path) -> Generator[None]:
os.mkfifo(path)
@@ -40,6 +50,7 @@ def hold_fifo(path: Path) -> Generator[None]:
def main() -> None:
signal.signal(signal.SIGINT, exit_sig_handler)
signal.signal(signal.SIGTERM, exit_sig_handler)
+ signal.signal(signal.SIGUSR1, signal.SIG_IGN)
argp = argparse.ArgumentParser()
argp.add_argument(
@@ -73,6 +84,10 @@ def main() -> None:
context_managers.enter_context(hold_fifo(args.path))
_ = os.open(args.path, os.O_RDONLY | os.O_NONBLOCK)
job_file = args.path.open("wb")
+ signal.signal(
+ signal.SIGUSR1,
+ lambda _sig, _frame: print_state(job_file),
+ )
if args.control_fifo is not None:
context_managers.enter_context(hold_fifo(args.control_fifo))
print(f"Waiting for clients to open {args.control_fifo}")