Estimat af POC:
Opsætning af basis projekt med swagger, Containerisering, med STAR.f
20 timer
Indførsel at puppeteer:
16 timer
Sikring af webtilgængelighed:
16 timer
Klientgenerering
16 timer
DevOps (Byg og NuGet)
12 timer
Dokumentation
8 timer
Test
16 timer
Total:
104 timer
Formål
At kunne generere webtilgængelige PDF’er på en ensartet måde, i alle forretningsdomæner, ud fra HTML.
Arkitektur
Der oprettes en isoleret container, der kun har til opgave at tage imod HTML og sende en PDF tilbage. Denne skal benytte så lightweight Linux som muligt (Alpine).
Det er et .NET-projekt, der anvender https://github.com/hardkoded/puppeteer-sharp til at starte en Chromium-instans op med den givne HTML, og ud fra det bliver en PDF genereret.
Integrationsdesign
Der udstilles et Swagger-spec samt en autogenereret klient, som publiceres til NuGet. Individuelle løsninger kan kalde PDF-generator-containeren gennem den autogenererede klient med HMTL, og få en tilsvarende PDF retur.
Implementationsperspektiv
Containerisering
Projektet skal opbygges som alle andre STAR projekter og aftage STAR.Foundation således at miljøvariable for logning mm. automatisk indføres.
Det er vigtigt at containeren holdes stateless for at sikre alle jobs kan udføres parallelt og containere kan skalere.
Puppeteer
Der anvendes puppeteer-sharp til at starte en Chromium-instans og derfra generere PDF’er
https://github.com/hardkoded/puppeteer-sharp
Følgende features i Puppeteer anvendes, der sikrer at PDF’er er opmærket:
https://github.com/puppeteer/puppeteer/pull/5337
https://github.com/puppeteer/puppeteer/issues/7509
Swagger / Client API / Publicering til NuGet
For at sikre ensartet brug af det udstillede API-endpoint skal der på baggrund af en swagger spec oprettes klient api, dette skal følge samme fremgangsmåde som i andre STAR applikationer. Dette kræver STAR.foundation med tilhørende postbuild.
Som en del af bygpipelinen skal klient api’et pakkes i en NuGet pakke og pushes til STAR’s feed. Versioneringen skal følge STAR sædvanlige versionering.
Udeståender
Logning
Er der logningskrav?
Performancemonitorering
Servicen skal understøtte performancemonitorering, og bør load-testes inden produktionssætning.
Skalerbarhed
Bør vi evt anvende eventkø (RabbitMQ)?
Caching
Hvis loadtesten ser ud til at presse containeren kan der med fordel laves caching.