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örzs | Szó szerinti szöveg, reguláris kifejezések és természetes nyelvi jelentésfeltételek |
| dátum | Nyitott 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átor | Jelentés |
|---|---|
| Pozitív lista VAGY | Legalább egy elemnek illeszkednie kell |
| Pozitív lista ÉS | Minden elemnek illeszkednie kell |
| Negatív lista VAGY | Egy illeszkedő elem blokkolja a célt |
| Negatív lista ÉS | A célt csak akkor blokkolja, ha minden elem illeszkedik |
| Pozitív minta/jelentés VAGY | A pozitív oldalt bármelyik beállított feltételtípus kielégítheti |
| Negatív minta/jelentés ÉS | Mindkét beállított típusnak át kell mennie a kizárási ellenőrzésen |
| Negatív minta/jelentés VAGY | Legalá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állapot | Jelentés |
|---|---|
prepared | Tartós munka, amely végrehajtásra vár. A beérkezés ez előtt is sorba állhat |
running | A worker kiértékeli az üzenetet |
retry-wait | Várakozás átmeneti szolgáltatóhiba után |
awaiting-sync | A kiértékelés befejeződött, a szolgáltatói megerősítés még hiányzik |
completed | Nincs szükséges változtatás, vagy minden kért távoli művelet megerősítve |
no-match | Egyetlen cél sem illeszkedett |
failed / blocked | Látható hiba, nem sikeres és nem „nincs egyezés” |
cancelled | A 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és | Eredmény |
|---|---|
| GET áttekintés | Beá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-ral | Futási összefoglaló és 100 munkaelem oldalanként |
| POST művelet | rule, 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.