Page History
Navitabs | ||||||
---|---|---|---|---|---|---|
|
Indledning
Nærværende dokument udgør driftsvejledningen for Yderindlæseren. Yderindlæseren er en stamdataindlæser som vedligeholder register over ydere og deres tilknyttede personer (kaldet yder personer).
Yderindlæseren er en webapplikation der deployer på en Wildfly applikationsserver.
Distributionen af Yderindlæseren foregår som et Docker image der er bygget på NSP platform Docker imaget (registry.nspop.dk/platform/nsp
)
Monitoreringssnitflader
Alle Yderindlæ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
- En filsæt validering fejler - dvs. at den senest modtagne fil er afvist som helhed
- En Yderevent-validering fejler - dvs. at enkelte Yderevents i en modtagen fil ikke opfylder validitets-regler.
Hvis en Yderevent er fejlet i et load, så vil fejl markeringen først blive fjernet når der er modtaget et nyt load hvor den pågældende Yderevent er indlæst med succes. - Afhængighedsproblemer (fx. ingen forbindelse til databasen eller SFTP server)
- Der er gået uforholdsmæssigt lang tid siden vi har fået sidste fil (kan konfigureres)
- Et modtaget filsæt afviger volumenmæssigt for meget i forhold til seneste succesfulde filsæt (kan konfigureres).
Generelle overvågningssnitflader
Ingen - ud over den beskrevne statusservice.
Service snitflader
Ingen - de data der indlæses i registret via Yderindlæseren stilles til rådighed via SKRS, men Yderindlæseren selv udstiller ikke nogen services.
Hvordan agerer Yderindlæseren
Det overordnede flow i Yderindlæseren er som vist denne figur:
Datakilden er Praksys, som med jævne mellemrum, leverer et fuldt udtræk af yder data til en sftp server (interaktion 2. Lever udtræk i figuren)
Yderindlæseren poller en SFTP server for nye filer af typen .xml
(interaktion 3. Hent udtræk i figuren). Når der dukker en fil op, hentes den ind til Yderindlæseren og slettes fra SFTP serveren.
Fra den interne placering, læses udtrækket (interaktion 4. Læser udtræk i figuren). Derved tjekkes den modtagne fil for format og konsistens og derefter påbegyndes indlæsningen af de data der findes i den modtagne fil.
Yderindlæ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 Yder registerdatabasen (interaktion 5. Opdater register i figuren) og som Yderevents (interaktion 6. Skriv events i figuren), hvor den enkelte event samler en Yder 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.
Statusservice
Statusservice vil svare med en http 200 når alt er ok, men vil svare med en http 500 når der er opstået en fejl under behandling af en fil eller der er en ekstern afhængighed der kan tilgås.
Svar ved ok
Når alt er ok svarer statusservicen med http 200 og viser denne information
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.1
Built-date: 2021-03-24T06:21:45Z
Ok
Latest run dataset:
- UUID: 6871f8fd-d7a3-4fc0-a949-244d9c51e280
- Filename: FourYder.xml
- DataProcessingStart: 2021-03-24T10:36:35Z
- DataProcessingEnd: 2021-03-24T10:36:41Z
- Status: Completed |
Svar ved fejl i behandling af fil
Ved fejl under behandlingen af en fil, vil statusservicen svare en http 500 og melde fejl indtil fejlen er afhjulpet gennem modtagelsen af en fil der ikke indeholder fejl.
Den modtagne fil fejler delvist
Hvis den modtagne fil indeholder fejl i enkelte entiteter, f.eks. et felt i en Yder der er for langt, vil disse fejl blive registreret.
Svaret fra statusservicen vil her vise informationen som
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.
Built-date: 2021-03-24T10:34:05Z
Register fejl:
OvrigeSpecialer with id 8501AEBF19F00002-01 is failing.
Latest failure is: Skipping Ovrigespecialer at location: line 20 - due to Value of field SpecTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
KommuneKoder with id 8501AEBF19F00002-01 is failing.
Latest failure is: Skipping Kommunekoder at location: line 22 - due to Value of field KomTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
...
OvrigeTelefonnumrePerson with id 9001AEBF19F00002-12345678 is failing.
Latest failure is: Skipping OvrigeTelefonnumrePerson at location: line 41 - due to Value of field BemerkningerPerson (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds ...
Latest DataSet fejl:
Skipping Ovrigespecialer - Skipping Ovrigespecialer at location: line 20 - due to Value of field SpecTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
Skipping Kommunekoder - Skipping Kommunekoder at location: line 22 - due to Value of field KomTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
...
Skipping OvrigeTelefonnumrePerson - Skipping OvrigeTelefonnumrePerson at location: line 41 - due to Value of field BemerkningerPerson (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds ...
Latest run dataset:
- UUID: b1470ce7-aeb0-48d3-b526-0a7846bea579
- Filename: FourYder_wrongsubs.xml
- DataProcessingStart: 2021-03-24T10:39:43Z
- DataProcessingEnd: 2021-03-24T10:39:46Z
- Status: Completed with 11 log(s) |
Dette indhold fortæller at der er fejl på registeret, som opremset under Register fejl:
, og der er fejl i den senest modtagne fil, som opremset under Latest DataSet fejl:
.
Hvis en efterfølgende fil, ikke indeholder fejl, men heller ikke retter op på de registrerede register fejl, vil statusservicen vise
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.
Built-date: 2021-03-24T10:34:05Z
Register fejl:
OvrigeSpecialer with id 8501AEBF19F00002-01 is failing.
Latest failure is: Skipping Ovrigespecialer at location: line 20 - due to Value of field SpecTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
KommuneKoder with id 8501AEBF19F00002-01 is failing.
Latest failure is: Skipping Kommunekoder at location: line 22 - due to Value of field KomTxt (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds the maxlength of 60
...
OvrigeTelefonnumrePerson with id 9001AEBF19F00002-12345678 is failing.
Latest failure is: Skipping OvrigeTelefonnumrePerson at location: line 41 - due to Value of field BemerkningerPerson (Denne er alt for lang Denne er alt for lang Denne er alt for lang Denne er alt for lang) exceeds ...
Latest DataSet fejl:
Latest run dataset:
- UUID: 89028258-1286-46c7-b0a1-bc79daade75d
- Filename: FourYderX.xml
- DataProcessingStart: 2021-03-24T10:48:37Z
- DataProcessingEnd: 2021-03-24T10:48:38Z
- Status: Completed |
Her er der altså ikke detekteret fejl i den senest modtagne fil, men der er ubehandlede fejl i registret, hvilket betyder at statusservicen stadig melder http 500.
Aktion
Der skal tages kontakt til Praksys, der er dataleverandør, for at få dem til at levere en fil der ikke indeholder fejl.
Når der på et tidspunkt modtages en fil der udbedre de registrerede fejl, vil statusservicen igen melde http 200 og vise et svar som beskrevet i Svar ved ok.
Aktion ved manglende nulstillen af registrerede fejl.
Som det kan ses i eksemplerne, så vises der en nøgle for de entiteter hvorpå der er registreret en fejl.
Når der modtages en entitet med samme nøgle hvor fejlen er udbedret, vil Yder indlæseren nulstille den fejl der var registreret på nøglen.
Der vil kunne forekomme situationer, hvor nøglen kan være ændret som følge af udbedring af en registreret fejl. I sådanne tilfælde, vil Yder indlæseren ikke selv kunne nulstille fejlen og det er nødvendigt at foretage en manuel nulstilling.
Beskrivelsen af register fejlen på formen
Code Block |
---|
OvrigeTelefonnumrePerson with id 9001AEBF19F00002-12345678 is failing. |
fortæller at det er en entitet af typen OvrigeTelefonnumrePerson
med entitets id 9001AEBF19F00002-12345678
hvorpå der er registreret en fejl.
Hvis det f.eks. fra Praksys er godtgjort at fejlen er rettet, men den registrerede fejl ikke nulstilles kan det gøres ved at udføre denne SQL mod databasen:
Code Block |
---|
DELETE FROM YDS_registerfejl WHERE EntityID = "9001AEBF19F00002-12345678" AND EntityType = "OvrigeTelefonnumrePerson"; |
Dette vil fjerne registreringen af fejlen og derved betyde at statusservicen, hvis der ikke er yderligere fejl, vil svare http 200.
Den modtagne fil fejler som helhed
Hvis den modtagne fil ikke er i det forventede format eller dens kontrol felter ikke stemmer med indholdet, så vil hele filen fejle og der vil ikke blive indlæst data fra filen.
Her vil statusservicen melde en fejl som
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.1-SNAPSHOT
Built-date: 2021-03-24T06:21:45Z
Register fejl:
FIL with id STAMDATAFIL is failing.
Latest failure is: java.io.IOException: The file uses an unsupported encoding
Latest DataSet fejl:
Stopping error - java.io.IOException: The file uses an unsupported encoding
Latest run dataset:
- UUID: f6a82d26-c27a-4112-b3ac-b25e5c5eafef
- Filename: notxml.xml
- DataProcessingStart: 2021-03-24T06:34:39Z
- DataProcessingEnd: 2021-03-24T06:34:39Z
- Status: Failed with error |
eller
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.1-SNAPSHOT
Built-date: 2021-03-24T06:21:45Z
Register fejl:
FIL with id STAMDATAFIL is failing.
Latest failure is: org.xml.sax.SAXException: Not correct number of elements in file AntPost=74 differs from counted records: 4
Latest DataSet fejl:
Stopping error - org.xml.sax.SAXException: Not correct number of elements in file AntPost=74 differs from counted records: 4
Latest run dataset:
- UUID: 25383cad-92d8-4b7e-823c-2152d404b03d
- Filename: FourYder_antpost.xml
- DataProcessingStart: 2021-03-24T06:38:26Z
- DataProcessingEnd: 2021-03-24T06:38:26Z
- Status: Failed with error |
Aktion
Der skal tages kontakt til Praksys, der er dataleverandør, for at få dem til at levere en fil der ikke indeholder fejl.
Når der er modtaget en fil uden fejl vil statusservicen igen svare ok som beskrevet i Svar ved ok
Svar når ekstern afhængighed kan ikke tilgås
Der er 3 eksterne afhængigheder til Yderindlæseren som kan give anledning til fejl hvis de ikke er tilgængelige for Yderindlæseren. I alle tilfælde vil statusservicen svare http 500 og vise en beskrivelsen af fejlen.
Manglende adgang til Yder databasen
Hvis Yder databasen ikke er tilgængelig vil statusservicen melde en fejl som:
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.1
Built-date: 2021-03-17T16:34:31Z
Database error:
Unable to connect to database due to Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/yder
Register fejl:
Latest DataSet fejl:
|
Aktion
Der skal tages kontakt til NSP Drift for at undersøge hvorfor databasen ikke er tilgængelig
Manglende adgang til Praksys SFTP eller Ekstern levering SFTP
Hvis Praksys eller Ekstern levering SFTP serveren ikke er tilgængelig vil statusservicen melde en fejl som
Code Block |
---|
Built-name: yderindlaeser
Built-version: 1.1.1
Built-date: 2021-03-23T19:48:53Z
SFTP error:
Unable to connect to (S)FTP (sftp:foo@ydersftp:22/praksys) due to Auth fail
Unable to connect to (S)FTP (sftp:bar@ydersftp:22/ekstern) due to Auth fail
Register fejl:
Latest DataSet fejl: |
Aktion
Der skal tages kontakt til NSP Drift for at undersøge hvorfor SFTP serveren ikke er tilgængelig
Yderindlæseren går ned
I tilfælde af at docker containeren der kører Yderindlæseren går ned, kan følgende trin følges for at sikre at evt. data der var under behandling bliver færdigbehandlet.
Yderindlæseren er designet til at en stamdata fil kan genkøres uden at de register data der vedligeholdes bliver korrupte, så de beskrevne trin går kun ud på at få yderindlæseren til at genbehandle en evt. afbrudt fil indlæsning.
Som beskrevet i Yderindlæser - Installationsvejledning er Yderindlæserens docker container startet med hhv. et volume-mount der bibeholder indholdet af den interne input folder /tmp/yder/input
og et volume-mount der bibeholder indholdet af den interne backup folder /tmp/yder/input/.done
efter docker containeren er stoppet.
Derfor vil disse volumemounts indeholde evt. filer der var under behandling da docker containeren stoppede eller som er lagt i backup mens docker containeren kørte.
Yderindlæseren er opdelt i en producerende del, som parser og splitter stamdata filen, og en konsumerende del, som skriver de splittede data til databasen.
Når Yderindlæserens producerende del er igang med at behandle en fil, vil /tmp/yder/input
folderen indeholde den fil der er under behandling, f.eks. A23.D210309.XML
samt en låse fil med navnet A23.D210309.XML.camelLock
. Filen A23.D210309.XML.camelLock
fortæller Yderindlæseren, at filen med navnet uden .camelLock
, er under indlæsning og der derfor ikke skal tages fat i denne fil.
Når Yderindlæserens producerende del er færdig, vil datafilen bliver kopieret til en backup lokation og filen med endelsen .camelLock
slettes.
Hvis der var en fil under behandling af den producerende del, når Yderindlæserens docker container går ned, så vil der i volume-mountet for /tmp/yder/input
ligge en fil med endelsen .camelLock
.
Når docker containeren med Yderindlæseren er startet igen, kan filen med endelsen .camelLock
slettes hvilket vil få Yderindlæseren til at tage fat i stamdata filen og indlæsningen af filen vil gentages.
Hvis Yderindlæserens docker container går ned mens en fil under behandling er kommet igennem den producerende del og der kun udestår den konsumerende dels behandling af de splittede data, så vil filen være flyttet til backup folderen, og den vil derfor ligge i denne folder efter docker containeren er stoppet.
Det er her nødvendigt at kigge i databasen for at afgøre om der var filer i behandling da docker containeren gik ned.
Dette gøres ved at udføre SQL forespørgslen
select * from YDS_dataset where status not like "%Completed%";
mod Yderindlæserens database.
Hvis denne forespørgsel returnerer en eller flere rækker, findes den række hvor DataReceived
kolonnen er umiddelbart før tidspunktet hvor Yderindlæserens docker container gik ned, og FileName
+ UUID
kolonnen i samme række vil fortælle hvilken fil i backup folderen der ikke blev afsluttet. Filen fra backupfolderen kan dernæst flyttes til input folderen så indlæsningen kan genoptages.
Beskrivelse af logs
Yderindlæ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
Code Block |
---|
22-06-2020 12:30:43,863 [Camel (camel-1) thread #4 - sftp://foo@localhost:33219/praksys] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-06-22 12:30:43.863" EndTime="2020-06-22 12:30:43.863" Duration="53 microseconds" MessageId="8d0bf2fe-d37d-46ad-bb16-19418eca1270" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet fetched" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","M.S1040025.00001.xml") }
22-06-2020 12:30:44,442 [Camel (camel-1) thread #5 - file:///tmp/yder/input] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-06-22 12:30:43.863" EndTime="2020-06-22 12:30:43.863" Duration="53 microseconds" MessageId="427705ca-83b3-45a5-9128-ceb46a649c52" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet received" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","M.S1040025.00001.xml") }
22-06-2020 12:30:49,344 [Camel (camel-1) thread #1 - AggregateTimeoutChecker] INFO dk.sdsd.nsp.slalogdata - LogPoint="LoggerBean" LogPointUniqId="LoggerBean" StartTime="2020-06-22 12:30:43.863" EndTime="2020-06-22 12:30:49.344" Duration="5481368 microseconds" MessageId="427705ca-83b3-45a5-9128-ceb46a649c52" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="DataSet completed" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(1)= { ("Input","M.S1040025.00001.xml") } |
Audit log
Denne log ligger i filen yderAudit.log
og indeholder overordnet logning af Yderindlæserens aktivitet
Code Block |
---|
timestamp="2020-06-22 12:30:44,565" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been preparsed"
timestamp="2020-06-22 12:30:48,097" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been parsed and splitted"
timestamp="2020-06-22 12:30:49,345" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been completed with status Completed" |
Application log
Denne log ligger i filen yderApplication.log
og indeholder detaljeret logning af Yderindlæserens aktivitet
Code Block |
---|
timestamp="2020-06-22 12:30:43,864" priority="DEBUG" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been fetched"
timestamp="2020-06-22 12:30:44,442" priority="DEBUG" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been received"
timestamp="2020-06-22 12:30:44,565" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been preparsed"
timestamp="2020-06-22 12:30:48,069" priority="DEBUG" class="dk.nsi.sdm.yder.parser.YderSaxParseSplitHandler" message="Parsed 59 yders and 54 persons"
timestamp="2020-06-22 12:30:48,097" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been parsed and splitted"
timestamp="2020-06-22 12:30:49,345" priority="INFO" class="dk.nsi.sdm.yder.bean.LoggerBean" message="The file M.S1040025.00001.xml has been completed with status Completed" |
Stat log
Denne log ligger i filen yderStat.log
og indeholder statistik logning af Yderindlæserens aktivitet
Code Block | |
---|---|