1. Formål
Dokument målrettet systemadministratorer og driftspersoner, som skal kunne håndtere driftsmæssige aspekter af komponenten.
Driftsvejledningen indeholder information om komponentens version, standard placering af logfiler og konfigurationsfiler, eksterne afhængigheder, og evt. krav til genstart af applikationer hvis komponenten ikke er responsiv.
Start/stop vejledning for komponenten beskrives, herunder hvilke andre applikationer der evt. skal genstartes. En generel læsevejledning til logfiler vedlægges.
2. Komponenter og funktionalitet
Dette dokument dækker følgende komponenter på NSP og Backoffice:
- NSP: BRS Frontend
- Statusurl: <serverurl>/brs-nsp/status
- Filnavn: brs-frontend-<version>.war
- Behandlingsrelationsservice
- Type: Webservice
- Url: <serverurl>/brs-nsp/service/brs
- Funktionalitet: benyttes af klienter til kontrol af behandlingsrelationer
- Notifikationsservice
- Type: Webservice
- Url: <serverurl>/brs-nsp/service/notification
- Funtionalitet: Benyttes af klienter til at hente notifikationer
- ReplicationJob (tidligere kendt som "GOS")
- Type: Batchjob
- Funktionalitet: overfører opfølgninger til backend
- Backoffice: BRS Backend
- Statusurl: <serverurl>/brs-backend/status/
- Filnavn: brs-backend-<version>.war
- ReplicationService
- Type: Webservice
- Url: <serverurl>/brs-backend/XXXXXXX
- Funktionalitet: modtager data fra frontend ReplicationJob
- FollowupJob
- Type: Batchjob
- Funktionalitet: verificerer om ønsket evidensniveau er opnået. Genererer notifikationer hvis tidsfristen for ønsket evidens er overskredet.
- CleanupJob
- Type: Batchjob
- Funktionalitet: Sletter forældede notifikationer
Komponenterne og deres funktionalitet ses vist i nedenstående diagram:
- SDM4 stamdata importeres. Der er i dag 4 registre som importeres og danner evidens-grundlag for visse behandlingsrelationer (henvisningshotellet/Refhost, Landspatientregisteret/LPR, ydelsesregisteret og sikrede registeret).
- Disse replikeres løbende fra den centrale database til cNSP'ens og dNSP'ernes databaser.
- Service providers (fx FMK og Sundhed.dk) kalder BRS for at registrere en adgang til data. Der angives hvilken person fra hvilken organisation, der har tilgået (eller skal til at tilgå) hvilken patient. Samtidig angives om, og i givet fald hvornår i fremtiden der ønskes opfølgning.
- BRS servicen checker først om der kan etableres tilstrækkelig evidens for en behandlingsrelation ud fra eksisterende evidens kilder.
- Hvis ikke, så skrives opslaget til Kafka.
- FollowupServlet kaldes løbende, og henter et batch fra Kafka.
- Bestillingerne behandles ud fra stamdata, eller lægges tilbage i køen hvis de først skal behandles senere.
- Notifikationer til service providers replikeres til databaserne på NSP'erne.
- Service provider (fx FMK) kalder notifikations-servicen for at hente de genererede notifikationer. Ud fra disse kan den data-ansvarlige for service providerne (fx FMK eller Sundhed.dk) følge op på, om opslagene alligevel var berettigede, fx stikprøvevis.
- Efter en fastsat periode slettes notifikationerne, uagtet om de er hentet af service providerne eller ej.
3. Daglig drift
BRS kræver ingen daglig vedligeholdelse udover sædvanlig systemovervågning.
4. Konfiguration
Al konfiguration på hhv. NSP og Backoffice foregår ved redigering i hhv. brs-frontend.properties og brs-backend.properties. Disse filer er volume-mappet, så de er tilgængelige på docker-hosten.
Bemærk at brs-frontend.properties og brs-backend.properties i visse situationer "overlapper", dvs. indeholder ens properties. Det skyldes fx at man forsøger at skabe evidens både i frontend og backend.
Nedenstående tabel giver en beskrivelse af hver property der kan sættes i filerne og dens default værdier.
Property |
Beskrivelse |
Default |
---|---|---|
dk.nsi.db.type |
Angiver hvilken type database der bruges, værdier kan være "hsqldb" til udvikling og "mysqldb" til test og produktion. |
hsqldb |
dk.nsi.auth.whitelistservice.type |
Hvilken whitelistservice bruges der. Kan enten være "property" eller "database" |
property |
dk.nsi.auth.create.type.cvr.list |
Bruges kun hvis "dk.nsi.auth.whitelistservice.type" er sat til "property" |
<tom> |
dk.nsi.auth.query.type.type.cvr.list |
Bruges kun hvis "dk.nsi.auth.whitelistservice.type" er sat til "property" |
<tom> |
dk.nsi.auth.brs.cvr.list |
Bruges kun hvis "dk.nsi.auth.whitelistservice.type" er sat til "property" |
|
dk.nsi.db.{navn}.url |
Database URL - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.{navn}.driverclass |
Database driver - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.{navn}.user |
Database brugernavn - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.{navn}.pwd |
Database adgangskode - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.{navn}.database |
Database navn - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.followupjob.enabled |
Angiver om jobbet er enablet. Er obligatorisk |
|
dk.nsi.days.to.postpone.next.check |
Bruges af FollowupJob: definerer tidsrummet for hvornår næste check af en opfølgning skal laves. Værdien er defineret i dage |
2 |
dk.nsi.followup.processing.cooldown.duration |
Periode der skal gå fra en followup-besked er blevet behandlet, til den kan behandles igen (hvis den er blevet sat til udførsel i fremtiden). Angives som en "Duration". |
PT0S |
dk.nsi.followup.processing.increment.duration |
Perioden cooldown forøges med når der ikke har været processeret nogen followup-beskeder. Angives som en "Duration". |
PT0S |
dk.nsi.followup.processing.max.duration |
Den maksimale perioden cooldown må have. Angives som en "Duration". |
PT0S |
dk.nsi.followup.processing.consumer.pool.size |
Antal consumere der er tigængelige til behandling af followup-beskeder. |
20 |
dk.nsi.followup.processing.thread.pool.size |
Størrelsen på den thread pool som en consumer har til behandling af followup-beskeder. |
20 |
dk.nsi.notificationcleanupjob.enabled |
Angiver om jobbet er enablet. Er obligatorisk |
|
dk.nsi.notificationcleanupjob.schedule |
CRON-udtryk der afgør hvornår jobbet kører. Se evt. denne beskrivelse. Er obligatorisk. |
|
dk.nsi.notificationcleanupjob.olderThanDays |
Fjern alarmer som er ældre end denne værdi. Værdien er defineret i dage |
75 |
dk.nsi.notificationcleanupjob.maxtime |
Max tid i minutter en oprydning må tage før der laves en alarm. |
120 |
dk.nsi.relation.assigneddoctor.update.frequency |
Bruges af brs-nsp til at udregne hvilken relation der er mellem patient og læge. |
10 |
dk.nsi.relation.refhost.update.frequency |
Bruges af brs-nsp til at udregne hvilken relation der er mellem patient og læge. |
2 |
dk.nsi.relation.ssr.update.frequency |
Bruges af brs-nsp til at udregne hvilken relation der er mellem patient og læge. |
62 |
dk.nsi.app.name | Angiver navnet på applikationen. Bruges til at oprette SlaLogInput, som bruges til SLA logninger i facaden mod SORES. | Behandlingsrelationsservice |
dk.nsi.app.shortName | Angiver navnet på applikationen i kort form. Bruges til at oprette SlaLogInput, som bruges til SLA logninger i facaden mod SORES. | BRS |
dk.nsi.brs.relayer.sor.all.enabled |
Denne variable bruges til at styre om det skal være ny kode der skal bruges. Den "gamle" kode er dog opdateret, så den bruges SOR servicen til at mappe fra Shak til Sor. |
true |
dk.nsi.brs.sor.url |
Der peges på den SORES service man vil kalde op imod. Hvis man har en lokal udgave kørende af SORES servicen, så kan man med fordel ændre url'en til http://localhost:8080/sores |
http://test1-cnsp.ekstern-test.nspop.dk:8080/sores/ |
dk.nsi.brs.sor.fail.threshold |
Denne værdi bruges i IsAlive fra MSBUtil. Den angiver hvor mange tidligere kald til servicen, hvor vi holder styr på status. Så hvis værdien er 10, så gemmes status for de sidste 10 kald og hvis blot en af dem har været gennemført uden fejl, så antages servicen at være tilgængelig. |
10 |
dk.nsi.brs.sor.max.total.connections | Maksimalt samtidigt antal kald til SORES | 200 |
dk.nsi.brs.sor.default.max.connections.per.route | Maksimalt samtidigt antal kald til samme SORES-operation. | 20 |
kafka.topic.dk.nsi.brs | Navn på det topic, som opfølgningsbestillinger skal sendes til og hentes fra. | followup-topic |
kafka.consumer.client.id | Id der anvendes af Kafka consumere i løsningen. | brs-backend-consumer |
kafka.producer.client.id | Id der anvendes af Kafka producere i løsningen. | brs-backend-producer / brs-frontend-producer |
kafka.consumer.group.id | Group-id der anvendes af Kafka consumere i løsningen. | BRS_GROUP_ID |
kafka.producer.bootstrap.servers | Url til Kafka bootstrap-server. | kafka:9092 |
kafka.consumer.enable.auto.commit | Om der skal anvendes auto-commit i kafka-consumere. | false |
kafka.consumer.auto.offset.reset | Offset der resettes til, f.eks. hvis en consumer ikke har committed sit offset. | earliest |
kafka.consumer.max.poll.records | Maksimalt antal beskeder en consumer kan hente fra Kafka ad gangen. Indstillingerne max.poll.records, max.partition.fetch.bytes og fetch.max.bytes bør justeres i sammenhæng. | 500 |
kafka.consumer.max.partition.fetch.bytes | Maksimalt antal bytes per partition, som en consumer kan hente fra Kafka ad gangen. Indstillingerne max.poll.records, max.partition.fetch.bytes og fetch.max.bytes bør justeres i sammenhæng. | 1048576 |
kafka.consumer.fetch.max.bytes | Maksimalt antal bytes en consumer kan hente fra Kafka ad gangen. Indstillingerne max.poll.records, max.partition.fetch.bytes og fetch.max.bytes bør justeres i sammenhæng. | 52428800 |
kafka.consumer.poll.timeout | Maksimale antal millisekunder Kafka consumeren skal foretage poll inden den timer ud. | 1000 |
kafka.consumer.max.wait.millis | Maksimale antal millisekunder Kafka consumeren venter hvis der kommer flere kald ind end der er Followup objekter i pool'en. | 1000 |
kafka.consumer.max.pool.size | Maksimale antal Followup objekter i pool'en. | 20 |
kafka.consumer.max.records | Maksimale antal beskeder Kafka consumeren kan processere ad gangen. | 50 |
kafka.consumer.max.processing.time | Den maksimale tid Kafka consumeren må bruge på at behandle beskeder fra consumeren. Angives som en "Duration". | PT10000S |
Følgende databaser kan refereres via {navn} ovenfor:
Miljø |
Navn |
Beskrivelse |
---|---|---|
BRS-Frontend |
stamdata |
AssignedDoctor-stamdata |
|
register_notifications |
Notifikationer til klienter samt SSR/LPR/REFHOST-stamdata. MySQL-replikeres fra backend |
BRS-Backend |
stamdata |
AssignedDoctor-stamdata |
|
register_notifications |
Notifikationer til klienter samt SSR/LPR/REFHOST-stamdata. MySQL-replikeres til frontends |
Kafka-migration |
treatment_releation_followup |
Data der modtages fra frontends, og skal migreres til Kafka. |
4.1. Konfiguration af FollowupJob
Servicens job til behandling af opfølgningsbestillinger bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald.
Dette gøres for at sikre afviklingen af jobbet i fler-node drift, hvor en loadbalancer sørger for fordeling af kald til bagvedliggende servere.
Driften vedligeholder en cron, som kalder jobbets url i et fast mønster vha. curl.
Indstillinger relateret til behandling af opfølgningsbestillinger er beskrevet i tabellen ovenfor.
Kommando til kald af slettejob:
curl <server>/brs-backend/followup
Kaldet vil returnere 200 OK hvis alt går godt, ellers 500 Internal Server Error.
4.2. Konfiguration af Oprydningsjob
Servicens job til oprydning bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald.
Dette gøres for at sikre afviklingen af jobbet i fler-node drift, hvor en loadbalancer sørger for fordeling af kald til bagvedliggende servere.
Driften vedligeholder en cron, som kalder jobbets url i et fast mønster vha. curl.
Kommando til kald af oprydningsjob:
curl <server>/brs-backend/notificationcleanupjob
Kaldet vil returnere 200 OK hvis alt går godt, ellers 500 Internal Server Error.
4.3. Tilføjelse af CVR-numre og typer
Tilføjelse af CVR numre og typer på NSP'erne foregår i MySQL i tabellen whitelist_config i databasen register_notification. Når en ny af disse tilføjes replikeres opsætningen ud til de øvrige NSP'er automatisk. Der kræves ingen opdatering af brs-frontend/brs-backend.properties i den forbindelse.
4.4. Duplikering af data for CVR-nummer ifm. certifikatskift
I forbindelse med udskiftning af et anvendercertifikat kan det være nødvendigt at duplikere data for et CVR-nummer, som beskrevet i anvenderguiden, afsnit 2.5. Hvis der er behov for dette, køres nedenstående SQL-script.
Inden scriptet køres, justeres variablerne old_cvr og new_cvr.
4.5. Validering af SAML ID-kort
Der anvendes security-api til validering af SAML ID-kort. Hvis miljøvariablen NSP_TEST_FEDERATION
er sat til true
, vil ID kort blive valideret mod test-føderationen, ellers mod prod-føderationen.
5. Overvågning
BRS-frontend og BRS-backend udstiller overvågningssider, som findes i listen af komponenter i afsnit 2.
På overvågningssiderne fremgår komponentens version og build-dato, opstartstidspunkt samt tidspunkt for testudførsel. Desuden vises udvalgte metrikker angående kaldmængder/antal processeringer (se eksempler i afsnit 5.5).
5.1. Fortolkning af HTML overvågningsside
BRS-overvågningssider returnerer enten:
- HTTP 200 hvis de i øjeblikket kører fint
- HTTP 202 hvis BRS-frontend ikke kan få forbindelse til BRS-backend
- HTTP 500 hvis der er opstået en fejl der kræver indgriben
Grunden til at der returneres HTTP 202 hvis der ikke er forbindelse til backend er, at BRS-frontend stadig kan modtage data, og derfor ikke skal tages ud af load-balanceren. Dog kan fejlen ikke ignoreres på længere sigt.
5.2. Overvågningstyper
Der overvåges databaseadgang for de enkelte datasources ved et simpelt "SELECT 1" statement.
For batchjob overvåges der seneste succesfulde kørsel. Hvis denne ikke er udført inden for det forventede tidsrum giver dette anledning til en fejl.
Enhver tilgang til en overvågningsside giver anledning til en mere detaljeret log-indgang hvis den giver fejl.
5.3. Logfiler og fortolkning af disse
Alle logfiler er at finde i "log" under Wildfly. Herunder findes en liste over alle logfiler med en beskrivelse af hvilke komponenter der skriver til dem. De enkelte filnavne er konfigureret i hhv. brs-backend-log4j.xml og brs-frontend-log4j.xml, og er volume-mappet ind, så de er tilgængelige på docker--hosten. Alle logs benytter en rolling file appender, og indeholder derfor et postfix i filnavnet (fx brs-frontend.log.1) der ikke er præsenteret i nedenstående liste.
Logfilnavn |
Komponenter der skriver til denne |
---|---|
brs-frontend.log |
brs-frontend. Diverse logninger af komponentens opførsel, inklusiv fejllogninger og audit-logninger af requests vha. Audit-api. |
brs-metrics.log |
Indeholder udvalgte logninger om svartider, antal behandlede records osv. Skrives både af frontend og backend. |
brs-backend.log |
brs-backend. Diverse logninger af komponentens opførsel, inklusiv fejllogninger. |
Ved en fejl på en overvågningsside skrives der til den relevante brs-frontend/brs-backend.log. Alle logs indekseres med Splunk.
5.3.1. Logning af Evidens tjek
Det forventes at driften opsamler alle logninger fra dk.nsi.brs.common.audit.EvidenceLogger, da den udtømmende liste af logninger er forholdsvis stor. Den vil på sigt også kunne justeres, så der kommer ændrede logninger.
I forbindelse med at LPR3 gør brug af SORES, som kilde til bl.a. mapning fra Shak til Sor, så er der også indført en mere detaljeret logning af de tjeks der udføres, når klassifikation skal findes for hver af typerne LPR, LPR3, SIKREDE, REFHOST og SSR.
- msg
- Start - Logges ved oprettelse af en EvidenceLog
- Input - Oplysning omkring evidenskilder.
- Key: Nøgle som bruges til at identifisere f.eks. input
- Data: indhold af f.eks. input
- Execute - Ved en samling af tjek, der har en logisk sammenhæng, logger vi om samlingen bliver udført eller om den springes over.
- Action: Hvilken handling kan udføres
- Active: Skal handlingen udføres - besvares med yes eller no
- Collect - Når ekstern service kaldes for at samle input data (f.eks. kald af Sores Service)
- Collect Identifier: Formatet for denne id er D? og den har sammenhæng med de identer der er på flowet for LPR3 under BRS - Design- og Arkitekturbeskrivelse
- From: Hvilken kilde levere data
- Into: Hvilken input nøgle gemmes data i
- Parametre: Kommer altid i sæt af 2 i formatet KEY=VALUE. Antallet af parametre er ukendt, da det afhænger af hvilken service der blivver kaldt.
- Check - Tjek der udføres
- Check Identifier: Formatet for denne id er C? og den kobles med de identer der er angivet i flowet for LPR3 under BRS - Design- og Arkitekturbeskrivelse
- Question: Det spørgsmål der ønskes besvaret. De kan være taget direkte fra flow diagrammet for LPR3 under BRS - Design- og Arkitekturbeskrivelse. Men dette er ikke et krav.
- Answer: Spørgsmålet besvaret med fritekst eller med yes/no
- Check Identifier: Formatet for denne id er C? og den kobles med de identer der er angivet i flowet for LPR3 under BRS - Design- og Arkitekturbeskrivelse
- Suggest - En rækker krav er opfyldt og en forløbig klassifikationer kan angives
- Suggestion: Den klassifikation der ønskes
- Current: Den nuværende klassifikation
- Suggestion: Den klassifikation der ønskes
- Stop - EvidenceLog lukkes og endeligt klassifikationsresultat logges.
- Classification Result (Se listen over klassifikationer under BRS - Design- og Arkitekturbeskrivelse samt Behandlingsrelationsservice (BRS) - Leverancebeskrivelse
- Classification Result (Se listen over klassifikationer under BRS - Design- og Arkitekturbeskrivelse samt Behandlingsrelationsservice (BRS) - Leverancebeskrivelse
For alle rækker i en Evidens log findes værdierne:
- Type: LPR3 - På sigt vil der komme yderligere typer til. Nu findes kun EvidensLog for LPR3
- flowID: Hvis den er sat på medcom headeren. Et samlet Evidenssæt vil have samme flowID.
- messageID: Hvis sat på medcom headeren.
- securityLevel: Hvis sat på medcom headeren.
5.3.2. Audit logning
Auditlogning foretages med det officielle NSP Audit Log modul.
Kald af metoden treatmentRelation på webservicen BRSFacade logges følgende oplysninger:
Komponent | Kontekst | Type | Nøgle | Information |
---|---|---|---|---|
BRS | TreatmentRelationRequest | Personlig | cvrFromHeader | CVR nummeret for den kaldende organisation |
BRS | TreatmentRelationRequest | Ikke Personlig | queryableCvr | CVR nummer der skal have adgang til en eventuel efterfølgende notifikation. |
BRS | TreatmentRelationRequest | Personlig | healthProfessionalIdentifierCpr | Behandlers cpr-nummer. |
BRS | TreatmentRelationRequest | Ikke Personlig | healthProfessionalIdentifierValidityStart | Starttidspunkt for hvilket behandleren har foretaget opslaget. |
BRS | TreatmentRelationRequest | Ikke Personlig | healthProfessionalIdentifierValidityEnd | Sluttidspunkt for hvilket behandleren har foretaget opslaget. |
BRS | TreatmentRelationRequest | Ikke Personlig | acceptableRelations | En liste af acceptable relationer |
BRS | TreatmentRelationRequest | Personlig | authorisationIdentifier | Autorisationskode for den behandleren. |
BRS | TreatmentRelationRequest | Ikke Personlig | followupRelations | En liste af relationer der, i tilfælde af at ingen acceptable relationer forefindes, vil give anledning til en opfølgning |
BRS | TreatmentRelationRequest | Personlig | doctorOrganisationIdentifier | Organisationen inden for hvilken relationen skal findes |
BRS | TreatmentRelationRequest | Personlig | ean | Organisationen inden for hvilken relationen skal findes |
BRS | TreatmentRelationRequest | Personlig | hospitalOrganisationIdentifier | Organisationen inden for hvilken relationen skal findes |
BRS | TreatmentRelationRequest | Personlig | sor | Organisationen inden for hvilken relationen skal findes |
BRS | TreatmentRelationRequest | Personlig | patientCpr | Patientens cpr-nummer. |
BRS | TreatmentRelationRequest | Ikke Personlig | timeLimit | Udløbstidspunkt for opfølgningen efter hvilket der skal oprettes en notifikation, hvis de angivne kriterier ikke er opfyldt |
BRS | TreatmentRelationRequest | Ikke Personlig | serviceProviderVendor | Udvikler af klient |
BRS | TreatmentRelationRequest | Ikke Personlig | serviceProviderName | Navn på serviceudbyderen/klienten |
BRS | TreatmentRelationRequest | Ikke Personlig | serviceProviderVersion | Version af klient |
BRS | TreatmentRelationRequest | Ikke Personlig | didCallerSpecifyExternalReferenceId | Var ekstern reference identifikation angivet i request |
BRS | TreatmentRelationRequest | Ikke Personlig | externalReferenceId |
Et id der vil blive brugt ved returnering af en eventuel notifikation. |
BRS | TreatmentRelationRequest | Ikke Personlig | uid | Genereret unik identifikation |
BRS | TreatmentRelationRequest | Ikke Personlig | uniqueReferenceId | Unik identifikation angivet i svaret Samme som uid |
BRS | TreatmentRelationRequest | Følsomme | actualRelations | Aktuelle forbindelser |
Eksempel på auditlogningen:
5.4. Konfiguration af overvågning
Følgende settings påvirker overvågningssnitfladen
dk.nsi.followupjob.maxtime=120
dk.nsi.notificationcleanupjob.maxtime=120
dk.nsi.replicationjob.maxtime=120
Her angiver man i minutter hvor langt tid de enkelte jobs max må tage at udføre inden overvågningssnitfladen vil begynde at returnerer HTTP 500.
5.5. Eksempler på status-sider
BRS-frontend OK:
BRS-frontend med warning om manglende forbindelse til backend (HTTP 202):
BRS-backend OK:
BRS-backend med fejl pga. MySQL (HTTP 500):
BRS-backend med fejl pga. at behandlingstiden for en opfølgning er for lang. Fejlen opstår når et batch til opfølgning tager for lang tid. Og status viser både hvorhvornår en kørsel er kørt helt færdig (lastSuccessfullAllBatches), og hvornår et batch er blevet kørt færdig (lastSuccessfulRun). Er lastSuccessfullAllBatches blank, betyder det, at der er tale om den første batchkørsel siden start af servicen, og den endnu ikke er afsluttet.
Status-siderne er også i stand til at trække yderligere informationer om køstørrelser osv. fra MySQL. Disse oplysninger inkluderes dog ikke i de normalt responses, da de genererer et vist load på MySQL, men de kan trækkes ved at tilføje en "?detailed"-parameter på URLen til status-siden (fx http://host:port/brs-nsp/status?detailed).
Nedenfor ses eksempler på hvilke oplysninger der inkluderes på hhv. frontend og backend. På frontend ses det at der ligger 5 records der afventer overførsel til backend, samt 1 notification der kan hentes af klienter:
På backend rapporteres det, at followup-jobbet har 5 records der afventer behandling, 85 records der er udsat til senere check, samt en notifikation der kan hentes af klienter:
6. Standard fejlsøgning
- Hvis status-siden giver HTTP 500 bør man checke den tilsvarende brs-frontend/brs-backend.log, som typisk vil indeholde en mere detaljeret fejlmeddelelse end status-siden (stacktrace osv).
- Ved problemer med indlæsning af brs-frontend/brs-backend.properties bør man verificere at filen er volume-mappet korrekt ind i configuration/ biblioteket. Vær opmærksom på at filen ikke læses hvis den ikke er til stede ved opstart af Wildfly.
- Kontroller altid præcist hvilke jobs og services der er nede. Hvis BRS-backend er nede vil det også give sig udslag i warning på BRS-frontend, som i så fald ikke kan sende data videre. I den situation hjælper det ikke at genstarte BRS-frontend. Hvor ofte jobs køres kan konfigureres i property-filerne.
- En service eller et job kan stoppes og starter gennem docker.
7. Krav til backup m.m.
Data fra eksterne registre vil løbende blive slettet. Der bør derfor foretages backup af indkomne registerdata på en forsvarlig måde, i tilfælde af behovet for en genetablering af data på register_alarm i tilfælde af nedbrud. Disse skal opbevares på en forsvarlig måde da der er tale om personhenførbare data.
8. Migrering ved overgang til Kafka-løsning
I release 2.1.0 er BRS ændret, så Kafka anvendes til at vedligeholde køen af bestilte opfølgninger. Anvendelsen af Kafka erstatter den tidligere followup-database. I den forbindelse er der brug for at behandle de bestillinger der allerede ligger i followup-databasen, og sætte dem i kø i Kafka. Til dette formål er der udviklet en kommandolinjeapplikation, kafka-migration, som leveres som et docker-image (navn: registry.nspop.dk/components/brs/kafka-migration). Applikationen forbinder til followup-databasen og kafka-serveren, og fungerer som følger:
- Hent et batch af bestillinger fra BRS2_TreatmentRelationFollowup-tabellen.
- Hver bestilling sættes i kø som en kafka-besked.
- Bestillingerne slettes fra BRS2_TreatmentRelationFollowup-tabellen.
Applikationen udfører ovenstående procedure, ind til BRS2_TreatmentRelationFollowup-tabellen er tom. I tilfælde af fejl standser applikationen.
Applikationen konfigureres i filerne kafka-migration.properties og log4j.properties. Disse filer volume-mountes på stien /config. Nedenfor dokumenteres indholdet af kafka-migration.properties. Indholdet af filen log4j.properties er standard og forventes ikke at skulle ændres, og en gennemgang af indholdet er derfor udeladt.
Property |
Beskrivelse |
Default |
---|---|---|
dk.nsi.db.treatment_relation_followup.url |
Database URL - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.treatment_relation_followup.driverclass |
Database driver - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.treatment_relation_followup.user |
Database brugernavn - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.treatment_relation_followup.pwd |
Database adgangskode - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.db.treatment_relation_followup.database |
Database navn - se tabel med miljøspecifikke oplysninger for databaser for detaljer om {navn} |
|
dk.nsi.brs.kafka.topic |
Kafka-topic som bestillinger skal publiceres til |
|
kafka.producer.client.id |
Client-id på den kafka-producer, der ikøsætter bestillinger. |
|
kafka.producer.bootstrap.servers |
Url til Kafka bootstrap-server. |
I development-setuppet (compose/development/docker-compose.yml) findes et eksempel på, hvordan applikationen sættes op.