Šajā piemērā datu devējs būs Brenguļu sākumskola, nododamie dati būs iedomātas iedzīvotāju atskaites par mājdzīvniekiem un dati tiks nodoti no datu bāzes kā datu avota.
Neatkarīgi no izvēlētā datu nodošanas varianta, pirmais solis vienmēr ir pieteikties DAGR pašapkalpošanās portālā par datu devēju. DAGR pašapkalpošanās portāla adrese ir:
Lai pieteiktos par datu devēju, ir jāautentificējas DAGR pašapkalpošanās portālā, tālāk sadaļā "Pieteikumu pārvaldība" jāizvēlas darbība "Datu avota pieteikums" un jāaizpilda pieteikuma forma. Pieteikuma formā norādītajām kontaktpersonām būs iespēja datu devēja vārdā pārvaldīt tehniskos pieslēgumus. Ja datu nodošanas realizācijai tiek piesaistīti ārējie izstrādātāji, tiem piekļuvi rekomendējams dot tikai DAGR testa videi. Kad pieteikums ir reģistrēts, jāpagaida, kamēr DAGR administrators to apstiprinās.
Šī piemēra ietvaros par datu devēju izmantosim Brenguļu sākumskolu ar reģistrācijas numuru 40900031421.
Šī piemēra ietvaros nodosim uz DAGR personu atskaites par mājdzīvniekiem. Piemērā izmantota iedomāta datu kopa kur katru gadu iedzīvotājs iesniedz atskaiti par mājdzīvniekiem.
Pirmais solis datu struktūras definēšanas procesā ir izplānot datu kopas struktūru un reģistrēt to DAGR pašapkalpošanās portāla sadaļā "Izplatīšana" -> "Datu kopas". Pilnā piemērā izmantotā datu struktūras definīcija ir šāda:
name: bss_pet_report
key: Code(, Year, Id)
data_description: Atskaite par personas mājdzīvniekiem, labās prakses piemērs
fields:
- Id : Pārskata identifikators
- Code : Personas kods
- Name : Vārds
- Surname : Uzvārds
- Year int : Gads
- Submitted timestamp : Atskaites iesniegšanas datums un laiks
- Status : Pārskata statuss
- Pets * :
comments : Mājdzīvnieku saraksts
fields:
- Species : Suga
- Breed : Šķirne
- Age int : Vecums
- Name : Vārds
Uzmanība pievēršama dažām būtiskām niansēm:
name: bss_test_pet_report
. Atbilstoši datu kopu nosaukumu veidošanas rekomendācijām, datu kopa sākas ar "bss", kas ir Brenguļu sākumskolas saīsinājums. Tam seko datu kopas angliskais nosaukums ar mazajiem burtiem, vārdus atdalot ar apakšstrīpu.key: Code(, Year, Id)
. Datu kopas ierakstiem tiek izmantota salikta atslēga, kas sastāv no personas koda, pārskata gada un pārskata identifikatora. Personas kods un pārskata gads tiek izmantots meklēšanas nolūkiem - respektīvi, lai dotu iespēju datu ņēmējiem datu kopas ierakstus izgūt pēc personas koda un gada. Savukārt atslēgas unikalitātes nodrošināšanai, pievienots vēl arī pārskata identifikators. Saliktās atslēgas daļa, kas nav obligāti izmantojama meklējot ierakstus, ir iecelta iekavās - respektīvi, personas kods meklējot ierakstus jānorāda obligāti, bet gada un identifikatora norādīšana ir opcionāla. Tipiskā scenārijā tas varētu būt personas kods un gads, kas tiek izmantots meklēšanai.- Pets * :
). Nākamajās rindiņās ar divu tukšuma zīmju lielāku atstarpi no kreisās malas ir saraksta nosaukums (piemērā: comments : Mājdzīvnieku saraksts
) un tam seko sarakstā iekļauto ierakstu datu lauku uzskaitījums.data_description: Atskaite par personas mājdzīvniekiem, labās prakses piemērs
);- Id : Pārskata identifikators
);comments : Mājdzīvnieku saraksts
).Šādi izskatās piemērā dotā datu struktūras definīcija pēc tās reģistrēšanas DAGR pašapkalpošanās portālā:
Kad datu kopas datu struktūras definīcija ir saglabāta, tā parādīsies priekšlikumu vidē (sandbox). Priekšlikumu vide ir DAGR apgabals, kas paredzēts datu nodošanas testēšanai un datu kopas apskatei pirms tās galīgās apstiprināšanas. Šajā piemērā, pēc datu kopas saglabāšanas, ar to saistītie DAGR REST API servisi parādās adresē https://test.dagr.gov.lv/api-docs/sandbox/40900031421/, kur 40900031421 ir datu devēja reģistrācijas numurs. Priekšlikumu vidē datu kopa pieejama tikai pašam datu devējam.
Vizuāli servisu apraksti izskatās šādi:
Kad datu devējs ir ar datu kopas definīciju apmierināts, jālūdz DAGR administrators šo datu kopu apstiprināt. Pēc apstiprināšanas datu kopa būs pieejama DAGR pamata katalogā (dataset). Respektīvi, datu kopas definīcija tiks nodota uz VIRSIS, kur datu devējs varēs piešķirt datu piekļuves atļaujas potenciālajiem datu ņēmējiem.
Lai varētu sākt nodot datus uz DAGR, izmantojot datu devēja savienotāju, vispirms DAGR pašapkalpošanās portālā ir jāreģistrē savienojums. To var veikt jebkurš lietotājs, kurš apstiprinātajā datu devēja pieteikumā norādīts kā kontaktpersona. Savienojumi reģistrējami DAGR pašapkalpošanās portāla sadaļā "DAGR" -> "Savienotāji".
Piebilde: DAGR portālā un citur dokumentācijā tiek izmantoti divi līdzīgi termini - "savienotājs" un "savienojums". Atšķirība ir tāda, ka savienojums ir noteiktam datu devējam vai datu patērētājam piesaistīti pieslēguma rekvizīti, savukārt savienotājs ir DAGR projekta ietvaros izstrādāta JAVA aplikācija, kas DAGR kodolam pieslēdzas ar noteiktu aplikācijas konfigurācijā norādītu savienojumu jeb pieslēguma rekvizītiem.
Reģistrējot jaunu savienojumu, jānorāda:
Šī piemēra ietvaros Brenguļu sākumskolai reģistrēsim datu devēja savienotāju ar identifikatoru BSS_DDS_01:
Kad savienotājs ir reģistrēts, tam ir jāpievieno drošības sertifikāts. DAGR no pievienotā sertifikāta saglabā publisko atslēgu, kura pēc tam tiek izmantota, lai pārbaudītu, vai drošības talona pieprasījums parakstīts ar saistīto privāto atslēgu. DAGR pievienojamais x509 sertifikāts var būt arī pašparakstīts. Pastāv vairāki varianti, kā iegūt pašparakstītu X.509 sertifikātu. Piemēram, izmantojot openssl komandrīku, to var paveikt ar šādām komandām:
openssl genrsa -out c:\temp\nosaukums.key 2048
Šī komanda ģenerē privāto atslēgu, kas pēc tam būs nepieciešama, lai parakstītu drošības talona pieprasījumu. Privātā atslēga paliek pie datu devēja un tās aizsargāšana ir datu devēja pienākums.
openssl req -key c:\temp\nosaukums.key -new -x509 -subj "/C=LV/ST=Riga/L=Riga/O=Iestades_nosaukums/OU=IT/CN=nosaukums" -days 365 -out c:\temp\nosaukums.crt
Šī komanda ģenerē pašparakstītu X.509 sertifikātu, kuru jāpievieno DAGR reģistrētajam datu patērētāja savienotājam.
Piemērā izmantotā privātā atslēga: bss_demo.key
Piemērā izmantotais sertifikāts: bss_demo.cer
Stingra rekomendācija: Ja datu devējs caur DAGR izplata vairākas datu kopas no vairākiem avotiem, tad katram avotam rekomendējams reģistrēt un izmantot savu savienojumu.
Datu devēja savienotājs ir JAVA aplikācija, kas izgūst datus no datu avota, tos transformē un nodod uz DAGR kodolu, izmantojot DAGR REST API. Šajā piemērā parādīts, kā datu devēja savienotāju uzstādīt Windows vidē.
Pieņemam, ka instalējam JAVA 17 Windows vidē.
Vispirms lejupielādējam bināro instalāciju no ražotāja mājas lapas: https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.exe
Tālāk palaižam instalāciju un sekojam grafiskajam vednim.
Pēc instalācijas pārliecināmies, ka JAVA ir veiksmīgi uzstādīta, izpildot komandu java -version
.
Var gadīties, ka java komanda netiek atpazīta. Tādā gadījumā vajag pievienot ceļu uz java instalāciju Windows "path" vides mainīgajam.
Tālāk nepieciešams lejupielādēt jaunāko datu devēja savienotāja versiju. Tā ir pieejama:
Ja aplikācija lejupielādējas bez paplašinājuma, to rekomendējams pievienot, pārsaucot aplikāciju par "dagr-connector.jar".
Piemērā tiek izmantota PostgreSQL datu bāze. Datu bāzes uzstādīšanas instrukcijas ir ārpus šī piemēra tvēruma, taču tabulas izveidojamas un aizpildāmas ar testa datiem, izmantojot šādas SQL komandas:
CREATE TABLE report (
id SERIAL PRIMARY KEY,
code VARCHAR(12) NOT NULL,
name VARCHAR (30) NOT NULL,
surname VARCHAR (30) NOT NULL,
year int NOT NULL,
submitted timestamp NOT NULL,
status VARCHAR (12) NOT NULL
)
CREATE TABLE pet (
id SERIAL PRIMARY KEY,
report_id INTEGER REFERENCES report(id),
species VARCHAR(30) NOT NULL,
breed VARCHAR(30) NOT NULL,
age INTEGER NOT NULL,
name VARCHAR(30) NOT NULL
)
INSERT INTO report (id, code, name, surname, year, submitted, status ) VALUES
('1', '321251-12345', 'Toms', 'Testiņš', '2020', '2021-02-08 04:05:06', 'melnraksts '),
('2', '321251-12345', 'Toms', 'Testiņš', '2020', '2021-01-01 04:15:17', 'apstiprināts '),
('3', '323474-25632', 'Aija', 'Apse', '2019', '2020-03-01 14:05:01', 'melnraksts '),
('4', '328934-21562', 'Gita', 'Graudiņa', '2019', '2020-01-01 16:00:00', 'iesniegts '),
('5', '322375-53355', 'Laura', 'Lapiņa', '2019', '2020-02-01 12:21:00', 'apstiprināts '),
('6', '325433-23423', 'Mārtiņš', 'Mičulis', '2020', '2021-03-12 13:13:00', 'apstiprināts '),
('7', '321215-12312', 'Viktors', 'Vakariņš', '2020', '2021-02-07 12:45:00', 'apstiprināts '),
('8', '325678-10024', 'Daiga', 'Diena', '2021', '2022-02-18 13:12:45', 'apstiprināts '),
('9', '326546-10674', 'Reinis', 'Rutulis', '2020', '2021-03-12 07:05:06', 'apstiprināts '),
('10', '326546-10674', 'Reinis', 'Rutulis', '2021', '2022-02-08 12:05:06', 'apstiprināts ');
INSERT INTO pet (id, report_id, species, breed, age, name ) VALUES
('1', '1', 'suns', 'Vācu aitusuns', '7', 'Reksis '),
('2', '1', 'suns', 'Kollijs', '3', 'Ringla '),
('3', '2', 'suns', 'Vācu aitusuns', '7', 'Reksis '),
('4', '2', 'suns', 'Kollijs', '3', 'Ringla '),
('5', '6', 'suns', 'Bulterjers', '12', 'Ringo '),
('6', '6', 'suns', 'Labradors', '10', 'Kūpers '),
('7', '7', 'suns', 'Retrīvers', '2', 'Bono '),
('8', '7', 'kaķis', 'Meinkūns', '4', 'Maksis '),
('9', '4', 'kaķis', 'Siāmas kaķis', '6', 'Šeila '),
('10', '8', 'kaķis', 'Meinkūns', '3', 'Otto '),
('11', '8', 'kaķis', 'Meinkūns', '14', 'Ārčijs '),
('12', '5', 'kaķis', 'Ēģiptes mau', '5', 'Muris '),
('13', '3', 'kaķis', 'Korāts', '1', 'Frīda '),
('14', '3', 'kaķis', 'Kamriks', '4', 'Greisa '),
('15', '9', 'kaķis', 'Mančkins', '6', 'Pipars '),
('16', '10', 'kaķis', 'Mančkins', '7', 'Pipars '),
('17', '9', 'suns', 'Krancis', '4', 'Rufuss '),
('18', '10', 'suns', 'Krancis', '5', 'Rufuss ');
Rezultātā mums datu bāzē ir divas tabulas:
Lejupielādējam JDBC draiveri priekš izvēlētās datu bāzes un novietojam to vienā mapē ar datu devēja savienotāju. Piemērā tiek izmantots PostgrSQL JDBC draiveris "postgresql-42.7.4.jar", kas iegūts no https://jdbc.postgresql.org/download/.
Vienā mapē ar dagr-connector.jar izveidojam konfigurācijas failu ar nosaukumu "application.conf" un iekopējam šajā failā šādu konfigurāciju:
dataset_names = bss_pet_report
datasource_type = jdbc
target_server_uri = "https://test.dagr.gov.lv"
provider.key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiqEiuBAjfopw2oDu0tq3VonE1XoOlCzP58etLS0FTq+Ff7uCqYJm9X3P26NyCnKY+C+w7Su/qBpaSYol5s1+yAWQkiXaB3t9sXVRqnIrKboAm4YNKMIpqN2HctiWZepVn8+4R0xH1H9GXFeP0TIlWRc1Cvit4OBjyjuzMhRif0xaij6T1T3YAhLf0nqh1RsUdWg0GGGGOAxQ2+boDf+fqrjeWMYeXp7lxYXs69T8OygBYhiRg8ca6hivbLbRxOfpkt0C4oOg6pEuqptK0wUVrHwUeaDA+oINKcqmFeQpAgHr9n/MDqcyzQUoCoI2x0ajnUom1IhFYQ1XC1G+JJYCnAgMBAAECggEABXyy0vf83/p0KvLrK19Rlu2KGc2h7ZfmqCMNQnbRRy7QWrRMF5ihpxNIw1wQpZv+Oa/yR1UcVHiQwh3D2yX+GkWqE1d1zCTGGbmTnEhtStiWcc6qvKki347AZOSEzobQR8z2oNr4y0bzAutF9jBSHmXFal/QR0JxM6w2+HacTDaSI8ThFXcK01pGyN2IUIo9ephjTZfNVfY4ja53wsqNWll5JMeKoB0vLACVzze0/8kLUsxJnALL7xhpPR7tnjkR2MS4y/xDHBar2SH9U7oh6xyQbdAfoKBIUX8EQmP5WdH5vjjUL8Ec9txgxuxWVhqPEJFr4X7Q2WZ9Ea4UPBjLnQKBgQDBYR5nCjS5RhjrvTiWKjtLiBYhSSz3+nJPHM9z/3mgoLsAEMV873MimsDCJkqFWwGKi+2Wv+0Yrr7F/fjBl4BFotVf2yptU31ezeK7ptppbYf90JZV7/uhIIbaOFDbJCTc/Nfw2ROHWxnlehj0nM++DATXj7dwFFza3ezYaRRS5QKBgQDXVFpjwyQfFm0r3VoV1fO3Pipcj8Rq5ZRMw/lHve7o/IsA6iQRVfTK4p8L5VgU6OhtBGU/h8RTC3zxUHW6CUt2cMy4HtJGI0FBm3U9R5dF6c+DAUFAwWfi04UNVr2lOYAB8tHhe9Hq84dA8ymGO95KmmcjREWh9Eqz7BYDmnUQmwKBgGONpwQu6eOz5aJ/IIGWLj59Sb9LF752DaES2O4DyM7b0EmBWNovv5tCBhgtdFHg/xMfZGomVl5Nn+L4E7c+UogHA0g84UO1JqbG4YHvrSN3gvo1ByAo0ucpgqMXOPEIU339IQJaDsaxLMzJpc1QaVaSg2+iCjLGGOOIOqVSu2bNAoGBAMZitRSMyU7K/rIXMdREVlJRN/4nhrNl6QgA1j4+w0pswjSJg8llBC+YMyhmmIxLOTiXgCDUGRDZ2LcLhitsPNZWfoZz/w8XlBu5+n4G41xKWiE8mr3qcqgMcN0lOXxsSX+CE9RGm9R3ofk5DtzZc6gQMU3QrMbVp620qWOQfqJZAoGBAKnyTMZP6ftV3+6Yr8byMcAgfZ1NKjqdqPDcUvfLADKo0V8yxCv+aQVydn6rNwByOYpHU5vvNATFkgVpRK8tUnPX99UICi1eRwdzaz1xUxqW98++0ipd6eT7sDBl9yM4yaYKBqGE18babO4XF0iP95ujMqVsrDO3UxxMKOflL+NU"
provider.client_id = "BSS_DDS_01"
jwt.service.uri = "https://test.dagr.gov.lv/jwt/connect/token"
jwt.payload-audience = "urn:TEST-LNB:DAGR.STS/connect/token"
jwt.scope = "producer"
metadata_file = "./connector.yaml"
# If "akka.quartz.schedules.connector" is set to null, connector will run once and exit
akka.quartz.schedules.connector = null
jdbc {
data {
jdbcUrl = "jdbc:postgresql://localhost:5432/test_db"
username = "root"
password = "root"
}
}
Pilna references konfigurācija pieejama programmatūras integrācijas instrukcijā. Bet šeit pāriesim pāri piemērā izmantotajai konfigurācijai:
https://{dagr_adrese}/sandbox/{datu_devēja_reģ_numurs}
, piemēram, https://test.dagr.gov.lv/sandbox/40900031421;
Vienā mapē ar dagr-connector.jar izveidojam konfigurācijas failu ar nosaukumu "connector.yaml" un iekopējam šajā failā šādu konfigurāciju:
name: bss_pet_report
table: report r
key: Code(, Year, Id)
fields:
- Id = r.id
- Code = r.code
- Name = r.name
- Surname = r.surname
- Year = r.year
- Submitted = r.submitted
- Status = r.status
- Pets * [r.Id=p.report_id]:
table: pet p
fields:
- Species = p.species
- Breed = p.breed
- Age = p.age
- Name = p.name
table: report
columns:
- id
- code
- name
- surname
- year int
- submitted dateTime
- status
table: pet
columns:
- id
- report_id
- species
- breed
- age int
- name
connector.yaml fails priekš datu devēja savienotāja apraksta avota struktūru.
Šajā gadījumā, pirmais bloks apraksta, kā kartējās datu bāzes tabulas pret datu kopu. Tas satur šādas daļas:
Nākamie bloki apraksta datu bāzes tabulas un sastāv no šādiem elementiem:
Vienā mapē ar dagr-connector.jar izveidojam konfigurācijas failu ar nosaukumu "logback.xml" un iekopējam šajā failā šādu konfigurāciju:
<configuration scan="true" scanPeriod="15 seconds" >
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d %highlight(%-5level) %-15logger{15} -%kvp- %msg%n%ex{0}</pattern>
</encoder>
</appender>
<logger name="com.zaxxer.hikari" level="warn"/>
<logger name="dagr.data" level="warn"/>
<logger name="dagr.http" level="warn"/>
<logger name="dagr.jdbc" level="warn"/>
<logger name="dagr.jdbc.sql" level="warn"/>
<logger name="org.quartz" level="warn"/>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
logback.xml konfigurācijas fails atbild par datu devēja savienotāja žurnalēšanas iestatījumiem. Pēc noklusējuma tie ir "info" vai "warn" līmenī. Bet atkļūdošanas nolūkiem var lietot līmeni "debug".
Palaižam datu devēja savienotāju, izpildot komandu:
java -Dconfig.file=./application.conf -Dlogback.configurationFile=./logback.xml -cp ./postgresql-42.7.4.jar;./dagr-connector.jar dagr.Connector
Komanda satur šādus argumentus:
-Dconfig.file=./application.conf
- norāda, ka aplikācija palaižama ar failā "application.conf" aprakstīto vispārējo konfigurāciju;-Dlogback.configurationFile=./logback.xml
- norāda, ka aplikācijas logback komponente darbināma ar failā "logback.xml" norādīto konfigurāciju;-cp ./postgresql-42.7.4.jar;./dagr-connector.jar dagr.Connector
- norāda, ka javai ir jādarbina datu devēja savienotājs (dagr-connector.jar) kā main klasi izmantojot "dagr.Connector" un bibliotēku sarakstā jāiekļauj norādītais JDBC draiveris (postgresql-42.7.4.jar).Datu devēja savienotājs pēc palaišanas secīgi veic šādas darbības:
Rezultātā datu devēja savienotājs parādīs datu nodošanas kopsavilkumu: