Introduktion

Formål

Dette dokument indeholder en beskrivelse af hvordan National Adviseringsservice 2 (herefter NAS2) driftes på et NSP Backend miljø.

Læsevejledning

Læseren forventes at have kendskab til Sundhedsdatastyrelsens platform NSP, samt generelt kendskab til WildFly applikation server, Docker, Docker Compose samt Ubuntu Linux operativ system.

Dokument Historik

DatoAnsvarligBeskrivelse
TBDJacob QvortrupDraft udgave af driftvejledningen

Definitioner og referencer

ReferenceBeskrivelse
NAS2National Adviseringsservice 2
NAS1National Adviseringsservice 1
NSPDen nationale service platform
DriftenNSP Leverandøren og NSP Driftleverandøren
SDSSundhedsdatastyrelsen
InstallationsvejledningNAS2 - Installationsvejledning

Konfiguration

Konfiguration af NAS2 sker i filerne i "compose/configuration" mappen som beskrevet i installationsvejledningen. I det følgende gennemgåes hver enkelt services konfigurationsfiler i detaljer.

Notification Broker service

Denne service konfigureres i filerne "notificationbroker.properties" og "log4j-notificationbroker.xml".

notificationbroker.properties

PropertyBeskrivelse
kafka.producer.bootstrap.serversKommasepareret liste af Kafka servere som NAS2 skal anvende. Denne liste bør indeholde alle noderne i Kafka clusteret
kafka.producer.client.idNavnet som NAS2 vil fremgå med i listen af Producers på et Kafka Cluster.
nsp.kafka.producer.component.nameNavnet på NAS2 komponenten
nsp.kafka.producer.component.abbreviationKort navn på NAS2 komponenten
nsp.kafka.producer.component.versionVersionen af NAS2 komponenten
nsp.kafka.producer.service.nameNavnet på den service i NAS2 der anvender Kafka
datasource.jndiJNDI navnet på den datasource der giver adgang til NAS2 databasen.
app.endpointService endpoint (anvendes i DKS servlet)

Alle properties der starter med "kafka.producer." vil blive givet videre til NSP Kafka Clients API'et og derved videre til Kafka Clients. Det er derved muligt at konfigurere alle aspekter af Kafka klienten som måtte være ønsket, blot ved at tilføje nye properties. Hvis f.eks. Kafka konfigurationen "abc" skulle sætte til "42" så tilføjes blot linien "kafka.producer.abc=42".

log4j-notificationbroker.xml

Denne fil indeholder en Log4J opsætning der følger gængs standard på NSP.

ID List service

Denne service konfigureres i filerne "idlist.properties" og "log4j-idlist.xml"

idlist.properties

PropertyBeskrivelse
datasource.jndiJNDI navnet på den datasource der giver adgang til NAS2 databasen.
app.endpointService endpoint (anvendes i DKS servlet)

log4j-idlist.xml

Denne fil indeholder en Log4J opsætning der følger gængs standard på NSP.

Subscription Manager service

Denne service konfigureres i filerne "subscriptionmanager.properties" og "log4j-subscriptionmanager.xml"

subscriptionmanager.properties

PropertyBeskrivelse
kafka.consumer.bootstrap.serversKommasepareret liste af Kafka servere som NAS2 skal anvende. Denne liste bør indeholde alle noderne i Kafka clusteret
kafka.consumer.client.idNavnet som NAS2 vil fremgå med i listen af Consumers på et Kafka Cluster.
nsp.kafka.consumer.component.nameNavnet på NAS2 komponenten
nsp.kafka.consumer.component.abbreviationKort navn på NAS2 komponenten
nsp.kafka.consumer.component.versionVersionen af NAS2 komponenten
nsp.kafka.consumer.service.nameNavnet på den service i NAS2 der anvender Kafka
datasource.jndiJNDI navnet på den datasource der giver adgang til NAS2 databasen.
app.endpointService endpoint (anvendes i DKS servlet)

