Servis All File Converter je dizajniran kao skalabilni distribuirani SaaS sistem baziran na modernom asinhronom Python 3.12 steku. Arhitektura je podijeljena na nezavisne slojeve: prijem mrežnih događaja, orkestracija zadataka, izolovano izvršavanje teških binarnih procesa i analitička kontura.

1. Opšti stek tehnologija i sistemska arhitektura

U osnovu platforme su ugrađeni principi visokih performansi (high-throughput), minimalne potrošnje memorije i zaštite od grešaka:

  • Telegram Bot Framework: Aiogram 3.13, koji radi u Webhook režimu sa validacijom tajnih tokena i prilagođenim filterima životnog ciklusa poruka.
  • Web gateway i REST API: FastAPI baziran na ASGI serveru Uvicorn sa asinhronom striming isporukom binarnih fajlova (FileResponse) i pozadinskim čišćenjem preko BackgroundTasks.
  • Broker reda čekanja i keš: Redis 7 (upravljanje Celery zadacima, zaključavanja protiv stanja trke - race condition, zaštita od brute-force napada, keširanje sesija).
  • Pozadinski izvršilac (Task Queue): Celery 5.4 sa izdvojenim pool-om radnika u izolovanom kontejneru converter_worker.
  • Baza podataka: PostgreSQL 16 sa ORM slojem SQLAlchemy 2.0 (asyncpg), pool-om trajnih konekcija (20+10 overflow) i automatskim ponovnim pokušajem neuspjelih transakcija (@db_retry).
  • Mrežna kontura: Tuneliranje preko Cloudflare Zero Trust sa blokiranjem direktnog IP pristupa serveru putem Middleware-a.

2. Asinhroni redovi čekanja i izolacija teških izračunavanja (Celery + Redis)

Konverzija medijskih fajlova i paketa kancelarijskih dokumenata stvara vršna opterećenja na CPU i RAM. Da se proces obrade dolaznih poruka u Telegramu ne bi blokirao tokom teških operacija, implementirana je stroga izolacija:

  • Delegiranje zadataka u Redis: Prilikom izbora formata, Telegram obrađivač registruje zadatak u bazi podataka sa statusom PROCESSING i stavlja zadatak u red čekanja tasks.execute_conversion preko Celery-ja.
  • Izolovani kontejner radnika: Izvršavanje uslužnih programa za konverziju dešava se u zasebnom Linux kontejneru sa sopstvenim ograničenjem procesorskog vremena i memorije.
  • Kontrola zastoja i vremenska ograničenja (Timeouts): Pozivi spoljnih uslužnih programa su upakovani u asinhroni kontekst sa striktnom kontrolom vremena (conversion_timeout_sec = 180). U slučaju prekoračenja limita, proces se primarno prekida preko proc.kill(), čime se oslobađaju resursi.
  • Rezervna opcija (Fallback) otporna na greške: U slučaju privremene nedostupnosti Redis brokera, zadatak automatski preuzima lokalni asinhroni dispečer i izvršava se direktno bez prekida za korisnika.

3. Pipeline specijalizovanih mašina za konverziju

Za svaki tip podataka koriste se usko specijalizovani izvorni uslužni programi i biblioteke:

  • Dokumenti i tabele (LibreOffice): Kancelarijski paket bez grafičkog okruženja (headless) (soffice --headless) za precizno renderovanje DOCX, XLSX, PPTX, RTF, ODT u PDF format ili tekstualne fajlove.
  • Audio i video streaming (FFmpeg): Višenitno prekodiranje video kodeka (H.264), audio kodeka (MP3, OGG Opus), ekstrakcija zvučnih zapisa, generisanje GIF-ova (Lanczos filter) i kvadratno kadriranje (1:1) Telegram video poruka.
  • Visokoučinska obrada PDF-a (Poppler Utils): Uslužni programi pdftotext (trenutna ekstrakcija formatiranog teksta u UTF-8) i pdftoppm (stranpočno renderovanje PDF-a u rasterske slike bez dodatnih troškova LibreOffice-a).
  • Optičko prepoznavanje znakova (Tesseract OCR): Neuronsko izvlačenje štampanog teksta sa skeniranih dokumenata i fotografija na preko 40 jezika.
  • Rasterska i vektorska grafika: Biblioteke Pillow (uključujući podršku za HEIC i AVIF formate), CairoSVG za vektorske slike i lottie za animirane Telegram stikere (.TGS).
  • Knjige, titlovi i fontovi: Calibre mašina (ebook-convert), parser titlova pysubs2 (SRT, VTT, ASS, SSA) i kompajler fontova fonttools (Brotli kompresija u WOFF2).

