5545f05eee
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
================================================================================
|
|
Nazev: create_email_indexes_v1.0.py
|
|
Verze: 1.0
|
|
Datum: 2026-06-08
|
|
Autor: Vladimir Buzalka (asistovano Claude)
|
|
Popis: Vytvori slozene indexy na kolekci emailu vbuzalka@its.jnj.com
|
|
v databazi `emaily` pro rychle vyhledavani:
|
|
- { recipients.email: 1, received_at: -1 } -> prijemce + datum
|
|
- { sender.email: 1, received_at: -1 } -> odesilatel + datum
|
|
Indexy jsou v pozadi (background) a idempotentni (create_index
|
|
nic neudela, kdyz uz existuji se stejnym klicem/nazvem).
|
|
Pozn.: Pred spustenim ukazat nahled; vytvoreni indexu je nedestruktivni.
|
|
================================================================================
|
|
"""
|
|
|
|
import sys
|
|
from datetime import datetime
|
|
|
|
from pymongo import MongoClient, ASCENDING, DESCENDING
|
|
|
|
MONGO_HOST = "192.168.1.76"
|
|
DB_NAME = "emaily"
|
|
COLLECTION = "vbuzalka@its.jnj.com"
|
|
|
|
INDEXES = [
|
|
{
|
|
"name": "recipients.email_1_received_at_-1",
|
|
"keys": [("recipients.email", ASCENDING), ("received_at", DESCENDING)],
|
|
},
|
|
{
|
|
"name": "sender.email_1_received_at_-1",
|
|
"keys": [("sender.email", ASCENDING), ("received_at", DESCENDING)],
|
|
},
|
|
]
|
|
|
|
|
|
def log(msg: str) -> None:
|
|
print(f"[{datetime.now():%Y-%m-%d %H:%M:%S}] {msg}", flush=True)
|
|
|
|
|
|
def main() -> int:
|
|
log(f"Pripojuji se k MongoDB ({MONGO_HOST}) ...")
|
|
client = MongoClient(MONGO_HOST, serverSelectionTimeoutMS=5000)
|
|
client.admin.command("ping")
|
|
coll = client[DB_NAME][COLLECTION]
|
|
log(f"OK. Kolekce {DB_NAME}.{COLLECTION} ma {coll.estimated_document_count():,} dokumentu.")
|
|
|
|
log("Stavajici indexy:")
|
|
for name, spec in coll.index_information().items():
|
|
log(f" - {name}: {spec.get('key')}")
|
|
|
|
for idx in INDEXES:
|
|
log(f"Vytvarim index '{idx['name']}' ...")
|
|
created = coll.create_index(idx["keys"], name=idx["name"], background=True)
|
|
log(f" -> hotovo: {created}")
|
|
|
|
log("Indexy po vytvoreni:")
|
|
for name, spec in coll.index_information().items():
|
|
log(f" - {name}: {spec.get('key')}")
|
|
|
|
client.close()
|
|
log("Hotovo.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|