Driftsvejledningen indeholder information der er relevant for driften af Organdonorregister-servicen (ODR), herunder oplysninger om standard placering af log- og konfigurationsfiler, eksterne afhængigheder og fejlfinding.
I produktion består Organdonorregister-servicen af følgende to komponenter (war-arkiv) der er deployet på en Wildfly applikationsserver:
Version | Dato | Ændring | Ansvarlig |
|---|---|---|---|
1.0.1 | 2018-08-17 | Initialt dokument | Trifork |
| 1.0.2 | 2018-08-31 | Ny release | Trifork |
| 1.0.3 | 2018-11-23 | Tilføjet admin endpoints | Trifork |
| 1.0.13 | 2019-25-09 | Ajourført | Trifork |
| 1.0.16 | 2020-05-25 | Opdateret slettejob | KIT |
| 1.0.17 | 2021-12-07 | Opdateret ifm inaktive cpr numre afvises | KvalitetsIT |
| 1.0.18 | 2023-09-26 | SDS-6386: ODR - oprydningsjob genbesøg | KvalitetsIT |
Servicen udstiller en række data som beskrevet i anvenderguiden. Komponenten kaldes af anvendere gennem NSP'ens DCC (afkoblingskomponenten), som viderestiller kaldet til servicens webservice-endpoint. Servicen udstiller derudover en række administrative og konfigurationsrelaterede funktionaliter.
URL | Funktionalitet | |
|---|---|---|
<server>/odr/status | Status-side for servicen. Viser om servicen fungerer korrekt, se afsnittet Overvågning. | |
<server>/odr/alarm | Alarm-side for servicen. Viser om der er valideringsfejl i servicen, se afsnittet Overvågning. | |
<server>/odr/odr | Webservice-endpoint | |
<server>/odr/odrAdmin | Webservice admin-endpoint (til brug for brugerflade) | |
<server>/odr/dksconfig | DCC auto-konfigurations API. Anvendes til konfiguration af NSP'ens DCC. | |
<server>/odr/wsdl | HTML-side med links til download af WSDL-filer i hhv. DGWS- og IDWS-udgave. | |
<server>/odr/wsdl/dgws | DGWS WSDL | |
<server>/odr/wsdl/idws | IDWS WSDL | |
<server>/odr-operations/odr-slettejob/deceased/start | Baggrundsjob til sletning af døde startes ved kald af denne url. Returnerer altid http status kode 200. Eventuelle fejl skrives i loggen. | |
<server>/odr-operations/odr-slettejob/emigrated/start | Baggrundsjob til oprydning ift. udrejste startes ved kald af denne url. Hvis person har en aktiv registrering, så tjekkes dem om denne person er udrejst. Hvis dette er tilfældet, så sættes VALIDTO-datoen til afviklingstidspunktet. Returnerer altid http status kode 200. Eventuelle fejl skrives i loggen. | |
<server>/odr-operations/odr-slettejob/status | Dette kald verificerer databaseadgang. Der kan returneres følgende fra statussnitfladen: 200: Der er adgang til databasen og jobbet kan anvendes.
| |
<server>/odr-operations/odr-slettejob/alarm | Dette kald verificerer services, eksterne kald og databaseadgange. Denne service indeholder kun data, hvis der er alarmer. 200: Komponenten fungerer og der er ingen alarmer. Følgende er et ekempel på et svar, hvor personinformationservice ikke er tilgængelig.
|
Servicen kræver ingen daglig vedligeholdelse udover sædvanlig systemovervågning.
Alt data (inkl. historiske data) for en borger fjernes 1 år efter borgerens død ved hjælp af et slettejob.
Servicen udstiller nu en status-side og en alarm-side, hvor der tidligere kun blev udstillet en samlet isAlive-side.
I den nye udgave vil status-siden kun melde fejl, hvis servicen ikke kan nå de bagved liggende databaser. Status siden vil stadig indholde informationer om version, opstartstidspunkt m.m.
Eksempel på et response fra status-siden:
HTTP/1.1 200 OK Connection: keep-alive X-Powered-By: Undertow/1 Server: WildFly/8 Transfer-Encoding: chunked Content-Type: text/plain;charset=ISO-8859-1 Date: Mon, 3 Dec 2024 03:13:23 GMT 200 OK Title: odr-service-wildfly Deployed: 2024-12-03T02:02:02.002Z Build-Date: 2024-12-03T01:01:01Z Build-Version: 1.0.x Builder: A Robot Display time: 2024-12-03T03:13:23.345Z |
Den nye alarm-side vil kun melde fejl og indeholde information, hvis bagved liggende tjeks melder fejl.
HTTP/1.1 500 Internal Server Error Connection: keep-alive X-Powered-By: Undertow/1 Server: WildFly/8 Transfer-Encoding: chunked Content-Type: text/plain;charset=ISO-8859-1 Date: Mon, 4 Dec 2024 16:32:48 GMT 203 Non-Authoritative Information from: CprExistsServiceClient Antal fejl: 56 2024-12-04T16:24:32.480: Fejl i retursvar fra CPRExist |
Status og alarm-siderne returnerer følgende HTTP statuskoder afhængig af servicens status:
Følgende årsager kan resultere i en statuskode 500 på status-siden:
Hvis status-siden giver HTTP 500 bør man checke den servicens log, som burde indeholde en detaljeret fejlmeddelelse med stacktrace.
Følgende årsager kan resultere i en statuskode 500 på alarm-siden:
Hvis alarm-siden giver HTTP 500, så vil den også sende informativ tekst med omkring fejl. Derudover bør man tjekke servicelog.
Følgende beskrivelse af logning i servicen tager udgangspunkt i standard-opsætningen. Logning konfigureres vha. konfigurationsfilerne beskrevet i installationsvejledningen.
Alle logfiler placeres i standalone/log i Wildfly.
Alle logninger er konfigureret med en rolling file appender, og indeholder derfor et postfix i filnavnet, der ikke er præsenteret i nedenstående.
Følgende tabel over logfiler beskriver, hvilke komponenter der skriver til dem:
Logfilnavn | Indhold | Komponent |
|---|---|---|
accesshandler.log | Log for accesshandler-biblioteket. | service / operations |
access.log | Access-log. | service |
audit.log | Auditlog. Indeholder logning af, hvem der har kaldt, hvilken SOAP-action der blev kaldt, hvilken person der blev kaldt for, hvordan der blev kaldt (DGWS/IDWS) og hvornår der blev kaldt. | service |
odr.log | Applikationslog for servicen, som indeholder de vigtigste systemhændelser. Root: WARN | service / operations |
nsp-kafka.log | Log for kafka-produceren, som står for skrivning til MinLog. | service |
| nsputil-sla-odr.log | SLA-log. Indeholder SLA-logninger for alle kald på servicen. Indeholder desuden SLA-logninger for servicens kald til MinLog. | service |
| server.log | Log for Wildfly-serveren. | service / operations |
Der er i ODR fire kategorier af audit logs; cpr, organdonor registrering, aktør og cpr validering
Følgende tabel viser hvilke kategorier der audit logges for hver operation i ODR.
| Operation | Kontekst | Kategorier |
|---|---|---|
| CreateOrganDonorRegistration | createOrganDonorRegistration | organdonor registrering, aktør, cpr validering |
| UpdateOrganDonorRegistration | updateOrganDonorRegistration | organdonor registrering, aktør, cpr validering |
| DeleteOrganDonorRegistration | deleteOrganDonorRegistration | cpr, aktør, cpr validering |
| GetOrganDonorRegistration | getOrganDonorRegistration | organdonor registrering, aktør, cpr validering |
| HasOrganDonorRegistration | hasOrganDonorRegistration | cpr, aktør, cpr validering |
Følgende tabeller viser hvad der audit logges for hver af de fire kategorier.
| Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| ODR | (afhængig af operation) | Følsomme | cpr | CPR på borgeren |
| Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| ODR | (afhængig af operation) | Ikke Personlig | pid | ID på registrering |
| ODR | (afhængig af operation) | Følsomme | cpr | CPR på borgeren |
| ODR | (afhængig af operation) | Ikke Personlig | version | version feltet på registrering |
| ODR | (afhængig af operation) | Ikke Personlig | modified | modified feltet på registrering |
| ODR | (afhængig af operation) | Ikke Personlig | validFrom | validFrom feltet på registrering |
| ODR | (afhængig af operation) | Ikke Personlig | validTo | validTo feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | permissionType | permissionType feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | heart | heart feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | kidneys | kidneys feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | lungs | lungs feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | corneas | corneas feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | liver | liver feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | smallIntestine | smallIntestine feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | pancreas | pancreas feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | skin | skin feltet på registrering |
| ODR | (afhængig af operation) | Følsomme | relativeAcceptanceRequired | relativeAcceptanceRequired feltet på registrering |
| Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| ODR | (afhængig af operation) | Følsomme | actor-cpr | CPR på aktør |
| ODR | (afhængig af operation) | Personlig | actor-usertype | Typen af aktør |
Følgende logges kun hvis validerings mode er sat til WARNING.
| Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| ODR | validateCpr | Følsomme | cpr-does-not-exist | Medsendt CPR nummer (hvis det ikke findes i CPR register) |
| ODR | validateCpr | Følsomme | cpr-inactive | Medsendt CPR nummer (hvis det er inaktivt) |
Der er i ODR fire brugertyper: Borger, sundhedsfaglig, system bruger og admin bruger.
Følgende tabel viser for hvilke operationer og brugertype kombinationer, der logges til minlog (x=der logges).
| Operation / brugertype | Borger | Sundhedsfaglig | System bruger | Admin bruger |
|---|---|---|---|---|
| CreateOrganDonorRegistration | x | x | x | |
| UpdateOrganDonorRegistration | x | x | x | |
| DeleteOrganDonorRegistration | x | x | x | |
| GetOrganDonorRegistration | x | x | ||
| HasOrganDonorRegistration |
Servicens baggrundsjobs bliver afviklet vha. en udstillede RestControllere, som kaldes vha. simpelt HTTP GET kald.
Dette gøres for at sikre afviklingen af baggrundsjobs i flere-node drift, hvor en loadbalancer sørger for fordeling af kald til bagvedliggende servere.
Driften vedligeholder en cron, som kalder url'er for baggrundsjobbene i et fast mønster vha. curl.
ODR har følgende baggrundsjobs:
OrganDonorDeceasedCleanup - Slettejob til sletning af afdødes registreringer
OrganDonorEmigratedCleanup - Oprydningsjov til invalidering af udrejstes registreringer
Følgende parametre bruges til styringen af forbindelsen til PersonInformation servicen, som bruges på tværs af baggrundsjobs. De kan ændres i operations.properties for ODR:
| Nøgle | Default værdi | Beskrivelse |
|---|---|---|
| personinformation.url | http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-personinformation/2024/08/01 | Den url som jobbet skal bruge, når den skal kalde servicen stamdata-personinformation. |
| personinformation.maxTotalConnections | 200 | Max antal forbindelser som HTTP Connection Manager må lave. |
personinformation.defaultMaxConnectionsPerRoute | 20 | Max antal forbindelser som HTTP Connection Manager må lave pr. rute. |
personinformation.defaultConnectionTimeoutMs | 20000 | Konfiguration af connection timeout (angives millisekunder) |
personinformation.error.tolerance | 0 | Tolerance for hvor mange fejl PersonInformation servicen må have inden den melder tilbage at den ikke virker i alarm indikatoren |
personinformation.errorcount.duration | PT10M | Angiver, hvor lang en periode, der skal kigges i efter antallet af fejl for PersonInformations alarm indikator |
Følgende parametre bruges til styringen af forbindelsen til Digital post servicen. De kan ændres i operations.properties for ODR:
| Nøgle | Default værdi | Beskrivelse |
|---|---|---|
| digitalpost.service.url | http://test1-cnsp.ekstern-test.nspop.dk:8080/digitalpost/2024/05/29/send | Den url som jobbet skal bruge, når den skal kalde servicen digital post |
| digitalpost.max.total.connections | 200 | Max antal forbindelser som HTTP Connection Manager må lave. |
| digitalpost.default.max.connections.per.route | 20 | Max antal forbindelser som HTTP Connection Manager må lave pr. rute. |
| digitalpost.default.connection.timeout.ms | 20000 | Konfiguration af connection timeout (angives millisekunder) |
| digitalpost.error.tolerance | 0 | Tolerance for hvor mange fejligital post servicen må have inden den melder tilbage at den ikke virker i alarm indikatoren |
| digitalpost.errorcount.duration | PT10M | Angiver, hvor lang en periode, der skal kigges i efter antallet af fejl forigital post alarm indikator |
Baggrundsjobbet kaldes når der skal slettes registreringer for personer der har været erklæret døde de sidste 60 dage (deletion.save.deceased)
Kommando til kald af slettejob:
curl <server>/odr-operations/odr-slettejob/deceased/start |
Følgende parametre til styring af OrganDonorDeceasedCleanup kan ændres i operations.properties for ODR:
| Nøgle | Default værdi | Beskrivelse |
|---|---|---|
deletion.desired.execution.duration.deceased | PT20S | Den tid vi ønsker at bruge på sletning ved hvert request. Tiden er ikke garanteret, da vi kun tjekker mod den efter hver StackOperation er udført. Default værdien er 20 sekunder. |
deletion.save.deceased | P12M | Den tid som skal gå før vi sletter data for en afdød person. Dette gøres så vi ikke sletter data, hvis personens status ændres til afdød og derefter tilbage til levende. |
deletion.batchsize.deceased | 1000 | Max. antal entries (f.eks. CPR) vi behandler pr. batch |
personinformation.batchsize.deceased | 100 | Max. antal CPR vi forespørger på i en enkelt request til personinformation |
Der er en max grænse for hvor lang tid jobbet må køre pr. gang (deletion.desired.execution.duration.deceased) og det kan angives her. Når jobbet har kørt den tid der er angivet, så stopper udførslen. Her efter kan jobbet kaldes igen og den vil fortsætte med processeringen, hvor jobbet stoppede sidst.
Parameteren angives som en Duration i ISO-8601 format. Dvs. eksemplet viser 20 sekunder.
Baggrundsjobbet kaldes når der skal ryddes op registreringer for person der er udrejste.
Kommando til kald af slettejob:
curl <server>/odr-operations/odr-slettejob/emigrated/start |
Følgende parametre til styring af OrganDonorEmigratedCleanup kan ændres i operations.properties for ODR:
| Nøgle | Default værdi | Beskrivelse |
|---|---|---|
deletion.desired.execution.duration.emigrated | PT20S | Den tid vi ønsker at bruge på sletning ved hvert request. Tiden er ikke garanteret, da vi kun tjekker mod den efter hver StackOperation er udført. Default værdien er 20 sekunder. |
deletion.batchsize.emigrated | 1000 | Max. antal entries (f.eks. CPR) vi behandler pr. batch |
personinformation.batchsize.emigrated | 1000 | Max. antal CPR vi forespørger på i en enkelt request til personinformation |
Der er en max grænse for hvor lang tid jobbet må køre pr. gang (deletion.desired.execution.duration.emigrated) og det kan angives her. Når jobbet har kørt den tid der er angivet, så stopper udførslen. Her efter kan jobbet kaldes igen og den vil fortsætte med processeringen, hvor jobbet stoppede sidst.
Parameteren angives som en Duration i ISO-8601 format. Dvs. eksemplet viser 20 sekunder.
Servicen indeholder ikke nogen backup-mekanismer, og dette skal derfor konfigureres på database-niveau. Der bør foretages backup af data på en forsvarlig måde, i tilfælde af behov for en genetablering af data. Disse data skal opbevares på en forsvarlig måde, jfr. regler om personhenførbare data.