Overblik

Driftsvejledningen indeholder information der er relevant for driften af Det Fælles Stamkort 1.5-servicen (FSK), herunder oplysninger om standard placering af log- og konfigurationsfiler, eksterne afhængigheder og fejlfinding.

I produktion består Det Fælles Stamkort servicen af én komponent fsk-web (war-arkiv), der er deployet på en Wildfly applikationsserver.

Servicen har følgende afhængigheder:

Funktionalitet

Servicen udstiller data som beskrevet i anvenderguiden. Komponenten kaldes alene af Dokumentdelingsservicen (DDS). Servicen udstiller derudover en række administrative og konfigurationsrelaterede funktionaliteter. Servicen har et slettejob, som er beskrevet længere nede i dokumentet.

Direkte kald på service-komponenten

URL

Funktionalitet

<server>/fsk/isAlive

Status-side for FSK servicen. Viser om servicen fungerer korrekt, se afsnittet Overvågning.

<server slettejob>/fsk-operations/fsk-cleanup/status
Returnerer statuskoden for den seneste kørsel af slettejobbet
<server slettejob>/fsk-operations/fsk-cleanup/start
Starter fsk slette jobbet, som sletter stamkort, for personer, der har været afdøde et år
<server slettejob>/fsk-operations/health
Status-side for slettejobbet. Viser om servicen fungerer korrekt, se afsnittet Overvågning.

Opsætning

I application.properties kan der indstilles forkellige ting. Her følger et eksempel:

author.institution.root=1.2.208.176.1.1
author.institution.extension=1126211000016009
author.institution.assigningAuthorityName=SOR
author.institution.name=Sundhedsdatastyrelsen

health.certificate-expires-warning=30

# JNDI datasource properties
datasource-fsk.jndi-name=java:jboss/datasources/FSK-DS
datasource-stm.jndi-name=java:jboss/datasources/STM-DS

sts.endpoint=http://test1.ekstern-test.nspop.dk:8080/sts/services/NewSecurityTokenService

# SCES
sces.enable=true
sces.endpoint=http://test1.ekstern-test.nspop.dk:8080/stamdata-cpr-ws/service/DetGodeCPROpslag-1.0.4
sces.connect.timeout.millis=2000
sces.read.timeout.millis=7000

# ODR
odr.enable=true
odr.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/odr/odr
odr.connect.timeout.millis=2000
odr.read.timeout.millis=7000

# LTR
ltr.enable=true
ltr.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/btr/ltr
ltr.connect.timeout.millis=2000
ltr.read.timeout.millis=7000

# BTR
btr.startdatetime=2019-01-01 00:00:00
btr.enable=true
btr.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/btr/btr
btr.connect.timeout.millis=2000
btr.read.timeout.millis=7000

# SKR
skr.enable=true
skr.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/skr/skr
skr.connect.timeout.millis=2000
skr.read.timeout.millis=7000

# SYES
syes.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-yder-lookup-ws/service/YderService
syes.connect.timeout.millis=2000
syes.read.timeout.millis=7000

# FGVHR - De andre services genbruger ID-kort og HSUID-header som FSK modtager, til at kalde videre. Det gør FGVHR ikke, derfor skal certifikat og ID-kort konfigureres:
fgvhr.enable=true
fgvhr.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/fgvhr/20230601/hasNoResuscitation
fgvhr.connect.timeout.millis=2000
fgvhr.read.timeout.millis=7000
fgvhr.sts.keystore=NSP_Test_Service_Consumer_sds.p12 # skal mappes ind i containeren på følgende sti, så navnet på keystore stemmer overens: /pack/wildfly/modules/dk/sundhedsdatastyrelsen/fsk/main/NSP_Test_Service_Consumer_sds.p12
fgvhr.sts.keystore.password=Test1234
fgvhr.idcard.subject.name=Sundhedsdatastyrelsen
fgvhr.idcard.subject.id=33257872
fgvhr.idcard.system.name=FSK

# Cleanup
deletion.fsk.batchsize=1000
desired.execution.duration=PT20S
deletion.save.deceased=12M

# PersonInformation
personinformation.url=http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-personinformation/v1
personinformation.errorcount.duration=PT10M
personinformation.error.tolerance=0
fsk.httpclient.pooling.totalconnections=200
fsk.httpclient.pooling.maxconnections.pr.route=20

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 slettejobbet.

Overvågning

De følgende afsnit beskriver emner i servicen, der kræver opmærksomhed ift. driften.

Health-statusside

FSK Servicen udstiller en Health-statusside (også typisk kendt som isAlive), der viser om applikationen er sund, eller om noget kræver indgriben. Health-statussiden returnerer en body med data, der beskriver sundhedsstatus for forskellig funktionalitet i applikationen.

Ud over status, indholder siden også data omkring byg, installation, version mm. Se eksemplet nedenfor.

Health-statussiden er opbygget vha nogle specialfremstillede HealthIndicators.

Der beregnes en overordnet status for applikationens tilstand, som baseres på den HealthIndicator, der returnerer den mest fatale status. 

Denne status returneres som http  status kode, men indgår også i selve indholdet, med information omkring, hvilken healthindicator, som kræver opmærksomhed (kun den første, hvis flere med samme kritikalitet)

Tabellen viser den HTTP statuskode, som Health-statussiden vil returnere. Fra sund til fatal.

HTTP statuskodeBeskrivelse
200 OKIngen fejl.
203 Non authoratative informationEn fejl kræver måske indgriben, men applikationen fungerer fortsat med nedsat funktion.
500 Internal Server ErrorApplikationen/funktionen er nede og kræver øjeblikkelig indgriben.

