Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: SDS-6515 Tilføj eksempel på application.properties

...

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

...

  • Der kræves adgang til 2 MariaDB datasources.
  • Kald til (skrivning til) MinLog-servicen.
  • Kald til (læsning fra) CPR-Enkeltopslag (SCES)
  • Kald til (læsning fra) Organdonorregister-servicen (ODR)
  • Kald til (læsning fra) Livstestamenteregister-servicen (LTR)
  • Kald til (læsning fra) Behandlingstestamenteregister-servicen (BTR)
  • Kald til (læsning fra) Stamkortregister-servicen. (SKR)Kald til (både læsning fra og skrivning til ) Dokumentdelingsservicen og det underliggende registry (DDS).

Ændringslog

Version

Dato

Ændring

Ansvarlig

2.0.0

2018-08-27

Initialt dokument

Trifork

2.0.82019-07-31Tilføjet information om ny overvågningssideTrifork
2.0.92019-25-09AjourførtTrifork
2.0.132020-02-13Beskrivelse af SyncJob ændretKvalitetsIT
2.0.142021-08-20Fjernet referencer til SyncJobKvalitetsIT

Funktionalitet

Servicen udstiller data som beskrevet i anvenderguiden. Komponenten kaldes alene af Dokumentdelingsservicen (DDS). Servicen udstiller derudover en række administrative og konfigurationsrelaterede funktionaliteter.

...

URL

Funktionalitet

<server>/fsk/actuator/info

Status-side. Se afsnittet versionsinformation.

<server>/fsk/actuator/health
Status-side. Viser om servicen fungerer korrekt, se afsnittet Overvågning.

Daglig drift

Servicen kræver ingen daglig vedligeholdelse udover sædvanlig systemovervågning.

Alt data for en borger fjernes 1 år efter borgerens død ved hjælp af et integreret job kaldet SyncJob. Dette job fjerner både data fra servicens primære database samt fra DDS registry.

Versionsinformation

Servicen udstiller en statusside med versionsinformation. Der returneres en body med JSON-data.
"$.build" indeholder oplysninger om versionen, og hvornår den blev bygget.
"$.time" indeholder oplysninger om det aktuelle tidspunkt, og tidspunktet for hvornår servicen blev deployed.

Eksempel:

Code Block
languagetext
{
    "build": {
        "version": "2.0.8",
        "artifact": "fsk-service",
        "name": "fsk-service",
        "group": "dk.sundhedsdatastyrelsen.stamkort",
        "time": "2019-07-30T07:30:22.496Z"
    },
    "time": {
        "currentTime": "2019-07-30T13:16:18.761Z",
        "deployed": "2019-07-30T13:16:10.382Z"
    }
}

Overvågning

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

Health-statusside

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 JSON-data, der beskriver sundhedsstatus for forskellig funktionalitet i applikationen.

Health-statussiden er opbygget vha. Spring Boot Actuator, som er konfigureret med nogle specialfremstillede HealthIndicators.

Actuator beregner en overordnet status for applikationens tilstand, som baseres på den HealthIndicator, der returnerer den mest fatale status. Denne overordnede status vises i JSON-property'en "$.status". Se eksempler længere nede.

Der er udover standard Actuator statusser defineret en specielfremstillet status (NEEDS_ATTENTION). Den følgende tabel viser alle statusser i rækkefølge fra sund til fatal. Tabellen viser også den HTTP statuskode, som Health-statussiden vil returnere til en given overordnet status:

...

Applikationen/funktionen er deaktiveret.

Denne status anvendes pt. ikke.

...

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.

Bemærk, at det kun er "db"-HealthIndicator'en der kan returnere statussen "DOWN" og dermed udløse HTTP statuskoden "500 Internal Server Error".

...

Tjekker om konfigurede certifikater er tæt på udløb. Der tjekkes alle certifikater i de to keystores der er angivet i property'erne application.properties:"client.keystore.filesystem.path" og i minlogclient.properties:"sts.keystore". Derudover vises detaljer om udløbsdato for alle certifikater (dvs. hvis en keystore indeholder flere certifikater, så vises detaljer for alle).

UP: OK
NEEDS_ATTENTION: Der er et certifikat, som udløber om mindre end det antal dage, der er konfigureret i property'en "health.certificate-expires-warning".

