Skip to main content

Passzív mappa- és címkerendezés

A passzív rendezés a mentett mappa- és címkeszabályokat háttérmunkában értékeli ki. Egy futás a kiválasztott üzenetek egyetlen mentett kötege. Minden üzenethez tartozik egy munkarekord.

A tartós befogadáshoz, az outboxhoz, a lease-ekhez és a fencinghez lásd: háttérmunka-fogalmak. A rendszer a mappa- és címkecélokat párhuzamosan értékeli ki. A szolgáltatói módosítások a rendezett postafiók-művelet útvonalán futnak. A postafiókhoz előbb készítsd elő a Graph-hozzáférést vagy a Google-hozzáférést.

Beállítás és rendezés indítása​

Nyisd meg a Rendezés lehetőséget egy mappa- vagy címkeszerkesztőben. Állíts be pozitív és negatív feltételeket. Kapcsold be a célt. Ezután mentsd a rendezési szabályokat. A régi users_folders regex-mezők, a leírások, a Qdrant-hasonlóság és a régi mappafa-visszalépés nem vesznek részt ebben a szabály-kiértékelőben.

Az oldalsáv Rendezés oldala külön vezérli a mappa-rendezést, a címkerendezést és az automatikus beérkezés-feldolgozást. Az automatikus mód engedélyezett modellt igényel. Az adminisztrátorok állítják be a bérlő modelljét, az érvelési és a kontextusalapértelmezéseket. A személyes felülírásokhoz külön jogosultság kell. Lásd: rendezési modell alapértelmezései.

Kézi futtatáshoz, ha csak olcsó feltételek vannak, nincs szükség modellre. Szemantikus feltételhez mindig kell modell.

Az alacsonyabb mappaprioritás-szám fut előbb. Egyenlőségnél a célazonosító dönt. Ez nem változtatja meg az oldalsáv sorrendjét. Csak az első illeszkedő mappa nyer. Az összes illeszkedő címke a teljes beszélgetésre vonatkozik, a meglévő címkék megtartásával.

Kézi munkánál jelölj ki üzeneteket egy mappa-, keresési, összes-mappa- vagy címkenézetben, majd indítsd a rendezést. Egy beszélgetéssor csak az adott nézet mappa- és dátumhatárán belüli üzenetekig bomlik ki. A kifejezett keresési vagy címkealapú üzenetkijelölés nem bomlik ki más beszélgetéstagokra. Üres kijelölés soha nem indít postafiók-szintű munkát.

Szabályszemantika​

MezőFeltételek
feladó, másolat (cc)Pozitív és negatív névjegylista a mentett névjegy-e-mail-címekkel. Bármely negatív névjegyegyezés megvétózza a célt
tárgy, törzsSzó szerinti szöveg, reguláris kifejezések és természetes nyelvi jelentésfeltételek
dátumNyitott abszolút dátumhatárok vagy relatív naptári napok

A Trim eltávolítja a szélső üres karaktereket (szóközöket, tabulátorokat, sortöréseket) a minta elején és végén. Nem csonkítja a levelet. A mintavezérlők külön állítják be a kis- és nagybetűket, az ékezeteket, a teljes szó illesztését és a regex-módot. A szó szerinti illesztés a mintát szövegként kezeli. A teljes szó határai Unicode-betűket, számokat és aláhúzást tartalmaznak.

A regex a Node Unicode-szintaxisát használja, 50 ms-os végrehajtási időkorláttal. Mentéskor a rendszer jelzi a szintaxishibákat. Az időtúllépés hibásként zárja a munkát, és nem ad vissza „nincs egyezés” eredményt.

A listák alapértelmezés szerint VAGY-kapcsolattal működnek. Az üres lista nem ír elő feltételt. A pozitív és a negatív lista hossza eltérhet. A beállított mezők alapértelmezés szerint ÉS-kapcsolattal működnek.

OperátorJelentés
Pozitív lista VAGYLegalább egy elemnek illeszkednie kell
Pozitív lista ÉSMinden elemnek illeszkednie kell
Negatív lista VAGYEgy illeszkedő elem blokkolja a célt
Negatív lista ÉSA célt csak akkor blokkolja, ha minden elem illeszkedik
Pozitív minta/jelentés VAGYA pozitív oldalt bármelyik beállított feltételtípus kielégítheti
Negatív minta/jelentés ÉSMindkét beállított típusnak át kell mennie a kizárási ellenőrzésen
Negatív minta/jelentés VAGYLegalább egy beállított típusnak át kell mennie a kizárási ellenőrzésen