Opførsel for forskellige HealthIndicators

Nogle HealthIndicators anvender ikke nødvendigvis alle statusser men kun udvalgte. Følgende tabel viser, hvad de enkelte HealthIndicators tjekker, og hvornår de returnerer en specifik status.

Navn i responseBeskrivelse

organDonorClient
livingWillClient
treatmentWillClient
personalDataCardRegisterClient
yderClient
scesClient
FgvhrClient

Tjekker om det seneste kald med den pågældende integration var succesfuldt. Hvis det ikke var succesfuldt, så viser "error" en toString() på den exception der opstod. Der vises eventuelt "timeOfLastExecution", som angiver det seneste tidspunkt, hvor et kald blev forsøgt (uanset om det var successfuldt eller ikke-successfuldt).

Statuskode 200: OK
Statuskode 203: Der opstod en fejl under seneste forsøg på at kalde med den pågældende integration.

fsk database
stm database

Tjekker, at der kan udføres en "SELECT 1" query på alle applikationens datasources. Query'en udføres i det øjeblik Health-statussiden forespørges. Der vises detaljer om status for de enkelte datasources.

Statuskode 200: OK
Statuskode 500: Der opstod en fejl under forsøget på at udføre test-query'en på en af applikationens datasources.

Eksempel på response, når applikationen er sund

HTTP statuskode: 200 OK

Title: fsk-web
Deployed: 2024-08-05T12:28:04.506Z
Build-Date: 2024-08-05T12:26:14Z
Build-Version: 2.2.1
Builder: lene
Display time: 2024-08-05T12:54:07.418Z

200 OK
organDonorClient : "timeOfLastExecution: 2024-08-05T12:53:38.116Z"
livingWillClient : "timeOfLastExecution: 2024-08-05T12:53:38.114Z"
treatmentWillClient : "timeOfLastExecution: 2024-08-05T12:53:38.114Z"
personalDataCardRegisterClient : "timeOfLastExecution: 2024-08-05T12:53:38.204Z"
yderClient : "timeOfLastExecution: 2024-08-05T12:53:38.251Z"
scesClient : "timeOfLastExecution: 2024-08-05T12:53:38.115Z"
FgvhrClient : "timeOfLastExecution: 2024-08-05T12:53:38.114Z"
fsk database : "Forbindelse til database fsk ok"
stm database : "Forbindelse til database stm ok"

Eksempel på response, når noget i applikationen kræver indgriben

HTTP statuskode: 203 Non Authoritative Information

Title: fsk-web
Deployed: 2024-08-05T12:57:50.776Z
Build-Date: 2024-08-05T12:26:14Z
Build-Version: 2.2.1
Builder: lene
Display time: 2024-08-05T12:58:40.406Z

203 Non Authoritative Information from:organDonorClient
organDonorClient : "timeOfLastExecution: 2024-08-05T12:58:35.228Z"
livingWillClient : "timeOfLastExecution: 2024-08-05T12:58:35.325Z"
treatmentWillClient : "timeOfLastExecution: 2024-08-05T12:58:35.309Z"
personalDataCardRegisterClient : "timeOfLastExecution: 2024-08-05T12:58:35.408Z"
yderClient : "timeOfLastExecution: 2024-08-05T12:58:35.457Z"
scesClient : "timeOfLastExecution: 2024-08-05T12:58:35.294Z"
FgvhrClient : "timeOfLastExecution: 2024-08-05T12:58:35.274Z"
fsk database : "Forbindelse til database fsk ok"
stm database : "Forbindelse til database stm ok"

Slettejobbet status endpoints

Slettejobbet har sine egne status endpoints

<server slettejob>/fsk-operations/fsk-cleanup/status: fortæller med en http kode, hvordan den seneste sletning gik.

<server slettejob>/fsk-operations/health: fortæller status til eksterne services og database. Hvis de melder fejl så tjek log filerne.

Eksempel på svar fra health endpointet:

{
   "DB":"OK",
   "PersonInformation":"OK"
}

Fejlfinding

Servicens logfiler bør løbende tjekkes for ERROR-logninger.

Logfiler og fortolkning af disse

Alle logfiler er at finde i ”log” under Wildfly. Herunder findes en liste over logfiler, med en beskrivelse af hvilke komponenter der skriver til dem.

Alle logs benytter en rolling file appender, og indeholder derfor et postfix i filnavnet, der ikke er præsenteret i nedenstående.

Logfilnavn

Indhold

fsk_service.log

Applikationslog fra FSKservicen, som indeholder de vigtigste systemhændelser (INFO), fejl (ERROR) og advarsler (WARN).

fsk_audit.log

Auditlog fra FSK-servicen, som indeholder logning af, hvilken service der blev kaldt, hvordan der blev kaldt, hvornår der blev kaldt samt kaldets varighed. Bemærk, Da FSK-servicen kun udstiller én webservice, som er on-demand servicen til kald fra DDS og SFSK, vil mange oplysninger være éns fra kald til kald.

Auditlog

Følgende tabel viser hvad der audit logges ved successfulde kald til fsk.

KomponentKontekstTypeNøgleInformation
FSKretrieveDocumentSetIkke Personligdocument-idID på hentet dokument
FSKretrieveDocumentSetFølsommecprCPR på borgeren

Krav til backup m.m.

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.

Slette job

Detaljer omkring de forskellige trin slettejobbet har, kan findes i FSK Design og arkitektur dokumentet.

Servicens slettejob bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald. 

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

Man kan ændre styring af slettejobbet ved at ændre følgende parametre:

Kommando til kald af slettejob: <server>/fsk-operations/fsk-cleanup/start