...

$.details.organDonorClient
$.details.livingWillClient
$.details.treatmentWillClient
$.details.personalDataCardRegisterClient
$.details.scesClient
$.details.minLogClient

...

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

UP: OK
UNKNOWN: Der er ikke udført nogen kald med den pågældende integration, siden applikationen blev deployed.
NEEDS_ATTENTION: Der opstod en fejl under seneste forsøg på at kalde med den pågældende integration.

...

Tjekker om den seneste afvikling af jobbet var successfuld. Hvis den ikke var succesfuld, så viser "error" en toString() på den exception der opstod. Der vises eventuelt "timeOfLastExecution", som angiver det seneste tidspunkt, hvor jobbet blev forsøgt afviklet.

UP: OK
UNKNOWN: Der er ikke udført nogen kørsel af jobbet, siden applikationen blev deployed.
NEEDS_ATTENTION: Der opstod en fejl under seneste forsøg på at afvikle jobbet.

...

Er baseret på Actuator's indbyggede DataSourceHealthIndicator og 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.

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

Opsætning

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

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

# Whitelisted CVRs (comma-separated) that are allowed to call with DGWS level 3
whitelisted.level3.cvrs=31908574,33257872

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

# Minlog
minlog.read-activity.text=Opslag i Stamkort
minlog.on.idcard.level3.enabled=true

# 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

# DDS
dds.repository.unique.id=1.2.208.176.43210.8.10.12
dds.home.community.id=1.2.208.176.8.1.12

# 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


Daglig drift

Servicen kræver ingen daglig vedligeholdelse udover sædvanlig systemovervågning.

Versionsinformation

Servicen udstiller en statusside med versionsinformation. Der returneres en body med JSON-data.
"$.build" indeholder oplysninger om versionen, og hvornår den blev bygget.
"$.time" indeholder oplysninger om det aktuelle tidspunkt, og tidspunktet for hvornår servicen blev deployed.

Eksempel:

Code Block
languagetext
{
    "build": {
        "version": "2.0.8

Eksempel på response, når applikationen er sund

HTTP statuskode: 200 OK

Code Block
languagetext
{
    "status": "UP",
    "details": {
        "certificateExpiry": {
            "status": "UP",
            "details": {
                "certificates": [
                    {
                        "file": "test1/FMK-KRS-TEST.jks",
                        "alias": "sosi:alias_system",
        "artifact": "fsk-service",
               "validFrom"name": "2017-04-04T13:39:50Zfsk-service",
          "group": "dk.sundhedsdatastyrelsen.stamkort",
              "validUntil"time": "20202019-0407-04T1330T07:3930:27Z22.496Z"
    },
    "time": {
           },
       "currentTime": "2019-07-30T13:16:18.761Z",
             {
                        "file"deployed": "test1/FMK2019-KRS-TEST.jks",07-30T13:16:10.382Z"
    }
}


Overvågning

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

Health-statusside

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 JSON-data, der beskriver sundhedsstatus for forskellig funktionalitet i applikationen.

Health-statussiden er opbygget vha. Spring Boot Actuator, som er konfigureret med nogle specialfremstillede HealthIndicators.

Actuator beregner en overordnet status for applikationens tilstand, som baseres på den HealthIndicator, der returnerer den mest fatale status. Denne overordnede status vises i JSON-property'en "$.status". Se eksempler længere nede.

Der er udover standard Actuator statusser defineret en specielfremstillet status (NEEDS_ATTENTION). Den følgende tabel viser alle statusser i rækkefølge fra sund til fatal. Tabellen viser også den HTTP statuskode, som Health-statussiden vil returnere til en given overordnet status:

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.

Bemærk, at det kun er "db"-HealthIndicator'en der kan returnere statussen "DOWN" og dermed udløse HTTP statuskoden "500 Internal Server Error".

Navn (på property i JSON-response)Beskrivelse

$.details.organDonorClient
$.details.livingWillClient
$.details.treatmentWillClient
$.details.personalDataCardRegisterClient
$.details.scesClient
$.details.minLogClient

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.

$.details.db

Er baseret på Actuator's indbyggede DataSourceHealthIndicator og 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

Code Block
languagetext
{
                        "alias": "sosi:alias_system",
                        "validFrom": "2017-04-04T13:39:50Z",
                        "validUntil": "2020-04-04T13:39:27Z"
                    }
                ]
            }
        },
        "organDonorClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.245Z"
            }
        },
        "livingWillClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.246Z"
            }
        },
        "treatmentWillClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.245Z"
            }
        },
        "personalDataCardRegisterClient": {
            "status": "UP",
    "details": {      
        "detailsorganDonorClient": {
                "timeOfLastExecutionstatus": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.246Z245Z"
            }
        },
        "scesClientlivingWillClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.566Z246Z"
            }
        },
        "minLogClienttreatmentWillClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.569Z245Z"
            }
        },
        "syncJobpersonalDataCardRegisterClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T1830T17:0031:0513.321Z246Z"
            }
        },
        "dbscesClient": {
            "status": "UP",
            "details": {
                "primaryDataSourcetimeOfLastExecution": {
 "2019-07-30T17:31:13.566Z"
            }
       "status": "UP" },
        "minLogClient": {
            "detailsstatus": {"UP",
            "details": {
                "databasetimeOfLastExecution": "MySQL",2019-07-30T17:31:13.569Z"
            }
        },
        "hellosyncJob": 1{
            "status": "UP",
        }    "details": {
                },
 "timeOfLastExecution": "2019-07-30T18:00:05.321Z"
            }
       "stamdataDataSource": { },
        "db": {
            "status": "UP",
                    "details": {
                "primaryDataSource": {
        "database            "status": "MySQLUP",
                    "details": {
         "hello               "database": 1"MySQL",
                    }
    "hello": 1
                    }
                },
        }
     }
}

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

