Ce rulează în fundal
Sarcinile care rulează fără un om în pagină: cele pornite din procesul API, worker-ul cozii de ieșire, executorii și unitățile programate pe serverul firmei, cu orele lor.
Pe scurt
| Unde rulează | Ce e acolo |
|---|---|
| Procesul API | trei sarcini periodice: completarea meniului, pozele lipsă, avizele automate |
Worker-ul (aplicatii/worker) | livrarea cozii de ieșire evenimente_iesire |
| Executorii | programe de pe serverul firmei care iau lucru din API, cu rolul executor |
| Unități programate | timere pe serverul firmei: verificarea canalelor, SPV, evidența, statisticile și altele |
Tabelul orelor
Orele fixe sunt date cu fusul lor. Intervalele „la fiecare” nu depind de fus: se socotesc de la ultima rulare.
Coloana „În cod” spune ce scrie în unitățile din codul platformei. Coloana „Pe server” spune ce rulează de fapt pe serverul platformei, citit cu systemctl pe 12.11.2026. Unde cele două diferă, contează coloana „Pe server”: acolo programul a fost schimbat după nevoile restaurantului.
| Sarcină | În cod | Pe server | Ce face |
|---|---|---|---|
| Statistici social, rularea completă | zilnic, 03:20, plus până la 2 min, ora României | instalată, dar oprită | citește Facebook, Instagram, TikTok, cu 28 de zile înapoi |
| Statistici social, rularea ușoară | la 30 min | zilnic, 03:30, ora României | contul, seriile și postările din ultimele 7 zile |
| Facturi primite din SPV | luni–sâmbătă, 08:30, plus până la 2 min, ora României | unitatea din cod nu e instalată; rulează în locul ei o sincronizare SPV zilnică, la 03:00, ora României, cu un program din afara codului platformei | aduce facturile primite din ANAF e-Factura |
| Evidența, jobul zilnic | zilnic, 06:10, ora României | nu e instalată | import FGO și legarea automată a recurențelor |
| Registru ← FGO | la minutul 07 și 37 al fiecărei ore, plus până la 1 min | nu e instalată | se amână singur când serverul e încărcat peste 6 |
| Specificațiile calculatoarelor | zilnic, 03:00, ora PC 1, ca sarcină programată pe PC 1, nu pe server | nu rulează pe server: serverul doar primește fișierul scris de PC 1 | model, procesor, RAM, disc și sistem pentru fișa tehnică, doar citire, fără stare live |
| Conexiunea canalelor | la 1 min | la 1 min | starea reală Wolt, Bolt, Glovo, Google, Pinterest, pentru Tabel Produse |
| Verificarea canalelor | la 3 min | la 5 min | citește canalele și scrie bifele din tabelul Produse |
| la 5 min | o dată pe oră, la minutul 20, ora României | citește pinii și scrie bifa Pinterest în tabel | |
| Colectorul Jurnal live | la 30 s | nu e instalată | ce au făcut timerele și executorii, spre POST /v1/jurnal-live |
| Oglinda pe NAS | la 2 min | nu e instalată | copiază codul pe NAS, doar fast-forward |
| Finder, anunțuri | la 30 min | zilnic, 03:30, ora României | colectorul de anunțuri: Storia, OLX, Publi24, Imobiliare, Anunțul |
| Finder, joburi | la 6 h | instalată, dar oprită | colectorul de anunțuri de joburi |
| Avize automate | după 20:00, verificat la 10 min, ora României | firmele și contul sunt setate pe API-ul de producție; dacă trecerile rulează: neverificat | copiază avizele zilei pe ziua următoare; duminica e exclusă |
| Plasa pozelor lipsă | la 30 min | neverificat | pornește generarea pozei pentru produsele active fără poză |
| Completarea meniului | la 60 min | neverificat | completează ce lipsește din fișele produselor |
„Nu e instalată” înseamnă că unitatea nu există pe serverul platformei; dacă rulează pe altă mașină nu se poate vedea din cloud, deci acolo e neverificat. Ultimele trei rânduri rulează în procesul API și pornesc doar cu variabile din fișierul de setări al serverului, care nu se poate citi fără drept de administrator: de aceea sunt marcate „neverificat”.
Serverul rulează pe UTC (citit pe server: Etc/UTC). De aceea timerele cu oră fixă își scriu fusul Europe/Bucharest, iar trecerea la ora de vară sau de iarnă se face singură.
Sarcinile din procesul API
Cele trei pornesc după ce API-ul începe să asculte. Fiecare e oprită până primește lista de firme din mediu. Trecerile nu se suprapun: dacă una încă rulează, următoarea e sărită.
| Sarcină | Pornită de | Interval implicit | Condiții |
|---|---|---|---|
| Completarea meniului | pornesteCompletarePeriodica | COMPLETARE_MENIU_MINUTE = 60 | COMPLETARE_MENIU_FIRME; fără GEMINI_API_KEY se copiază doar de la produsul similar |
| Plasa pozelor lipsă | pornestePozeLipsaPeriodic | POZE_LIPSA_MINUTE = 30 | COMPLETARE_MENIU_FIRME și POZA_AUTOMATA_CONT; cel mult POZE_LIPSA_LIMITA = 5 porniri pe trecere |
| Avizele automate | pornesteAvizeAutomate | AVIZE_AUTO_MINUTE = 10 | AVIZE_AUTO_FIRME și AVIZE_AUTO_CONT |
- Completarea scrie doar ce lipsește. Alergenii se scriu numai unde sunt „necompletați”, deci ce a declarat omul nu se suprascrie. Schimbările apar în
eventspe un cont tehnic, nu pe un om. - Pozele lipsă nu dublează o generare: un produs cu job activ sau cu o generare în ultimele 6 ore e sărit.
- Avizele se copiază după ora 20 din București, din ultima zi cu avize, pe ziua de mâine. Duminica nu e nici zi țintă, nici sursă: luni se copiază sâmbăta. Copierea e idempotentă, deci verificarea la 10 minute nu creează dubluri.
O firmă care eșuează nu le oprește pe celelalte: eroarea se scrie în jurnalul API-ului, iar trecerea continuă.
Worker-ul: coada de ieșire
Worker-ul livrează evenimentele din tabelul evenimente_iesire (outbox) către o adresă dată în TINTA_URL.
| Pas | Ce face |
|---|---|
| La pornire | numără firmele vizibile; iese cu codul 2 dacă vede 0 firme (RLS), 3 dacă nu are drept de citire, 1 la altă eroare |
| O trecere | pentru fiecare firmă ia cel mult 20 de evenimente și le livrează pe rând |
| Livrarea | POST cu Idempotency-Key = id-ul evenimentului; 2xx = livrata, altfel reîncercare |
| Eșecul | după 5 încercări evenimentul devine esuata și nu se mai reia |
| Blocajul | un eveniment rămas in_lucru peste 10 minute redevine eligibil |
| Oprirea | la SIGTERM termină evenimentul în curs și iese |
Pauza dintre treceri e INTERVAL_MS, de cel puțin 100 ms. Timpul de livrare, TIMEOUT_MS, e implicit 10 secunde și trebuie să fie sub cele 10 minute de expirare, altfel worker-ul nu pornește.
Codul worker-ului mai are o funcție de reconciliere: compară prețul și disponibilitatea așteptate cu cele citite pe Wolt, Bolt și Glovo și scrie diferențele ca evenimente reconciliere.corectie. Funcția nu e chemată încă din bucla worker-ului, iar unitatea care pornește worker-ul nu e în codul platformei. Pe serverul platformei nu rulează nicio unitate de worker pentru coada de ieșire (citit 12.11.2026).
Executorii
Un executor este un program de pe serverul firmei care vorbește cu platforma doar prin API, cu un jeton de serviciu cu rolul executor. Jetoanele se citesc din JETOANE_SERVICIU și dintr-un dosar de jetoane. Un fișier stricat e sărit, ca să nu oprească API-ul.
| Rută | Cine o folosește |
|---|---|
GET /v1/facturi-din-bon/coada, …/coada/{id}/ia, …/coada/{id}/rezultat, …/cereri/{id}/emis-in-dls | executorul facturilor din bon (DLS) |
POST /v1/spv/sincronizeaza | timerul SPV |
POST /v1/jurnal-live | colectorul Jurnal live |
POST /v1/executori/social-statistici | colectorul de statistici social |
POST /v1/wtso/proiecte, …/rulare/preia, …/rulare/{id}/log | worker-ul de traducere și SEO al site-urilor |
POST /v1/flux-lant/stare | starea lanțului de produse |
POST /v1/fidelitate/potrivire | potrivirea bonurilor de fidelitate |
POST /v1/agentie/scraper/stare | starea scraperului agenției |
O cerere trece dacă oricare identitate a ei are rolul cerut: un jeton de executor valid nu e umbrit de un cookie de om. Modelul cozii este descris în Sisteme externe și executori.
Pornite la cerere, nu la oră
| Unitate | Pornește când |
|---|---|
| Executorul săptămânii Meniului Zilei | apare o cerere nouă de săptămână sau confirmarea Framer (unitate .path) |
| Puntea asistentului | rulează mereu și repornește la 3 s după o cădere; cel mult 2 cereri în paralel, 55 s pe cerere |
| Puntea imaginilor | rulează mereu și repornește la 3 s; o cerere odată, 180 s pe cerere |
Pe serverul platformei, niciuna dintre aceste trei unități nu e instalată cu numele din cod (citit 12.11.2026). Unde rulează: neverificat.
Patru timere sunt oprite deliberat și pornesc acum doar la cerere: executorii reducerilor Wolt și Glovo, tabul portalului și relogarea Bolt. Lipsa lor de pe server nu este o defecțiune.