Tjenesten All File Converter er utformet som et skalerbart, distribuert SaaS-system basert på en moderne asynkron Python 3.12-stabel. Arkitekturen er delt inn i uavhengige lag: mottak av nettverkshendelser, oppgaveorkestrering, isolert kjøring av tunge binærprosesser og et analytisk kretsløp.

1. Generell teknologistabel og systemarkitektur

Plattformen er bygget på prinsipper om høy gjennomstrømning (high-throughput), minimalt minneforbruk og feilsikring:

  • Telegram Bot Framework: Aiogram 3.13, som kjører i Webhook-modus med validering av hemmelige token og egendefinerte filtre for meldingslivssyklus.
  • Web-gateway og REST API: FastAPI basert på en ASGI-server Uvicorn med asynkron strømming av binærfiler (FileResponse) og bakgrunnsopprydding via BackgroundTasks.
  • Køformidler og mellomlager: Redis 7 (administrasjon av Celery-oppgaver, låsing mot tilstandskappløp, beskyttelse mot brute-force, sesjonscachelagring).
  • Bakgrunnsutfører (Task Queue): Celery 5.4 med en dedikert pool av arbeidere i en isolert converter_worker-container.
  • Database: PostgreSQL 16 med ORM-lag SQLAlchemy 2.0 (asyncpg), en pool av faste tilkoblinger (20+10 overflow) og automatisk gjentakelse av feilede transaksjoner (@db_retry).
  • Nettverkskretsløp: Tunnelering gjennom Cloudflare Zero Trust med blokkering av direkte IP-tilgang til serveren via Middleware.

2. Asynkrone køer og isolasjon av tunga utregninger (Celery + Redis)

Konvertering av mediefiler og kontorpakker skaper toppbelastning på CPU og RAM. For å sikre at behandlingen av innkommende meldinger i Telegram ikke blir blokkert under tunge operasjoner, er det implementert streng isolasjon:

  • Delegering av oppgaver til Redis: Ved valg av format registrerer Telegram-behandleren oppgaven i databasen med status PROCESSING og setter jobben i køen tasks.execute_conversion via Celery.
  • Isolert arbeidercontainer: Utførelsen av konverteringsverktøy skjer i en separat Linux-container med egne grenser for prosesstid og minne.
  • Kontroll av heng og tidsavbrudd: Kall til eksterne verktøy er pakket inn i en asynkron kontekst med streng tidskontroll (conversion_timeout_sec = 180). Hvis grensen overskrides, blir prosessen tvangsavsluttet via proc.kill(), noe som frigjør ressurser.
  • Feilsikker Fallback: Ved midlertidig utilgjengelighet for Redis-mellomleddet blir oppgaven automatisk fanget opp av den lokale asynkrone disponenten og utført direkte uten feil for brukeren.

3. Pipeline for spesialiserte konverteringsmotorer

For hver datadatatype brukes spesialiserede native verktøy og biblioteker:

  • Dokumenter og tabeller (LibreOffice): Hodeless kontorpakke (soffice --headless) for nøyaktig gjengivelse av DOCX, XLSX, PPTX, RTF, ODT til PDF-format eller tekstfiler.
  • Strømme-lyd og -video (FFmpeg): Multitrådet omkoding av videokodeker (H.264), lydkodeker (MP3, OGG Opus), uttrekking av lydspor, generering av GIF (Lanczos-filter) og kvadratisk beskjæring (1:1) av Telegram-videomeldinger.
  • Høyhastighets PDF-behandling (Poppler Utils): Verktøyene pdftotext (øyeblikkelig uttrekking av formatert tekst til UTF-8) og pdftoppm (sidespesifikk gjengivelse av PDF til rasterbilder uten LibreOffice-overhead).
  • Optisk gjenkjenning (Tesseract OCR): Nevralnettverksbasert uttrekking av trykt tekst fra skanninger og fotografier på 40+ språk.
  • Raster- og vektorgrafikk: Bibliotekene Pillow (inkludert støtte for HEIC- og AVIF-formater), CairoSVG for vektorbilder og lottie for animerte Telegram-klistremerker (.TGS).
  • Bøker, undertekster og skrifttyper: Motoren Calibre (ebook-convert), undertekstparseren pysubs2 (SRT, VTT, ASS, SSA) og skriftkompilatoren fonttools (Brotli-komprimering i WOFF2).

4. Preventiv ressursbeskyttelse (System Guard)

For å beskytte serveren mot krasj på grunn av minnemangel (OOM Killer) er det innlemmet en preventiv diagnostikktjeneste kalt System Guard. Før en fil tas imot for behandling, sjekker systemet nøkkelmetrikker for verten:

  • Ledig RAM: Minimum 500 MB ledig volum (guard_min_free_ram_mb).
  • Diskplass: Minimum 2 GB ledig plass i katalogen /tmp (guard_min_free_disk_mb).
  • Oppgavekø: Begrensning av Celery-kølengden (ikke mer enn 20 ventende oppgaver).

Hvis grensene overskrides, aktiverer tjenesten midlertidig beskyttelse (HTTP 503 / melding i chatten), noe som forhindrer serveroverbelastning og sender et øyeblikkelig varsel til administratorer i Telegram.

5. Fillivssyklus og sikkerhet (GDPR)

Arkitekturen er utformet etter Zero-Data-Footprint-modellen:

  • Brukerfiler lastes opp til et beskyttet volum tmp/conversions/ med unike prefikser basert på oppgave-ID-er.
  • Filer forblir tilgjengelige strengt innenfor arbeidssesjonen — ikke mer enn 15 minutter (900 sekunder).
  • Automatisk søppeltømming sletter kilde- og ferdige filer umiddelbart etter bekreftelse på vellykket sending til chatten eller når sesjonstidsavbruddet utløper.
  • PostgreSQL-databasen lagrer ikke binærfiler eller personlige dokumenttekster — tabellene registrerer bare anonymiserte tekniske metadata (formater, størrelser i byte, kjøretid, statuser).

6. Universelt REST API for eksterne nettjenester

Tjenesten er opprinnelig utformet som en multiplattform-backend. I tillegg til boten fungerer et fullverdig, beskyttet programmeringsgrensesnitt for nettsteder (for eksempel på Django) og tredjepartsbother:

  • GET /api/v1/formats — en dynamisk JSON-matrise over tilgjengelige konverteringsretninger, synkronisert med Google Sheets-innstillingene.
  • POST /api/v1/convert — et universelt endepunkt som godtar multipart/form-data (fil, målformat, ID for ekstern klient) og returnerer en ferdig byte-strøm i form av direkte nedlasting.
  • Autorisasjon via Bearer-tokener (WEBHOOK_REFRESH_TOKEN) med beskyttelse mot tidsangrep via secrets.compare_digest.

7. Kontrollpanel og Observability (NiceGUI + AG Grid)

Overvåking av forretningsmålinger og systemstatus er flyttet til et nativt Single-Page kontrollpanel basert på NiceGUI 2.x:

  • Interaktive tabeller AG Grid (v32+) med egendefinerte Excel-lignende avmerkingsboksfiltre (aggrid_filters.js).
  • Sanntidsovervåking av køer, forsinkelser fra API-leverandører og ping for PostgreSQL / Redis.
  • Gjennomgående datofiltrering med sømløs integrasjon av Metabase BI-dashbordet via signerte JWT-tokener.