z230
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user