4. Preventivna zaštita resursa (System Guard)

Radi zaštite od pada servera usljed nedostatka memorije (OOM Killer), implementiran je servis preventivne dijagnostike System Guard. Prije prihvatanja fajla na obradu, sistem provjerava ključne metrike hosta:

  • Slobodna RAM memorija: Minimum 500 MB slobodnog kapaciteta (guard_min_free_ram_mb).
  • Prostor na disku: Minimum 2 GB slobodnog prostora u direktorijumu /tmp (guard_min_free_disk_mb).
  • Red čekanja zadataka: Ograničenje dužine Celery reda (ne više od 20 zadataka na čekanju).

U slučaju prekoračenja limita, servis privremeno uključuje zaštitu (HTTP 503 / poruka u čet-u), sprečavajući preopterećenje servera i šaljući trenutno obavještenje (alert) administratorima u Telegram.

5. Životni ciklus fajlova i bezbjednost (GDPR)

Arhitektura je projektovana po modelu Zero-Data-Footprint:

  • Korisnički fajlovi se učitavaju u zaštićeni volumen tmp/conversions/ sa jedinstvenim prefiksima baziranim na identifikatorima zadataka.
  • Fajlovi ostaju dostupni striktno u okviru radne sesije — ne duže od 15 minuta (900 sekundi).
  • Automatski sakupljač smeća briše izvorne i gotove fajlove odmah nakon potvrde uspješnog slanja u čet ili po isteku tajmauta sesije.
  • PostgreSQL baza podataka ne čuva binarne fajlove niti lične tekstove dokumenata — u tabelama se evidentiraju samo anonimizovani tehnički metapodaci (formati, veličine u bajtovima, vrijeme rada, statusi).

6. Univerzalni REST API za spoljne web servise

Servis je od početka dizajniran kao multiplatformska pozadina (backend). Pored bota, funkcioniše i potpuno zaštićeni programski interfejs za web stranice (na primjer, na Django-u) i botove trećih strana:

  • GET /api/v1/formats — dinamička JSON matrica dostupnih pravaca konverzije, sinhronizovana sa podešavanjima Google tabela.
  • POST /api/v1/convert — univerzalni krajnji tačka (endpoint) koja prihvata multipart/form-data (fajl, ciljni format, ID spoljnog klijenta) i vraća spreman protok bajtova u vidu direktnog preuzimanja.
  • Autorizacija preko Bearer tokena (WEBHOOK_REFRESH_TOKEN) sa zaštitom od napada zasnovanih na vremenu (timing attacks) kroz secrets.compare_digest.

7. Upravljačka ploča i Observability (NiceGUI + AG Grid)

Praćenje poslovnih pokazatelja i stanja sistema prebačeno je u izvornu Single-Page upravljačku ploču zasnovanu na NiceGUI 2.x:

  • Interaktivne tabele AG Grid (v32+) sa prilagođenim Excel-style filterima sa poljima za potvrdu (aggrid_filters.js).
  • Praćenje redova čekanja, kašnjenja API provajdera i PostgreSQL / Redis pinga u realnom vremenu.
  • Sveobuhvatno filtriranje po datumima sa besprekornom integracijom Metabase BI komandne table putem potpisanih JWT tokena.