log4j-subscriptionmanager.xml

Denne fil indeholder en Log4J opsætning der følger gængs standard på NSP.

Pullpoint Factory service

Denne service konfigureres i filerne "pullpointfactory.properties" og "log4j-pullpointfactory.xml"

pullpointfactory.properties

PropertyBeskrivelse
kafka.consumer.bootstrap.serversKommasepareret liste af Kafka servere som NAS2 skal anvende. Denne liste bør indeholde alle noderne i Kafka clusteret
kafka.consumer.client.idNavnet som NAS2 vil fremgå med i listen af Consumers på et Kafka Cluster.
nsp.kafka.consumer.component.nameNavnet på NAS2 komponenten
nsp.kafka.consumer.component.abbreviationKort navn på NAS2 komponenten
nsp.kafka.consumer.component.versionVersionen af NAS2 komponenten
nsp.kafka.consumer.service.nameNavnet på den service i NAS2 der anvender Kafka
datasource.jndiJNDI navnet på den datasource der giver adgang til NAS2 databasen.
app.endpointService endpoint (anvendes i DKS servlet)

log4j-pullpointfactory.xml

Denne fil indeholder en Log4J opsætning der følger gængs standard på NSP.

Pullpoint service

Denne service konfigureres i filerne "pullpoint.properties" og "log4j-pullpoint.xml"

pullpoint.properties

PropertyBeskrivelse
kafka.consumer.bootstrap.serversKommasepareret liste af Kafka servere som NAS2 skal anvende. Denne liste bør indeholde alle noderne i Kafka clusteret
kafka.consumer.client.idNavnet som NAS2 vil fremgå med i listen af Consumers på et Kafka Cluster.
nsp.kafka.consumer.component.nameNavnet på NAS2 komponenten
nsp.kafka.consumer.component.abbreviationKort navn på NAS2 komponenten
nsp.kafka.consumer.component.versionVersionen af NAS2 komponenten
nsp.kafka.consumer.service.nameNavnet på den service i NAS2 der anvender Kafka
datasource.jndiJNDI navnet på den datasource der giver adgang til NAS2 databasen.
app.endpointService endpoint (anvendes i DKS servlet)

log4j-pullpoint.xml

Denne fil indeholder en Log4J opsætning der følger gængs standard på NSP.

Database

Adgang til NAS2 databasen styres gennem filen "nas-ds.xml" - Denne skal matche det NSP miljø hvor komponenten afvikles i.

Kafka

NAS2 skal anvender NSP Kafka Clusteret på NSP Backend miljøet. Der kræves ikke nogen særlig opsætning af Kafka i forhold til det eksisterende NSP Kafka Cluster.

Aktiviteter

I det følgende gennemgåes de manuelle aktiviteter der skal ske i databasen og i Kafka ifm driften af NAS2.

Nyt Topic

For at NAS2 skal kunne modtage adviseringer på et Topic skal dette oprettes i Kafka og i databasen.

Først oprettes Kafka Topic via følgende kommando:

bin/kafka-topics.sh --create --bootstrap-server kafka-host:port --replication-factor 2 --partitions 15 --topic dk.nsp.nas.fmk.MedicineCard

Herefter mappes dette Kafka Topic til et WS-Notification Topic i databasen på følgende måde:

INSERT INTO TopicMapping
	(topic, internal_topic)
VALUES
	('http://www.dkma.dk/medicinecard/xml.schema/2012/06/01:MedicineCard', 'dk.nsp.nas.fmk.MedicineCard');

Lukke for et Topic

For at lukke for nye adviseringer til et Topic opdateres rækken i "TopicMapping" på følgende måde:

UPDATE TopicMapping SET active = false where topic ="http://www.dkma.dk/medicinecard/xml.schema/2012/06/01:MedicineCard";

Slette et Topic

For at slette et topic bør det først være inaktivt i en periode således at der ikke kan afleveres nye data og modtagere kan nå at afhente alle deres adviseringer. Derefter skal nedenstående udføres. 

