Overblik

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:

Ændringslog

Version

Dato

Ændring

Ansvarlig

1.0.1

2018-08-17

Initialt dokument

Trifork

1.0.22018-08-31Ny releaseTrifork
1.0.32018-11-23Tilføjet admin endpointsTrifork
1.0.132019-25-09AjourførtTrifork
1.0.162020-05-25Opdateret slettejobKIT
1.0.172021-12-07Opdateret ifm inaktive cpr numre afvisesKvalitetsIT
1.0.182023-09-26SDS-6386: ODR - oprydningsjob genbesøgKvalitetsIT

Funktionalitet

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.

Direkte kald på service-komponenten

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/status

Dette kald verificerer databaseadgang.

Der kan returneres følgende fra statussnitfladen:

200: Der er adgang til databasen og jobbet kan anvendes.
5xx: Komponenten melder at den ikke kan anvendes.

HTTP/1.1 200 OK
Database : OK 


<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.
5xx: Komponenten melder at den ikke kan anvendes.

Følgende er et ekempel på et svar, hvor personinformationservice ikke er tilgængelig.

HTTP/1.1 500 Internal Server Error
Baggrundsjobbet StackedOperationsService fejlede sidst det blev kørt. Problemet var: Data for CPR-nummeret kunne ikke findes, fordi kaldet til PersonInformation-servicen returnerede en uventet statuskode: 409.
Person Information servicen har fejlet flere gange end tilladt i en given periode.


Daglig drift

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.

Overvågning

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

HTTP statuskode

Status og alarm-siderne returnerer følgende HTTP statuskoder afhængig af servicens status:

Fejlfinding

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.

Logning

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
org.springframework.core: INFO
dk.sundhedsdatastyrelsen.organdonor: INFO

service / operations

nsp-kafka.log

Log for kafka-produceren, som står for skrivning til MinLog.

service

nsputil-sla-odr.logSLA-log. Indeholder SLA-logninger for alle kald på servicen. Indeholder desuden SLA-logninger for servicens kald til MinLog.service
server.logLog for Wildfly-serveren.

service / operations

Auditlog

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.

OperationKontekstKategorier
CreateOrganDonorRegistrationcreateOrganDonorRegistrationorgandonor registrering, aktør, cpr validering
UpdateOrganDonorRegistrationupdateOrganDonorRegistrationorgandonor registrering, aktør, cpr validering
DeleteOrganDonorRegistrationdeleteOrganDonorRegistrationcpr, aktør, cpr validering
GetOrganDonorRegistrationgetOrganDonorRegistrationorgandonor registrering, aktør, cpr validering
HasOrganDonorRegistrationhasOrganDonorRegistrationcpr, aktør, cpr validering


Følgende tabeller viser hvad der audit logges for hver af de fire kategorier.

cpr

KomponentKontekstTypeNøgleInformation
ODR(afhængig af operation)FølsommecprCPR på borgeren

organdonor registrering

KomponentKontekstTypeNøgleInformation
ODR(afhængig af operation)Ikke PersonligpidID på registrering
ODR(afhængig af operation)FølsommecprCPR på borgeren
ODR(afhængig af operation)Ikke Personligversionversion feltet på registrering
ODR(afhængig af operation)Ikke Personligmodifiedmodified feltet på registrering
ODR(afhængig af operation)Ikke PersonligvalidFromvalidFrom feltet på registrering
ODR(afhængig af operation)Ikke PersonligvalidTovalidTo feltet på registrering
ODR(afhængig af operation)FølsommepermissionTypepermissionType feltet på registrering
ODR(afhængig af operation)Følsommeheartheart feltet på registrering
ODR(afhængig af operation)Følsommekidneyskidneys feltet på registrering
ODR(afhængig af operation)Følsommelungslungs feltet på registrering
ODR(afhængig af operation)Følsommecorneascorneas feltet på registrering
ODR(afhængig af operation)Følsommeliverliver feltet på registrering
ODR(afhængig af operation)FølsommesmallIntestinesmallIntestine feltet på registrering
ODR(afhængig af operation)Følsommepancreaspancreas feltet på registrering
ODR(afhængig af operation)Følsommeskinskin feltet på registrering
ODR(afhængig af operation)FølsommerelativeAcceptanceRequiredrelativeAcceptanceRequired feltet på registrering

aktør

KomponentKontekstTypeNøgleInformation
ODR(afhængig af operation)Følsommeactor-cprCPR på aktør
ODR(afhængig af operation)Personligactor-usertypeTypen af aktør

cpr validering

Følgende logges kun hvis validerings mode er sat til WARNING.

KomponentKontekstTypeNøgleInformation
ODRvalidateCprFølsommecpr-does-not-existMedsendt CPR nummer (hvis det ikke findes i CPR register)
ODRvalidateCprFølsommecpr-inactiveMedsendt CPR nummer (hvis det er inaktivt)

Minlog

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 / brugertypeBorgerSundhedsfagligSystem brugerAdmin bruger
CreateOrganDonorRegistrationxx
x
UpdateOrganDonorRegistrationxx
x
DeleteOrganDonorRegistrationxx
x
GetOrganDonorRegistration
x
x
HasOrganDonorRegistration



Slettejob

Servicens slettejob bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald.
Dette gøres for at sikre afviklingen af slettejob i flere-node drift, hvor en loadbalancer sørger for fordeling af kald til bagvedliggende servere.

Driften vedligeholder en cron, som kalder slettejobbets url i et fast mønster vha. curl.

Følgende parametre til styring af slettejobbet kan ændres i cleanup.properties for ODR:

NøgleDefault værdiBeskrivelse
deletion.desired.execution.durationPT20S

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

P60D

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.
Default værdien er 60 dage.

deletion.batchsize1000Max. antal entries (f.eks. CPR) vi behandler pr. batch
personinformation.batchsize100Max. antal CPR vi forespørger på i en enkelt request til personinformation
personinformation.urlhttp://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-personinformation/v1Den url som jobbet skal bruge, når den skal kalde servicen stamdata-personinformation.
personinformation.maxTotalConnections200Max antal forbindelser som HTTP Connection Manager må lave.

personinformation.defaultMaxConnectionsPerRoute

20

Max antal forbindelser som HTTP Connection Manager må lave pr. rute.

personinformation.error.tolerance

0

Tolerance for hvor mange fejl PersonInformation servicen må have inden den melder tilbage at den ikke virker.

deletion.desired.execution.duration=PT20S

Der er en max grænse for hvor lang tid jobbet må køre pr. gang 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.

Kommando til kald af slettejob:

curl <server>/odr-operations/odr-slettejob/start

Slettejobbet skal aktiveres hver dag, hvert 15. minut mellem 8-16 - startende kl. 8

Med mindre ovenstående parametre ændres, så vil slettejobbet behandle op til 1550 sletninger om dagen. (I gennemsnit er der 150 døde pr. døgn).


Backup

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.