Dette dokument dækker følgende komponenter på NSP:
Dokumentregistrerings- og oprettelsesservice
Type: Webservice
Filnavn: dros.war
Url: <serverurl>/dros
Servicecheckurl: <serverurl>/drs/status
Versionurl: <serverurl>/dros/health returnerer en json struktur med denne
Grundlæggende konfiguration foregår ved redigering i filen dros.properties, der placeres i følgende WildFly modul:
/pack/wildfly8/modules/sds/dros/configuration/main/
Moduldefinitionen er at finde i sourcekoden til dros under:
/dros-war/etc/modules/sds/dros/configuration/main/module.xml
I filen skal følgende properties være definerede:
Property | Beskrivelse |
dros.url.prefix | URL prefix der indsættes i wsdl'er og bruges af dks-servlet. |
dros.app.name | Anvendes af dks-servlet |
iti41.service.endpoint | Endpoint på ITI41-backend. |
iti41.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
iti42.service.endpoint | Endpoint på ITI42-backend. |
iti42.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
iti57.service.endpoint | Endpoint på ITI57-backend. |
iti57.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
iti61.service.endpoint | Endpoint på ITI61-backend. |
iti61.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
dros.backend.failure.threshold | Tærskel for, hvor mange gang i træk et kald til en backend må fejle, før denne backend betragtes som 'død' af status-siden. |
cprexists.validationlevel | Valideringsniveau for CPR validering Eksempel: WARNING, REJECT, OFF |
cprexists.url | URL for CPR exist service Eksempel: http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-cprexists |
cprexists.maxTotalConnections | Konfiguration af client pool til kald af CPRExists service Default: 200 |
cprexists.defaultMaxConnectionsPerRoute | Konfiguration af client pool til kald af CPRExists service Default: 20 |
Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen
Se yderligere opsætning i installationsvejledningen.
DROS udstiller en overvågningsside, som findes i listen af komponenter i afsnit 2.
DROS-overvågningssiden returnerer enten:
Det overvåges for hver backend, om kaldene til backenden går galt. Det kan konfigureres, hvor mange kald i træk der må gå galt, før en backend betragtes som 'død'.
200 OK
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "0/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "0/50 fejl"
Det fremgår for hver backend, om kaldene til den går godt eller ej.
203 Non-authoritative Information
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "0/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "55/50 fejl"
Hvis kaldene til cprexists backend ikke kan udføres, så returneres statuskode 203 (indenfor failure threshold, som kan sættes op som en konfigurationsparameter).
500 Internal Server Error
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "55/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "0/50 fejl"
Hvis kaldene til een af ITI backends ikke kan udføres, så returneres statuskode 500 (indenfor failure threshold, som kan sættes op som en konfigurationsparameter).
Hvert servicekald medfører en ny indgang i auditloggen, som er udfyldt som følger:
* Component: DROS/<operation>, hvor <operation> er navnet på den operation der kaldes, f.eks. ProvideAndRegisterDocumentSetB.
* Context: Udfyldes med DocumentId. Hvis requestet indeholder flere dokumenter, oprettes en context for hvert dokument.
For hver context skrives følgende informationer
Felt | Type | Indhold |
---|---|---|
DocumentId | RegularPersonalInformation | DokumentId'et. |
DocumentType | RegularPersonalInformation | Dokumentets TypeCode |
CitizenId | RegularPersonalInformation | PatientId, som dokumentet omhandler. |
FormatCode | RegularPersonalInformation | FormatCode |
SubmissionSet | RegularPersonalInformation | UniqueId fra SubmissionSet i request. |
AssociationSourceId | RegularPersonalInformation | SourceId fra association, hvis dokumentet er enten source eller target på association. |
AssociationTargetId | RegularPersonalInformation | TargetId fra association, hvis dokumentet er enten source eller target på association. |
AssociationType | RegularPersonalInformation | AssociationType fra association, hvis dokumentet er enten source eller target på association. Den fulde URI logges. |
Nedenfor ses eksempler fra auditloggen ved kald af de forskellige snitflader.
{ "time":"2021-05-03T21:04:01.676Z", "category":"dk.sds.nsp.audit.log.dros/registerondemanddocumententry", "audit":{ "timestamp":"2021-05-03T23:03:59.454+02:00", "components":[ { "component":"DROS/RegisterOnDemandDocumentEntry", "contexts":[ { "context":"urn:uuid:5544575c-8cc6-45de-9db5-3059131670a2", "information":[ { "key":"DocumentId", "type":"RPI", "value":"7943305690136181220.5733255671233166403.1620075838248" }, { "key":"DocumentType", "type":"RPI", "value":"39289-4" }, { "key":"CitizenId", "type":"RPI", "value":"010101010101" }, { "key":"FormatCode", "type":"RPI", "value":"urn:ad:dk:medcom:appointment" }, { "key":"SubmissionSetId", "type":"RPI", "value":"4755022980679903663.6588331163711420386.1620075838319" } ] } ] } ] }, "access":{ "code":200, "duration":1216, "httpHeaders":{ "Content-Type":"application/soap+xml; charset=UTF-8" }, "httpHost":"localhost", "idCardAttributes":{ "medcom:CareProviderID":"46837428", "medcom:CareProviderName":"Statens Serum Institut", "medcom:ITSystemName":"Test", "sosi:AuthenticationLevel":"3", "sosi:IDCardID":"m/a4UIUpkKPnk/My7ueRsw==", "sosi:IDCardType":"system", "sosi:IDCardVersion":"1.0.1" }, "method":"POST", "path":"/dros/iti61", "query":"", "port":8060, "protocol":"http", "reqSize":14130, "resSize":460, "soapHeaders":{ "Issuer":"TEST2-NSP-STS", "MessageID":"AAABeTQLfBBVLIDLtfEB2VNPU0k=", "NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}", "w3Action":"urn:ihe:iti:2010:RegisterOnDemandDocumentEntry", "w3MessageID":"urn:uuid:9ebc494f-a276-462a-b6e9-3ee6c69a1bc7", "w3To":"http://localhost:8060/dros/iti61" }, "threadId":"default task-1", "time":"2021-05-03T23:03:59.443+02:00", "stats":{ "handlerDuration":965, "RequestContentDuration":70, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":587, "SecurityProtocolResponseDuration":0, "bufferAllocated":true, "usedBuffers":2, "activeBuffersInPool":2, "idleBuffersInPool":0 } } } |
{ "time":"2021-05-03T21:04:04.485Z", "category":"dk.sds.nsp.audit.log.dros/provideandregisterdocumentsetb", "audit":{ "timestamp":"2021-05-03T23:04:02.429+02:00", "components":[ { "component":"DROS/ProvideAndRegisterDocumentSetB", "contexts":[ { "context":"urn:uuid:db9d8684-e06c-4c65-af58-0137e6646733", "information":[ { "key":"DocumentId", "type":"RPI", "value":"6687982596253355541.8162358355401787246.1620075842168" }, { "key":"DocumentType", "type":"RPI", "value":"39289-4" }, { "key":"CitizenId", "type":"RPI", "value":"ABCDE" }, { "key":"FormatCode", "type":"RPI", "value":"urn:ad:dk:medcom:appointment" }, { "key":"SubmissionSetId", "type":"RPI", "value":"5335953767189358702.7648709839978447749.1620075842178" } ] } ] } ] }, "access":{ "code":200, "duration":1878, "httpHeaders":{ "Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:06457de8-0189-4a1e-ba98-66da58d79ce7\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\"" }, "httpHost":"localhost", "idCardAttributes":{ "medcom:CareProviderID":"46837428", "medcom:CareProviderName":"Statens Serum Institut", "medcom:ITSystemName":"Test", "sosi:AuthenticationLevel":"3", "sosi:IDCardID":"P0OgWK2GAfYY6IhdSoPMRg==", "sosi:IDCardType":"system", "sosi:IDCardVersion":"1.0.1" }, "method":"POST", "path":"/dros/iti41", "query":"", "port":8060, "protocol":"http", "reqSize":24833, "resSize":699, "soapHeaders":{ "Issuer":"TEST2-NSP-STS", "MessageID":"AAABeTQLioY3nvNwrBEcjVNPU0k=", "NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}", "w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b", "w3MessageID":"urn:uuid:cd7f3bdb-647b-4766-864a-0070a8168e73", "w3To":"http://localhost:8060/dros/iti41" }, "threadId":"default task-3", "time":"2021-05-03T23:04:02.429+02:00", "stats":{ "handlerDuration":174, "RequestContentDuration":17, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":140, "SecurityProtocolResponseDuration":0, "bufferAllocated":false, "usedBuffers":4, "activeBuffersInPool":4, "idleBuffersInPool":3 } } } |
{ "time":"2021-05-03T21:04:09.776Z", "category":"dk.sds.nsp.audit.log.dros/provideandregisterdocumentsetb", "audit":{ "timestamp":"2021-05-03T23:04:08.786+02:00", "components":[ { "component":"DROS/ProvideAndRegisterDocumentSetB", "contexts":[ { "context":"urn:uuid:7e8274fc-bee7-46e8-995d-8a1ec518ce62", "information":[ { "key":"DocumentId", "type":"RPI", "value":"7371703074493874590.8623536501958069031.1620075848759" }, { "key":"DocumentType", "type":"RPI", "value":"39289-4" }, { "key":"CitizenId", "type":"RPI", "value":"ABCDE" }, { "key":"FormatCode", "type":"RPI", "value":"urn:ad:dk:medcom:appointment" }, { "key":"SubmissionSetId", "type":"RPI", "value":"6073800182764791022.8734924007446367108.1620075848770" }, { "key":"AssociationSourceId", "type":"RPI", "value":"urn:uuid:7e8274fc-bee7-46e8-995d-8a1ec518ce62" }, { "key":"AssociationTargetId", "type":"RPI", "value":"urn:uuid:90a33869-727b-4af7-9a6a-ef030107e341" }, { "key":"AssociationType", "type":"RPI", "value":"urn:ihe:iti:2007:AssociationType:RPLC" } ] } ] } ] }, "access":{ "code":200, "duration":912, "httpHeaders":{ "Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:5f90d79b-d113-4884-a9ce-1c4434a79f39\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\"" }, "httpHost":"localhost", "idCardAttributes":{ "medcom:CareProviderID":"46837428", "medcom:CareProviderName":"Statens Serum Institut", "medcom:ITSystemName":"Test", "sosi:AuthenticationLevel":"3", "sosi:IDCardID":"rvUKALhPjCol2nJTJqDt+A==", "sosi:IDCardType":"system", "sosi:IDCardVersion":"1.0.1" }, "method":"POST", "path":"/dros/iti41", "query":"", "port":8060, "protocol":"http", "reqSize":25071, "resSize":699, "soapHeaders":{ "Issuer":"TEST2-NSP-STS", "MessageID":"AAABeTQLpEik3TDY2H298VNPU0k=", "NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}", "w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b", "w3MessageID":"urn:uuid:f44dfe0a-c002-4a72-8e89-80b3df6b2370", "w3To":"http://localhost:8060/dros/iti41" }, "threadId":"default task-8", "time":"2021-05-03T23:04:08.786+02:00", "stats":{ "handlerDuration":73, "RequestContentDuration":6, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":51, "SecurityProtocolResponseDuration":0, "bufferAllocated":false, "usedBuffers":4, "activeBuffersInPool":4, "idleBuffersInPool":4 } } } |
{ "time":"2021-05-03T21:04:07.307Z", "category":"dk.sds.nsp.audit.log.dros/registerdocumentsetb", "audit":{ "timestamp":"2021-05-03T23:04:07.03+02:00", "components":[ { "component":"DROS/RegisterDocumentSetB", "contexts":[ { "context":"urn:uuid:ac0ce91a-320d-4370-839f-25598dd0bfab", "information":[ { "key":"DocumentId", "type":"RPI", "value":"9139873772290913932.1273906388098236954.1620075847000" }, { "key":"DocumentType", "type":"RPI", "value":"39289-4" }, { "key":"CitizenId", "type":"RPI", "value":"010101010101" }, { "key":"FormatCode", "type":"RPI", "value":"urn:ad:dk:medcom:appointment" }, { "key":"SubmissionSetId", "type":"RPI", "value":"8587115512321077717.2026797048612801310.1620075847001" } ] } ] } ] }, "access":{ "code":200, "duration":250, "httpHeaders":{ "Content-Type":"application/soap+xml; charset=UTF-8" }, "httpHost":"localhost", "method":"POST", "path":"/dros/iti42noDgws", "query":"", "port":8060, "protocol":"http", "reqSize":8696, "resSize":919, "soapHeaders":{ "w3Action":"urn:ihe:iti:2007:RegisterDocumentSet-b", "w3MessageID":"urn:uuid:c270fc64-56f2-4b6b-b65b-4caf7623d19a", "w3To":"http://localhost:8060/dros/iti42noDgws" }, "threadId":"default task-6", "time":"2021-05-03T23:04:07.03+02:00", "stats":{ "handlerDuration":22, "RequestContentDuration":1, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":0, "SecurityProtocolResponseDuration":0, "bufferAllocated":false, "usedBuffers":2, "activeBuffersInPool":2, "idleBuffersInPool":6 } } } |
{ "time":"2021-05-03T21:54:21.875Z", "category":"dk.sds.nsp.audit.log.dros/updatedocumentset", "audit":{ "timestamp":"2021-05-03T23:54:21.673+02:00", "components":[ { "component":"DROS/UpdateDocumentSet", "contexts":[ { "context":"8bee75d3-9e1e-4646-b440-ffb6e13f8099", "information":[ { "key":"AssociationSourceId", "type":"RPI", "value":"8bee75d3-9e1e-4646-b440-ffb6e13f8099" }, { "key":"AssociationTargetId", "type":"RPI", "value":"urn:uuid:bf963b2e-7fd0-4b25-9c1b-b9762af656f7" }, { "key":"AssociationType", "type":"RPI", "value":"urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus" }, { "key":"AssociationStatus", "type":"RPI", "value":"Deprecated" } ] } ] } ] }, "access":{ "code":200, "duration":166, "httpHeaders":{ "Content-Type":"application/soap+xml; charset=UTF-8" }, "httpHost":"localhost", "idCardAttributes":{ "medcom:CareProviderID":"46837428", "medcom:CareProviderName":"Statens Serum Institut", "medcom:ITSystemName":"Test", "sosi:AuthenticationLevel":"3", "sosi:IDCardID":"sTLZT4F425EnY6GleFiNcA==", "sosi:IDCardType":"system", "sosi:IDCardVersion":"1.0.1" }, "method":"POST", "path":"/dros/iti57", "query":"", "port":8060, "protocol":"http", "reqSize":9253, "resSize":460, "soapHeaders":{ "Issuer":"TEST2-NSP-STS", "MessageID":"AAABeTQ5nWIfoju4xRpdM1NPU0k=", "NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}", "w3Action":"urn:ihe:iti:2010:UpdateDocumentSet", "w3MessageID":"urn:uuid:e81108e0-603e-4662-8320-689c1e64a2f9", "w3To":"http://localhost:8060/dros/iti57" }, "threadId":"default task-12", "time":"2021-05-03T23:54:21.673+02:00", "stats":{ "handlerDuration":33, "RequestContentDuration":1, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":27, "SecurityProtocolResponseDuration":0, "bufferAllocated":false, "usedBuffers":2, "activeBuffersInPool":2, "idleBuffersInPool":6 } } } |
Hvis CPR validering kører i WARNING mode, så vil ugyldige (ifølge CPRExits service) CPR numre give anledning til en linje i auditloggen. Logninger af denne type ser således ud:
{ "time":"2021-08-19T08:46:13.461Z", "category":"dk.sds.nsp.audit.log.dros", "audit":{ "timestamp":"2021-08-19T10:46:13.081+02:00", "components":[ { "component":"DROS", "contexts":[{ "context":"iti-41", "information":[{ "key":"dk.nsp.cpr.exists.false", "type":"SPI","value":"ABCDE" }] }] }, { "component":"DROS/ProvideAndRegisterDocumentSetB", "contexts":[{ "context":"urn:uuid:5e2abecf-a1aa-4059-bc67-789492ef5e49", "information":[{ "key":"DocumentId", "type":"RPI", "value":"5776847426915191537.1243631302011472830.1629362773007" }, { "key":"DocumentType", "type":"RPI", "value":"39289-4" }, { "key":"CitizenId", "type":"RPI", "value":"ABCDE" }, { "key":"FormatCode", "type":"RPI", "value":"urn:ad:dk:medcom:appointment" }, { "key":"SubmissionSetId", "type":"RPI", "value":"6382716294106427493.5756439411433255780.1629362773009" }] }] } ] }, "access":{ "code":200, "duration":350, "httpHeaders":{ "Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:40d856a8-1a44-4ab2-a26a-947c1c6ec09d\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\"" }, "httpHost":"localhost", "idCardAttributes":{ "medcom:CareProviderID":"46837428", "medcom:CareProviderName":"Statens Serum Institut", "medcom:ITSystemName":"Test", "sosi:AuthenticationLevel":"3", "sosi:IDCardID":"aXDKFJ7P6UQQDfAsWEen8Q==", "sosi:IDCardType":"system", "sosi:IDCardVersion":"1.0.1" }, "method":"POST", "path":"/dros/iti41", "query":"", "port":8060, "protocol":"http", "reqSize":24881, "resSize":1420, "soapHeaders":{ "Issuer":"TEST2-NSP-STS", "MessageID":"AAABe12W3BTo9p7lAx0WMVNPU0k=", "NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}", "w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b", "w3MessageID":"urn:uuid:ee979460-f7e5-4432-8604-c345eba582f9", "w3To":"http://localhost:8060/dros/iti41" }, "threadId":"default task-18", "time":"2021-08-19T10:46:13.08+02:00", "stats":{ "handlerDuration":28, "RequestContentDuration":2, "ResponseContentDuration":0, "SecurityProtocolRequestDuration":22, "SecurityProtocolResponseDuration":0, "bufferAllocated":false, "usedBuffers":4, "activeBuffersInPool":4, "idleBuffersInPool":4 } } } |