Nærværende dokument udgør driftsvejledningen for Cprindlæseren. Cprindlæseren er en stamdataindlæser som vedligeholder data fra CPR-kontoret.
Cprindlæseren er en webapplikation der deployer på en Wildfly applikationsserver.
Distributionen af Cprindlæseren foregår som et Docker image der er bygget på NSP platform Docker imaget (registry.nspop.dk/platform/nsp)
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
Ingen - ud over den beskrevne statusservice.
Ingen - de data der indlæses i registret via Cprindlæseren stilles til rådighed via SKRS, men Cprindlæseren selv udstiller ikke nogen services.
Cprindlæseren poller en SFTP server for nye filer uden nogen bestemt extension, og når der dukker en fil op, hentes den ind til Cprindlæseren og slettes fra SFTP serveren.
Den modtagne fil tjekkes for om filnavnet opfylder et bestemt mønster. Desuden tjekkes format og konsistens og derefter påbegyndes indlæsningen af de data der findes i den modtagne fil.
Cprindlæseren vil indlæse så meget som muligt af de modtagne data, mens data som det ikke er muligt at indlæse logges til fejlbehandling.
Data indlæses både som enkeltstående rækker i Cpr registerdatabasen og som Cprevents, hvor den enkelte event samler en Person med dens relaterede entiteter, i en event tabel.
Efter endt håndtering vil data, enten som enkeltrækker eller som events kunne hentes via SKRS grænsefladen.
Når statusservicen svarer med en http 500 skal der igangsættes support til hhv.
Cprindlæseren skriver til 4 forskellige log filer, der alle er placeret lokalt i Docker containeren i Wildfly standard log folderen: /pack/wildfly8/standalone/log
Denne log ligger i filen nsputil-sla.log og indeholder NSP SLA logninger på formen
16-02-2021 20:08:36,023 [Camel (camel-1) thread #3 - sftp://foo@cprsftp:22/praksys] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2021-02-16 20:08:36.023" EndTime="2021-02-16 20:08:36.023" Duration="5 microseconds" MessageId="a143da18-8e5e-4b72-8140-cf1797ce946b" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet fetched" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","D100325.L431101") }
16-02-2021 20:08:36,179 [Camel (camel-1) thread #4 - file:///tmp/cpr/input] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2021-02-16 20:08:36.023" EndTime="2021-02-16 20:08:36.023" Duration="5 microseconds" MessageId="54715aa1-4d34-4805-be60-70ba79abef6c" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet received" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","D100325.L431101") }
16-02-2021 20:08:37,118 [Camel (camel-1) thread #1 - AggregateTimeoutChecker] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2021-02-16 20:08:36.023" EndTime="2021-02-16 20:08:37.118" Duration="1095289 microseconds" MessageId="54715aa1-4d34-4805-be60-70ba79abef6c" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet completed" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","D100325.L431101") } |
Denne log ligger i filen cprAudit.log og indeholder overordnet logning af Cprindlæserens aktivitet
timestamp="2021-02-16 20:08:36,183" priority="WARN" class="dk.nsp.indlaeser.cpr.bean.CprValidatorBean" message="Didn't find any previous versions of CPR. Asuming an initial import and skipping sequence checks." timestamp="2021-02-16 20:08:36,188" priority="INFO" class="dk.nsp.indlaeser.cpr.bean.LoggerBean" message="The file D100325.L431101 has been preparsed" timestamp="2021-02-16 20:08:36,204" priority="INFO" class="EksternCompleteRoute" message="inside ekstern completion" timestamp="2021-02-16 20:08:36,204" priority="INFO" class="EksternDistributeRoute" message="Done distribution" timestamp="2021-02-16 20:08:36,207" priority="INFO" class="dk.nsp.indlaeser.cpr.bean.LoggerBean" message="The file D100325.L431101 has been parsed and splitted" timestamp="2021-02-16 20:08:37,118" priority="INFO" class="dk.nsp.indlaeser.cpr.bean.LoggerBean" message="The file D100325.L431101 has been completed with status Completed" |
Denne log ligger i filen cprApplication.log og indeholder detaljeret logning af Cprindlæserens aktivitet
timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.apache.camel.component.file.GenericFileOnCompletion" message="Done processing file: GenericFile[/tmp/cpr/input_ekstern/D100325.L431101] using exchange: Exchange[c1e864f1-f7d8-4d4b-81c4-c0f237d5997a]" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy" message="Renaming file: GenericFile[/tmp/cpr/input_ekstern/D100325.L431101] to: GenericFile[.done/D100325-20210216-200836.204.L431101]" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.apache.camel.util.FileUtil" message="Tried 1 to rename file: /tmp/cpr/input_ekstern/D100325.L431101 to: /tmp/cpr/input_ekstern/.done/D100325-20210216-200836.204.L431101 with result: true" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.apache.camel.util.FileUtil" message="Retrying attempt 0 to delete file: /tmp/cpr/input_ekstern/D100325.L431101.camelLock" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.apache.camel.util.FileUtil" message="Tried 1 to delete file: /tmp/cpr/input_ekstern/D100325.L431101.camelLock with result: true" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.springframework.jdbc.core.JdbcTemplate" message="Executing prepared SQL update" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.springframework.jdbc.core.JdbcTemplate" message="Executing prepared SQL statement [UPDATE CPR_dataset SET Register = ?, FileName = ?, DatasetStatus = ?, DataReceived = ?, CprCount = ?, Datahandled = ?, DataReady = ?, DataProcessingStart = ?, DataProcessingEnd = ? WHERE UUID = ?]" timestamp="2021-02-16 20:08:36,204" priority="DEBUG" class="org.springframework.jdbc.datasource.DataSourceUtils" message="Fetching JDBC Connection from DataSource" timestamp="2021-02-16 20:08:36,205" priority="DEBUG" class="org.springframework.jdbc.core.StatementCreatorUtils" message="JDBC getParameterType call failed - using fallback method instead: java.sql.SQLException: Parameter metadata not available for the given statement" timestamp="2021-02-16 20:08:36,207" priority="INFO" class="dk.nsp.indlaeser.cpr.bean.LoggerBean" message="The file D100325.L431101 has been parsed and splitted" timestamp="2021-02-16 20:08:36,207" priority="DEBUG" class="org.apache.camel.component.file.GenericFileOnCompletion" message="Done processing file: GenericFile[/tmp/cpr/input/D100325.L431101] using exchange: Exchange[54715aa1-4d34-4805-be60-70ba79abef6c]" timestamp="2021-02-16 20:08:36,207" priority="DEBUG" class="org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy" message="Renaming file: GenericFile[/tmp/cpr/input/D100325.L431101] to: GenericFile[.done/D100325-54715aa1-4d34-4805-be60-70ba79abef6c.L431101]" timestamp="2021-02-16 20:08:36,207" priority="DEBUG" class="org.apache.camel.util.FileUtil" message="Retrying attempt 1 to rename file from: /tmp/cpr/input/D100325.L431101 to: /tmp/cpr/input/.done/D100325-54715aa1-4d34-4805-be60-70ba79abef6c.L431101" |
Denne log ligger i filen cprStat.log og indeholder statistik logning af Cprindlæserens aktivitet
{"Time to preparse":"PT0.004S","Time to parse":"PT0.009S","Application":"CprIndlæser","Timestamp":"2021-02-16 20:08:14,720","Processing Time":"PT447746H56M32.226S","ExchangeId":"cbc46c58-be53-403f-9fd9-acf18b1b4173"}
{"Time to preparse":"PT0.009S","Time to parse":"PT0.031S","Application":"CprIndlæser","Timestamp":"2021-02-16 20:08:20,891","Processing Time":"PT447746H56M38.392S","ExchangeId":"df7b2648-a4ad-4d0d-95a5-c8ffcd73755e"}
{"Time to preparse":"PT0.015S","Time to parse":"PT0.032S","Application":"CprIndlæser","Timestamp":"2021-02-16 20:08:26,061","Processing Time":"PT447746H56M43.557S","ExchangeId":"e5f58941-3493-48a5-882b-28176b83a62b"}
{"Time to preparse":"PT0.005S","Time to parse":"PT0.009S","Application":"CprIndlæser","Timestamp":"2021-02-16 20:08:32,091","Processing Time":"PT447746H56M49.581S","ExchangeId":"985fbbb7-b1f2-412d-9663-a8ca05d6ac87"}
{"Time to preparse":"PT0.006S","Time to parse":"PT0.012S","Application":"CprIndlæser","Timestamp":"2021-02-16 20:08:37,118","Processing Time":"PT447746H56M54.602S","ExchangeId":"54715aa1-4d34-4805-be60-70ba79abef6c"} |