This commit is contained in:
2026-06-12 15:29:57 +02:00
parent 39e578af2d
commit 35e6310dac
79 changed files with 27428 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
# -*- coding: utf-8 -*-
# =============================================================================
# Nazev: watch_new_emails_v1.0.py
# Verze: 1.0
# Datum: 2026-06-12
# Popis: Background poller pro feasibility session. Sleduje kolekci
# emaily."vbuzalka@its.jnj.com" v Mongo (192.168.1.76:27017) a ceka,
# az pribude email novejsi nez baseline (nejnovejsi received_at pri
# startu). Jakmile neco najde, vypise prehled novych emailu a SKONCI
# (exit 0) -> background task tim re-invokuje Claude, ktery je vyhodnoti.
# Polluje kazdych POLL_SECONDS. Po MAX_HOURS se ukonci (exit 0) i bez
# nalezu, aby session nedrzel proces donekonecna.
# Pouziti: python watch_new_emails_v1.0.py
# =============================================================================
import sys
import time
from datetime import datetime, timedelta
from pymongo import MongoClient
MONGO_URI = "mongodb://192.168.1.76:27017"
DB = "emaily"
COLL = "vbuzalka@its.jnj.com"
FOLDER = "/vbuzalka@its.jnj.com/Inbox"
POLL_SECONDS = 120
MAX_HOURS = 12
def newest(col):
doc = col.find_one({"jnj_folder": FOLDER}, sort=[("received_at", -1)],
projection={"received_at": 1})
return doc["received_at"] if doc else None
def fmt(v):
if isinstance(v, datetime):
return v.strftime("%Y-%m-%d %H:%M:%S")
return str(v)
def main():
client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=10000)
col = client[DB][COLL]
baseline = newest(col)
print(f"[watch] start baseline received_at = {fmt(baseline)}", flush=True)
deadline = datetime.now() + timedelta(hours=MAX_HOURS)
while datetime.now() < deadline:
time.sleep(POLL_SECONDS)
try:
cur = newest(col)
except Exception as e:
print(f"[watch] poll error: {e}", flush=True)
continue
if cur is not None and baseline is not None and cur > baseline:
new_docs = list(col.find(
{"jnj_folder": FOLDER, "received_at": {"$gt": baseline}},
projection={"received_at": 1, "sender.email": 1, "subject": 1,
"attachments.filename": 1},
sort=[("received_at", -1)]))
print(f"\n=== NOVE EMAILY: {len(new_docs)} (po {fmt(baseline)}) ===", flush=True)
for d in new_docs:
snd = (d.get("sender") or {}).get("email", "")
atts = [a.get("filename") for a in (d.get("attachments") or [])]
print(f"- {fmt(d.get('received_at'))} | {snd} | {d.get('subject')}"
+ (f" | prilohy: {atts}" if atts else ""), flush=True)
print(f" _id: {d.get('_id')}", flush=True)
print("=== KONEC task skoncil, vyhodnot v session ===", flush=True)
return
print("[watch] MAX_HOURS vyprselo bez noveho emailu konec.", flush=True)
if __name__ == "__main__":
main()