HTTP statuskode: 202 Accepted

Code Block
languagetext
{
    "statusstamdataDataSource": "NEEDS_ATTENTION",
    "details": {
        "certificateExpiry": {
            "status": "UP",
            "details": {
                "certificatesdetails": [{
                    {
    "database": "MySQL",
                   "file": "test1/FMK-KRS-TEST.jks",
    "hello": 1
                   "alias": "sosi:alias_system", }
                        "validFrom": "2017-04-04T13:39:50Z",}
            }
        }
    }
}


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

HTTP statuskode: 202 Accepted

Code Block
languagetext
{
    "status"validUntil": "2020-04-04T13:39:27Z"NEEDS_ATTENTION",
    "details": {
        "organDonorClient": {
      },
      "status": "UP",
             "details": {
                        "filetimeOfLastExecution": "test1/FMK2019-KRS-TEST.jks",07-30T17:31:13.245Z"
            }
        },
        "aliaslivingWillClient": "sosi:alias_system",{
            "status": "NEEDS_ATTENTION",
            "validFromdetails": "2017-04-04T13:39:50Z",{
                        "validUntil"error": "2020-04-04T13:39:27Z"
      java.io.IOException: HTTP POST failed (404): Not Found",
              }
                ]"timeOfLastExecution": "2019-07-30T17:31:13.246Z"
            }
        },
        "organDonorClienttreatmentWillClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.245Z"
            }
        },
        "livingWillClientpersonalDataCardRegisterClient": {
            "status": "NEEDS_ATTENTIONUP",
            "details": {
                "error": "java.io.IOException: HTTP POST failed (404): Not Found",
                "timeOfLastExecution": "2019-07-30T17:31:13.246Z"
            }
        },
        "treatmentWillClientscesClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.245Z566Z"
            }
        },
        "personalDataCardRegisterClientminLogClient": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T17:31:13.246Z569Z"
            }
        },
        "scesClientsyncJob": {
            "status": "UP",
            "details": {
                "timeOfLastExecution": "2019-07-30T1730T18:3100:1305.566Z321Z"
            }
        },
        "minLogClientdb": {
            "status": "UP",
            "details": {
                "timeOfLastExecutionprimaryDataSource": "2019-07-30T17:31:13.569Z"
{
             }
        }"status": "UP",
        "syncJob": {
            "statusdetails": "UP",{
            "details": {
                "timeOfLastExecutiondatabase": "2019-07-30T18:00:05.321Z"MySQL",
            }
        },
    "hello": 1
   "db": {
                "status": "UP",
 }
               "details": { },
                "primaryDataSourcestamdataDataSource": {
                    "status": "UP",
                    "details": {
                        "database": "MySQL",
                        "hello": 1
                    }
                },
                "stamdataDataSource": {
                    "status": "UP",
                    "details": {
                        "database": "MySQL",
                        "hello": 1
                    }
                }
            }
        }
    }
}

