Files
2026-04-18 10:49:19 +02:00

34 lines
1.0 KiB
Python

import socket
import os
LISTEN_PORT = int(os.environ.get("STATS_FILTER_LISTEN", "5006"))
FORWARD_PORT = int(os.environ.get("STATS_FILTER_FORWARD", "5005"))
FORWARD_ADDR = os.environ.get("STATS_FILTER_ADDR", "127.0.0.1")
BUF_SIZE = 65535
# Byte patterns to match (avoids decode overhead on spam lines)
PASS_PATTERNS = (
b"receiver-stats",
b"[CLEANUP]",
b"has timed out",
b"flow_cumulative_stats",
)
def main():
sock_in = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_in.bind(("0.0.0.0", LISTEN_PORT))
print(f"stats_filter: listening on UDP :{LISTEN_PORT}, forwarding to {FORWARD_ADDR}:{FORWARD_PORT}")
while True:
data, _ = sock_in.recvfrom(BUF_SIZE)
# Fast byte-level check — no decode unless it matches
for pattern in PASS_PATTERNS:
if pattern in data:
sock_out.sendto(data, (FORWARD_ADDR, FORWARD_PORT))
break
if __name__ == "__main__":
main()