Példa: egy tárgy, amely illeszkedik a „számla” szóra, akkor is elbukik, ha a törzse illeszkedik a kizárt „gáz” kifejezésre. Ez globális vétó: egy másik pozitív mező nem írhatja felül a kizárást.

A pozitív eredmény és a sikeres kizárási ellenőrzés mindig ÉS-kapcsolattal kombinálódik. A kiszámított kizárás megvétózza a célt. Például a subject || body nem kerülheti meg a negatív törzs-eredményt. A negatív típus-operátor különbözik a negatív lista operátorától.

A speciális mód a sender, cc, subject, date, body, &&, || elemeket és zárójeleket fogadja el. Példa: sender && (subject || body). A kifejezés legfeljebb 512 karakter lehet, és nem használ eval-t. Minden beállított mezőnek szerepelnie kell a kifejezésben.

A nem beállított mezők érvénytelenek. A speciális mód kikapcsolása visszaállítja az alapértelmezett operátorokat.

A VAGY szélesíti a pozitív kiválasztást. Ha a tárgyak nem egyértelműek, tartsd meg a kötelező törzsfeltételt. A szerkesztő figyelmeztet erre.

A dátumok a Europe/Budapest naptári napokat és a futás rögzített kezdőnapját használják. Október 11-én az „5 napnál régebbi” feltétel október 6. 00:00 előtti időt jelenti. Az újabb irány ugyanebben a határban kezdődik. Az abszolút after és before határok kizárják a határnapokat. A nyári időszámítás-váltás nem használ egyszerű 24 órás kivonást.

Példa: egy szerverdíj pozitív egyezése akkor is elbukik, ha egy streaming kizárás illeszkedik. Egy együttes villany- és gázszámla is elbukik, ha a gáz ki van zárva. Ezek a kizárások szándékosak, nem modell-felülírások.

Kiértékelés és hibák​

Az olcsó ellenőrzések ebben a sorrendben futnak: feladó, másolat, tárgy, dátum, törzs. Csak a feloldatlan tárgy- és törzs-jelentésellenőrzések hívják a modellt. Egy mezőn belül a rövidebb olcsó lista fut előbb. Egyenlő hosszúság esetén az ÉS előnyt élvez. A szó szerinti minták a regex előtt futnak.

A rövidzár-kiértékelés elkerüli a felesleges következtetést.

A törzsolvasási hibák, a regex-hibák, az érvénytelen modellkimenetek és a kötelező következtetési hibák soha nem számítanak sikeres kizárásnak. A munka hibás vagy blokkolt állapotba kerül. Egy bizonytalan, magasabb prioritású mappa nem adja át csendben az alacsonyabb találatnak. Egy mappa- vagy címkekiértékelési hiba megakadályozza a részleges módosítást az adott üzenetnél. Más üzenetek már elvégzett műveletei megmaradnak.

Az átmeneti modell- vagy szolgáltatóhiba legfeljebb öt kísérletet kap, 2, 10, 30 és 60 másodperces várakozással. Korlátozásnál legalább a szolgáltató Retry-After értékét tiszteli a rendszer. A konfigurációs és jogosultsági hibák nem kapnak automatikus szállítási újrapróbálást.

Tartós munka és megerősítés​

Az új, nem piszkozat-beérkezést rögzítő tranzakció csak egy deduplikált beérkezési szándékot ment. Nem futtat következtetést. A delta-visszajátszás és az alkalmazás saját áthelyezései nem hoznak létre újabb beérkezést. Az EmailScheduler a meglévő háttérszolgáltatásban végzi a befogadást és a helyreállítást.

A befogadás azt jelenti, hogy a rendszer elfogadja a futást, és elmenti a művelet aláírt bizonyítékát. Ellenőrzi a postafiók jelenlegi tulajdonosát, a mail.sorting.manage és a mail.crud jogosultságot, szükség esetén pedig a modellhozzáférést. Az automatikus befogadáshoz mentett hozzájárulás és friss jogosultsági pillanatkép kell. A mentett, aláírt bizonyíték azonosítja a kiválasztott üzeneteket, a szabályokat, a modellt, a kezdési időt és a postafiókot. Postafiókváltás nem viheti át a futást.