Nedenstående sletter topic fra NAS databasen. 

delete from TopicMapping where topic = 'http://www.dkma.dk/medicinecard/xml.schema/2012/06/01:MedicineCard';

Nedenstående sletter topic i kafka.

bin/kafka-topics.sh --delete --bootstrap-server kafka-host:port --topic dk.nsp.nas.fmk.MedicineCard


Udvide antallet af partitioner

Hvis der opstår et behov i Kafka for at udvide antallet af partitioner for et Topic, skal der ikke foretages noget i NAS2 idet den selv opdager dette og tilpasser sig det nye antal.

Overvågning

Alle services i NAS udstiller en status side. På denne side fremgår servicens versionsnummer samt status for adgang til database og/eller Kafka. Status siden kan tilgås via http://CAVE/larservice/health

Eksempel på svar på fra status-siden. 

HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Undertow/1
Server: WildFly/8
Content-Type: application/json
Content-Length: 82
Date: Fri, 10 May 2019 08:06:26 GMT

{
	"version": "1.0.0-SNAPSHOT"
	,"database": "OK"
	,"kafka streamer": "OK"
}

HTTP statuskode

Status-siden returnerer følgende status koder afhængig af servicens status. 

200: Applikationen er sund

500: Der er opstået en fejl i applikationen eller en af de services der integreres med.

Fejlfinding

Såfremt der er problemer med adgang til servicens database, vises nedenstående fejl. Bemærk at den giver en HTTP statuskode 500, og at man i body kan se, at det er cave servicen der ikke er OK.

HTTP/1.1 500 Internal Server Error
Connection: keep-alive
X-Powered-By: Undertow/1
Server: WildFly/8
Content-Type: application/json
Content-Length: 103
Date: Wed, 20 Feb 2019 13:30:11 GMT
 
 
{"minLogOk":true,"consentOk":true,"treatmentRelationOk":true,"caveOk":false,"version":"1.0.0-SNAPSHOT"}

Følgende årsager kan resultere i en statuskode 500. 

Hvis status-siden returnerer HTTP status 500 bør man tjekke applikationsloggen, da fejl logges her til. 

Servicen kan genstartes ved at genstarte den docker container, som servicen den kører i. 

Statistiklogning

Som en del af den almindelige applikationslog foretages en række logninger særligt beregnet til udtræk til statistik og ledelsesinformation.

Følgende logningspunkter til statistik er defineret:

LogningspunktKomponent

Eksempel på message fra applikationsloggen

(formatteret så det er lettere at læse i denne vejledning)

Der logges når der oprettes et PullPoint. Hertil medtages yderligere information, så som ejeren, evt. abonnement og URL, der er tilknyttet.

PullPointFactory

Service

STATISTIK: {
"action":"createPullPoint",
"info":{
"pullPointId":"98a3f337-4a65-45db-9001-2c9f0b69ff05",
"ownerItSystem":"NAS2UnitTests",
"ownerCvr":"46837428"}}

Logning af alle forespørgsler til Pull Point service herunder antal af adviseringer, der medtages i svaret.

Der logges også om der var tale om replay (DGWS).

PullPoint

Service

STATISTIK: {
"action":"getmessages",
"info":{
"pullPointId":"2acedce5-c00a-40bc-8ddf-fe6de2a596a3",
"subscriptionIds":["a34c720f-9c26-4832-83d1-8671d4b6f7f3"],
"quota":2,
"replay":false}}

Alle kald til Notification Broker skal ligeledes logges sådan at antal af adviseringer modtaget kan uddrages. Her vil topic også medtages.

NotificationBroker

Service

STATISTIK: {
"action":"notify",
"info":{
"quota":1,
"topic":"TESTNAS-TOPIC1"}}

Databasen

Database modellen er beskrevet i Design og Arkitektur dokumentet (LINK MANGLER)