Indledning

Nærværende dokument udgør driftsvejledningen for Lpr3indlæseren. Lpr3indlæseren er en stamdataindlæser som vedligeholder data fra Landspatientregisteret.

Lpr3indlæseren er en webapplikation der deployer på en Wildfly applikationsserver.

Distributionen af Lpr3indlæseren foregår som et Docker image der er bygget på NSP platform Docker imaget (registry.nspop.dk/platform/nsp)

Placering af filer

Tabel over datafilens placering i forhold til de servere og komponenter der findes på siden LPR 3 Indlæser - Design- og Arkitekturbeskrivelse:

Fase

Directory

Bemærkning

Input<path_to_input_files>:/tmp/lpr3/inputCamels FetchRoute placerer filer hentet fra sftp her.
backup<path_to_backup_files>:/tmp/lpr3/input/.doneEfter indlæsning placeres en zippet version af filerne her.

Monitoreringssnitflader

Alle Lpr3indlæsere overvåges via en simpel statusservice. (Se evt. https://www.nspop.dk/display/public/web/Husregler+for+udvikling+til+NSP#HusreglerforudviklingtilNSP-Snitfladetilmonitorering(gl4.4)).

Denne statusservice bliver overvåget ved at den polles hver 10. sekund for en ny status (200 ok og 500 fejl pr default HTTP). Ved 500 er det tegn på, at en supporter skal igang med at kigge på problemet.

Statusservicen giver udslag i følgende situationer, som vil sætte support igang

Servlet til styring af indlæsning

Lpr3Indlæseren har en udvidet servlet der gør det muligt at styre indlæsningen. Det er muligt at angive et pattern for de filer der skal indlæses. Det er også muligt at starte og stoppe indlæsningen vha. denne servlet.

Vha. parameteren "BatchAction" kan man styre indlæsningen ved at angive en af følgende værdier:

VærdiBeskrivelse
GetImportSet

Viser status for indlæsningen:

  • hvilket pattern er der er angivet (hvis der er angivet et).
  • status for indlæsningen.
  • Tidspunkt for hvornår rækken sidst er opdateret.
BatchStartBenyttes til at starte indlæsningen.
BatchStopBenyttes til at stoppe indlæsningen.
ResetNulstiller det angivne pattern.
<import set pattern>Her kan man sætte et pattern. Hvis der findes et i forvejen overskrives det.

Eksempler:

http://localhost:8080/lpr3indlaeser/status?BatchAction=01100      (Her angives at filer hvor filnavnet indeholder "01100" skal indlæses)

http://localhost:8080/lpr3indlaeser/status?BatchAction=GetImportSet  (viser status for indlæsningen)

Generelle overvågningssnitflader

Ingen - ud over den beskrevne statusservice.

Service snitflader

Ingen - de data der indlæses i registret via Lpr3indlæseren stilles til rådighed i Lpr3 registerdatabasen . Lpr3indlæseren selv udstiller ikke nogen services.

Håndtering af fejlsituationer

Når statusservicen svarer med en http 500 skal der igangsættes support til hhv.

Regler i forhold til sekventiel indlæsning

LPR3 Indlæseren er forsynet med et tjek på navnene på de filer, der processeres. Navngivningen af filerne fra lpr3-data-leverandøren skal således afdække om indlæseren har det fulde billede af hele lpr3-historikken.

Filnavnene skal være forsynet med fra- og tildatoer på formatet yyyymmddHHMMss. Den første fils indlæsning markeres med en række 0'er (bootstrapfilen)

BR_SOR_00011_00000000000000_20190620133023.csv
BR_SOR_00012_20190620133023_20190621020004.csv
BR_SOR_00013_20190621020004_20190621101808.csv

Indlæseren at verificere om det er ok at tage fat i en given fil. Den validerer både om formatet indeholder datoerne som angivet ovenfor, samt om den næste fil stemmer overens med tilstanden for den senest indlæste fil i databasen.

Hvis sekvensen er brudt eller inputfilen har ukorrekt format, stoppes for yderligere indlæsning.

Som beskrevet i monitoreringsnitfladen ovenfor indeholder status for LPR3 en sigende diagnosetekst i forhold til valideringen af sekventiel indlæsning.

Disse forretningsregler blev indført i forbindelse med SDS-5519: lpr3 - indlæsning i sekvens.

Beskrivelse af logs

Lpr3indlæseren skriver til 4 forskellige log filer, der alle er placeret lokalt i Docker containeren i Wildfly standard log folderen: /pack/wildfly8/standalone/log 


NSP SLA log

Denne log ligger i filen nsputil-sla.log og indeholder NSP SLA logninger på formen

24-10-2020 10:14:40,540 [Camel (camel-1) thread #2 - sftp://foo@lpr3sftp:22/dxc] INFO  dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-10-24 10:14:40.539" EndTime="2020-10-24 10:14:40.539" Duration="74 microseconds" MessageId="0169ab8a-5371-4b40-bd64-c8a9fce0b54e" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet fetched" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","BR_190520111525.csv") }
24-10-2020 10:14:40,761 [Camel (camel-1) thread #3 - file:///tmp/lpr3/input] INFO  dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-10-24 10:14:40.539" EndTime="2020-10-24 10:14:40.539" Duration="74 microseconds" MessageId="7f6a9182-5297-41ac-bc2c-68a7010766ff" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet received" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","BR_190520111525.csv") }
24-10-2020 10:14:40,890 [Camel (camel-1) thread #3 - file:///tmp/lpr3/input] INFO  dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-10-24 10:14:40.539" EndTime="2020-10-24 10:14:40.539" Duration="74 microseconds" MessageId="7f6a9182-5297-41ac-bc2c-68a7010766ff" RequestSize=0 ReplySize=0 Result=ERROR ("File handling encountered errors and was not completed") ClientIP="<empty>" SOAPOperation="DataSet failed" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","BR_190520111525.csv") }

Audit log

Denne log ligger i filen lpr3Audit.log og indeholder overordnet logning af Lpr3indlæserens aktivitet

timestamp="2020-10-26 10:01:36,250" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been preparsed"
timestamp="2020-10-26 10:01:36,406" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been parsed and splitted"
timestamp="2020-10-26 10:01:37,890" priority="ERROR" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Skipping Lpr3 delete batch for PID: null - due to SQL error: Incorrect number of rows affected by batch delete"
timestamp="2020-10-26 10:01:37,907" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been completed with status Completed with 1 log(s)"


Application log

Denne log ligger i filen lpr3Application.log og indeholder detaljeret logning af Lpr3indlæserens aktivitet


timestamp="2020-10-27 10:53:58,207" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been fetched"
timestamp="2020-10-27 10:53:58,665" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been received"
timestamp="2020-10-27 10:53:58,673" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been preparsed"
timestamp="2020-10-27 10:53:58,792" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.parser.Lpr3CsvParseSplitHandler" message="Parsed 7 LPR3 registreringer"
timestamp="2020-10-27 10:53:58,797" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been parsed and splitted"
timestamp="2020-10-27 10:53:59,584" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Received batch of Lpr3Events with size 15"
timestamp="2020-10-27 10:53:59,591" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.database.dao.Lpr3RegistreringerDAO" message="Delete 6 Lpr3Registreringer"
timestamp="2020-10-27 10:53:59,611" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Batched delete LPR3Registreringer. Count=0"
timestamp="2020-10-27 10:53:59,611" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Persisted delete batches of LPR3Registreringer. Count=0"
timestamp="2020-10-27 10:53:59,611" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.database.dao.Lpr3RegistreringerDAO" message="Insert using jdbc template."
timestamp="2020-10-27 10:53:59,612" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.database.dao.Lpr3RegistreringerDAO" message="Insert 6 Lpr3Registreringer"
timestamp="2020-10-27 10:53:59,629" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Batched insert LPR3Registreringer. Count=6"
timestamp="2020-10-27 10:53:59,629" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Persisted insert batches of LPR3Registreringer. Count=6"
timestamp="2020-10-27 10:53:59,630" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.database.dao.Lpr3RegistreringerDAO" message="Delete 1 Lpr3Registreringer"
timestamp="2020-10-27 10:53:59,648" priority="ERROR" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Skipping Lpr3 delete batch for PID: null - due to SQL error: Incorrect number of rows affected by batch delete"
timestamp="2020-10-27 10:53:59,648" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Batched delete LPR3Registreringer. Count=0"
timestamp="2020-10-27 10:53:59,648" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Persisted delete batches of LPR3Registreringer. Count=0"
timestamp="2020-10-27 10:53:59,648" priority="DEBUG" class="dk.nsp.indlaeser.lpr3.bean.Lpr3PersistBean" message="Done persisting LPR3Registreringer. Written Lpr3: 6, Updated Lpr3: 0, Deleted Lpr3: 0"
timestamp="2020-10-27 10:53:59,666" priority="INFO" class="dk.nsp.indlaeser.lpr3.bean.LoggerBean" message="The file BR_190520111525.csv has been completed with status Completed with 1 log(s)"


Stat log

Denne log ligger i filen lpr3Stat.log og indeholder statistik logning af Lpr3indlæserens aktivitet


{"Time to preparse":"PT0.001S","Time to parse":"PT0.075S","Parsed records":"Parsed 7 LPR3 registreringer","Application":"Lpr3Indlæser","Timestamp":"2020-10-27 10:55:05,810","Processing Time":"PT445052H25M13.306S","ExchangeId":"89807c80-11d5-465b-a198-90e6a2d6f501"}