Fejlfinding

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

SyncJob

Direkte kald til synkroniseringsjobbet:

...

URL

...

Funktionalitet

...

<server>/fsk/syncjob/start

...

Starter synkroniseringsjobbet

...

<server>/fsk/syncjob/status

...

         "database": "MySQL",
                        "hello": 1
                    }
                }
            }
        }
    }
}


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, hvem der har kaldt, 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, 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
FSKretrieveDocumentSetFølsommeactor-cprCPR på aktør
FSKretrieveDocumentSetPersonligactor-usertypeTypen af aktør

Jobbet sørger for oprettelse/nedlæggelse af metadata i DDS registry i takt med ændringer i CPR-registeret (fødsler/dødsfald). Ifm. midlertidige fejl fra DDS, vil jobbet standse. Det er dog også tænkeligt at DDS returnerer en logisk fejl, hvor det ikke giver mening at forsøge igen senere. Derfor er FSK udstyret med en property "jobs.ddssync.max.errors", hvor det er muligt at angive hvor mange fejl jobbet accepterer før det standser. Normalt bør værdien være '0', hvilket betyder at man ikke accepterer fejl. For at tillade jobbet at ignorere den ene fejl, kan værdien sættes til '1', og så bør der kigges nærmere på hvad der gemmer sig bag fejlen, så der kan ske manuelt data-opret.

Følgende logning kan ses hvis SyncJob støder på et midlertidigt problem, og derfor opgiver videre behandling:

Code Block
2018-08-27 15:14:18.627 [main] WARN dk.stamkort.integrations.dds.SyncJob [] - CPR -> DDS synchronization job stopped due to temporary error. Sync will pause and retry later
dk.stamkort.dao.exceptions.DDSTemporaryException: 
 at dk.stamkort.integrations.dds.SyncJob.createDDRegistryEntry(SyncJob.java:245) ~[classes/:?]
 at dk.stamkort.integrations.dds.SyncJob.runSyncPersonIds(SyncJob.java:144) [classes/:?]
 at dk.stamkort.integrations.dds.SyncJobTest.runSynchronizationJob(SyncJobTest.java:329) [test-classes/:?]
 at dk.stamkort.integrations.dds.SyncJobTest.testJobErrorHandlingForTemporaryError(SyncJobTest.java:282) [test-classes/:?]
 at ...

Jobbet starter først igen hvis det kaldes via URL'en i ovenstående tabel.

Nedenstånde logning ses hvis antallet af logiske fejl overskrides, så jobbet opgiver videre behandling:

Code Block
2018-08-27 15:14:14.495 [main] WARN dk.stamkort.integrations.dds.SyncJob [] - DDS logical error for documentId=urn:sds:fsk:stamkort:3ed5c350-f71d-4337-9d20-1d7d3911f461

dk.stamkort.dao.exceptions.DDSPermanentException: 
 at dk.stamkort.integrations.dds.SyncJob.createDDRegistryEntry(SyncJob.java:245) ~[classes/:?]
 at dk.stamkort.integrations.dds.SyncJob.runSyncPersonIds(SyncJob.java:144) [classes/:?]
 at dk.stamkort.integrations.dds.SyncJobTest.runSynchronizationJob(SyncJobTest.java:329) [test-classes/:?]
 at dk.stamkort.integrations.dds.SyncJobTest.testJobErrorHandlingForPermanentError(SyncJobTest.java:304) [test-classes/:?]
 at ...
2018-08-27 15:14:14.496 [main] ERROR dk.stamkort.integrations.dds.SyncJob [] - Max number of errors (2) exceeded for SyncJob (max allowed is 1)

...

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, hvem der har kaldt, 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, vil mange oplysninger være éns fra kald til kald.

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.