Az üzenetenkénti sorting_work rekordok tárolják az állapotot, a kísérleteket, az eredményt, a hibát, az újrapróbálási időt és a szinkronizálási művelet-azonosítókat. A munkazár és a művelet, valamint az outbox létrehozása ugyanabban a tranzakcióban történik. A helyreállítás egyezteti az elfogadott módosítást, mielőtt újabb beküldést fontolna meg.

MunkaállapotJelentés
preparedTartós munka, amely végrehajtásra vár. A beérkezés ez előtt is sorba állhat
runningA worker kiértékeli az üzenetet
retry-waitVárakozás átmeneti szolgáltatóhiba után
awaiting-syncA kiértékelés befejeződött, a szolgáltatói megerősítés még hiányzik
completedNincs szükséges változtatás, vagy minden kért távoli művelet megerősítve
no-matchEgyetlen cél sem illeszkedett
failed / blockedLátható hiba, nem sikeres és nem „nincs egyezés”
cancelledA munka a végrehajtás előtt leállt

A futásállapotok: futó, szüneteltetett, megszakított és befejezett. A Befejezett azt jelenti, hogy minden munka végső állapotba került. Nem jelenti azt, hogy minden elem sikeres volt. A felület külön mutatja a hibákat és a függőben lévő megerősítéseket.

A Szüneteltetés megőrzi a hátralévő munkát. A Folytatás ugyanazt a futást viszi tovább. A megszakítás lezárja a még el nem indult munkát, és megtartja a követést a beküldött műveleteknél. A sikertelen munka újrapróbálása új következtetési kísérletsorozatot indít, és megtartja a megerősített távoli hatásokat. A bizonytalan vagy felülírt hatásokat előbb egyeztetni kell. Egy postafiókhoz legfeljebb egy futó vagy szüneteltetett futás tartozhat, az újrapróbálásokat is beleértve.

A szívverés jelzi, hogy a worker aktív. A kísérlet-fencing elutasítja a lejárt worker, vagy egy korábbi kísérlet módosításait. Együtt megakadályozzák, hogy egy lejárt worker újabb módosítást küldjön be. A helyreállítás 120 másodperces elavulási küszöböt használ. A szétosztás a rendelkezésre álló konténermemóriát veszi figyelembe: 128 MiB tartalékot és 256 MiB-ot workerenként, legalább egy workerrel. A mappa- és címkekiértékelés párhuzamos marad.

A beszélgetési kategóriák szétosztása megőrzi az üzenetenkénti sikereket. Azonos állapot és azonos másodpercben lévő Graph-időbélyeg megerősíthet egy szándékot. Egy eltérő állapot ugyanabban az időpontban nem írhatja felül az újabb szándékot. Az alkalmazás célzott GET kérést küldhet az ellenőrzőponttal rendelkező vagy változatlan kategóriákra. Ilyen ellenőrzéshez nem küld újabb PATCH kérést.

API és felületfrissítés​

A BFF /api/sorting?accountId=… endpointja a backend /sync/sorting endpointját proxyzza.

KérésEredmény
GET áttekintésBeállítások, engedélyezett modellek, szabályok, célnevek, a legutóbbi 50 futás és legfeljebb 50 sorban álló vagy blokkolt beérkezés
GET runId-val, opcionális cursor-ralFutási összefoglaló és 100 munkaelem oldalanként
POST műveletrule, settings, start, pause, resume, cancel, retry

A régi autonomousSort és az együzenetes sortEmail indítások is tartós futásokat használnak. Üres kijelölést a rendszer elutasít. Az olvasási és kezelési jogosultságok eltérnek. A csak olvasható postafiókok elutasítják a módosításokat.

A felület a process.progress eseményeken és újracsatlakozáskor olvassa az állapotot. Az aktív levéllistában a rendezésvezérlő 3 másodpercenként olvassa a tartós futási állapotot. Az áttekintés 5 másodpercenként frissül. A részletek 3 másodpercenként frissülnek. Újracsatlakozáskor az API-t is olvassa. Ezek az útvonalak elveszett befejezési esemény után is a tartós állapotot tekintik irányadónak.

Az automatikus befogadás hibái a Rendezés oldalon jelennek meg. A hozzáférés vagy a beállítások javítása után mentsd újra a bekapcsolt automatikus beállításokat, hogy a blokkolt beérkezések újra sorba kerüljenek.