Přeskočit obsah

Popis a konfigurace

Popis

  • Založení tabulek do parkoviště a nastavení oprávnění uživatele pro přístup k DB parkoviště je řešeno DB pathem pro GPCash. Pro úplnost uvádíme DDL příkaz pro založení tabulek i pro sybase.
  • Pumpy, které posílají data do MQ, jsou v souladu s obrázkem architektury (viz předchozí kapitola) instalovány na server s parkovištěm (windows platforma s Sybase DB), server s běžícím KeyCloak programem (linux s postgre DB), PMC server (linux s postgre DB).
  • Pro stažení dat z MQ do BI DB je pumpa, která musí být nainstalována na serveru BI s DB postre.

Založení tabulek pro pumpy

-- datova pumpa sybase
CREATE TABLE "DBA"."pump_table" (
    "pump_table_id" INTEGER NOT NULL DEFAULT AUTOINCREMENT,
    "parking_id" INTEGER NOT NULL,
    "table_name" VARCHAR(512) NOT NULL,
    "last_update" DATE NOT NULL,
    "column" VARCHAR(512) NOT NULL,
    PRIMARY KEY ( "pump_table_id" ASC )
) IN "system";;

CREATE TABLE "DBA"."pump_table_data" (
    "pump_table_data_id" INTEGER NOT NULL DEFAULT AUTOINCREMENT,
    "value_column" VARCHAR(128) NULL,
    "value_pk" VARCHAR(128) NULL,
    "pump_table_id" INTEGER NULL,
    PRIMARY KEY ( "pump_table_data_id" ASC )
) IN "system";
-- datova pumpa postgres
CREATE SEQUENCE pump_table_id_seq;
CREATE TABLE public.pump_table (
    pump_table_id int8 DEFAULT nextval('pump_table_id_seq'::regclass) NOT NULL,
    table_name varchar(512) NOT NULL,
    last_update date NOT NULL,
    column_name varchar(512) NOT NULL,
    CONSTRAINT pump_table_pkey PRIMARY KEY (pump_table_id)
);

CREATE SEQUENCE pump_table_data_id_seq;
CREATE TABLE public.pump_table_data (
    pump_table_data_id int8 DEFAULT nextval('pump_table_data_id_seq'::regclass) NOT NULL,
    value_column int4 NULL,
    value_pk varchar(128) NULL,
    pump_table_id int8 NULL,
    "row_number" int4 NULL,
    value_column_confirmed int4 NULL,
    CONSTRAINT pump_table_data_pkey PRIMARY KEY (pump_table_data_id)
);
-- datova pumpa mysql
CREATE TABLE pump_table (
    pump_table_id int NOT NULL AUTO_INCREMENT,
    table_name VARCHAR(512) NOT NULL,
    last_update DATE NOT NULL,
    column_name VARCHAR(512) NOT NULL,
    PRIMARY KEY ( pump_table_id ASC )
);

CREATE TABLE pump_table_data (
    pump_table_data_id int NOT NULL AUTO_INCREMENT,
    value_column VARCHAR(128) NULL,
    value_pk VARCHAR(128) NULL,
    pump_table_id INTEGER NULL,
    PRIMARY KEY ( pump_table_data_id ASC )
);
  • Tabulka pro ukládání dat na straně BI
CREATE SEQUENCE public.parking_config_id_seq;
ALTER SEQUENCE public.parking_config_id_seq OWNER to "pmc-bi";

CREATE TABLE public.parking_config
(
    parking_config_id bigint NOT NULL DEFAULT nextval('parking_config_id_seq'::regclass),
    parking_id bigint NOT NULL,
    gmtp_id bigint NOT NULL,
    subject_id bigint NOT NULL,
    CONSTRAINT parking_config_pkey PRIMARY KEY (parking_config_id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.parking_config OWNER to "pmc-bi";
  • Do této tabulky je potřeba vložit záznam propojující parking_id a gmtp_id (což je číslo instalace) a subject_id parkoviště.
insert into parking_config (parking_id, gmtp_id, subject_id) values (1,22,1);

Konfigurace pumpy

Pupmu je možné provozovat ve dvou režimech. Níže je příklad konfigurace obou režimů.

Scheduled tasks

#store transfer data
pmc.etlsybase.store = true

#running export schedule
pmc.etlsybase.cron.expression = 2 0,20,40 * * * ?

# (1)!
pmc.etlsybase.cron.repeatedly = false

# (2)!
# DB sybase configuration
spring.datasource.driver-class-name=com.sybase.jdbc4.jdbc.SybDriver
spring.datasource.jdbc-url=jdbc:sybase:Tds:127.0.0.1:2638/greenpro16?SQLINITSTRING=SET TEMPORARY OPTION "connection_authentication"='Company=Green Center s.r.o.;Application=GPP;Signature=000fa55157edb8e14d818eb4fe3db41447146f1571g357e241b4abefe1e00a1075355440585290041de';

# (3)!
spring.datasource.username=pmcbi
spring.datasource.password=xxxx

spring.datasource.idle-timeout=180000
spring.datasource.connection-timeout=30000
spring.datasource.minimum-idle=5
spring.datasource.maximum-pool-size=5
spring.datasource.pool-name=EtlPool
spring.datasource.max-lifetime=1800000
spring.datasource.connection-test-query=SELECT 1

# SQL dialect for generating optimized queries

spring.jpa.hibernate.ddl-auto=none

spring.jpa.database=SYBASE

#spring.jpa.show-sql=true

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

# (4)!
# MQ setting
pmc.etlsybase.url = ssl://pmc.parkcloud.cz:61617
pmc.etlsybase.username = pos_broker
pmc.etlsybase.password = xxx

pmc.etlsybase.queuename = etldb
pmc.etlsybase.timeout = 120000
pmc.etlsybase.messageSize = 5000
pmc.etlsybase.batchSize = 30000
pmc.etlsybase.expirationTime = 120000

# (5)!
# export tables
pmc.etlsybase.table = Receipt,ReceiptItem,Station,Revenue,Operator,RevenueItem,Currency,PaymentKind,Card,CardAlias,CardBlockage,CardLicencePlate,Access,Host,Owner,CardJournal,CardJournalEvent,StationEvent,StationJournal,CardPassJournal,CashboxState,CashboxStateItem,ReceiptItemCard,ReceiptItemDiscount,ReceiptItemVoucher,ReceiptStorno,ZonePGS,LengthRule,Rate,RedLetterDays,SaturationRule,ScheduleRule,Season,AccessZoneRate

pmc.etlsybase.columnid = IDReceipt,IDItem,IDStation,IDRevenue,IDOperator,IDRevenueItem,IDCurrency,IDKind,IDCard,IDAlias,IDCard,IDLicencePlate,IDAccess,HAPAddress,IDOwner,IDCardJournal,Action+Language,IDEvent,CreatedWhen+IDStation,IDCard,IDState,IDItem,IDItem,IDItem,IDItem,IDReceipt,IDZone,ScheduleRuleID+fromMinute,IDRate,IDRedLetterDay,ScheduleRuleID+saturationTime,IDRule,IDSeason,IDAccess+Zone

# struktura je Nazev_tabulky=sloupec1,sloupec2|Nazev_tabulky2=sloupec1,sloupec2

pmc.etlsybase.columns =
pmc.etlsybase.whereCondition = ,,,,,,,,,,,,,,,,,,,,,,,,,,,

pmc.etldbsybase.prefix =

logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n

logging.file.name=./logs/GreenPro-ETL.log

logging.file.max-size=100MB
  1. Tímto nastavením se vypíná opakované spouštění
  2. Konfigurace připojení do databáze
  3. Vyměnit za správné uživatelské údaje!
  4. Nastavení MQ komunikace - je třeba upravit podle prostředí
  5. Konfigurace tabulek, které se mají přenášet

Service

#store transfer data
pmc.etlsybase.store = true

#running export schedule

# every 20 minutes
pmc.etlsybase.cron.expression = 2 0,20,40 * * * ?

# (1)!
pmc.etlsybase.cron.repeatedly = true

# (2)!
# DB sybase configuration
spring.datasource.driver-class-name=com.sybase.jdbc4.jdbc.SybDriver
spring.datasource.jdbc-url=jdbc:sybase:Tds:127.0.0.1:2638/greenpro16?SQLINITSTRING=SET TEMPORARY OPTION "connection_authentication"='Company=Green Center s.r.o.;Application=GPP;Signature=000fa55157edb8e14d818eb4fe3db41447146f1571g357e241b4abefe1e00a1075355440585290041de';

# (3)!
spring.datasource.username=pmcbi
spring.datasource.password=xxx

spring.datasource.idle-timeout=180000
spring.datasource.connection-timeout=30000
spring.datasource.minimum-idle=5
spring.datasource.maximum-pool-size=5
spring.datasource.pool-name=EtlPool
spring.datasource.max-lifetime=1800000
spring.datasource.connection-test-query=SELECT 1

# SQL dialect for generating optimized queries
spring.jpa.hibernate.ddl-auto=none
spring.jpa.database=SYBASE
#spring.jpa.show-sql=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

# (4)!
# MQ setting
pmc.etlsybase.url = ssl://pmc.parkcloud.cz:61617
pmc.etlsybase.username = pos_broker
pmc.etlsybase.password = xxx
pmc.etlsybase.queuename = etldb
pmc.etlsybase.timeout = 120000
pmc.etlsybase.messageSize = 5000
pmc.etlsybase.batchSize = 30000
pmc.etlsybase.expirationTime = 120000

# (5)!
# export tables
pmc.etlsybase.table = Receipt,ReceiptItem,Station,Revenue,Operator,RevenueItem,Currency,PaymentKind,Card,CardAlias,CardBlockage,CardLicencePlate,Access,Host,Owner,CardJournal,CardJournalEvent,StationEvent,StationJournal,CardPassJournal,CashboxState,CashboxStateItem,ReceiptItemCard,ReceiptItemDiscount,ReceiptItemVoucher,ReceiptStorno,ZonePGS,LengthRule,Rate,RedLetterDays,SaturationRule,ScheduleRule,Season,AccessZoneRate

pmc.etlsybase.columnid = IDReceipt,IDItem,IDStation,IDRevenue,IDOperator,IDRevenueItem,IDCurrency,IDKind,IDCard,IDAlias,IDCard,IDLicencePlate,IDAccess,HAPAddress,IDOwner,IDCardJournal,Action+Language,IDEvent,CreatedWhen+IDStation,IDCard,IDState,IDItem,IDItem,IDItem,IDItem,IDReceipt,IDZone,ScheduleRuleID+fromMinute,IDRate,IDRedLetterDay,ScheduleRuleID+saturationTime,IDRule,IDSeason,IDAccess+Zone

# struktura je Nazev_tabulky=sloupec1,sloupec2|Nazev_tabulky2=sloupec1,sloupec2
pmc.etlsybase.columns =
pmc.etlsybase.whereCondition = ,,,,,,,,,,,,,,,,,,,,,,,,,,,
pmc.etldbsybase.prefix =
  1. Tímto nastavením se zapíná opakované spouštění
  2. Konfigurace připojení do databáze
  3. Vyměnit za správné uživatelské údaje!
  4. Nastavení MQ komunikace - je třeba upravit podle prostředí
  5. Konfigurace tabulek, které se mají přenášet

Instalace služby

WINDOWS

pro windows je vytvořen instalátor. Instalace probíhá standardně.

Instalace Windows 1

Umístění souborů: defaultně se vyplní adresář, ze kterého je instalační soubor spuštěn.
Je možné zadat jinou cestu, například D:\GREENCenter\etl\GreenPro etl-1.0

Instalace Windows 2

Dále už není třeba nic měnit. Po instalaci se vytvoří služba GreenPro etl

Instalace Windows 3

V adresáři, kam se aplikace nainstalovala je soubor winsw.xml, kde lze upravit konfiguraci služby, přidat flag, upravit parametr prostředí...

<?xml version="1.0" encoding="UTF-8"?>
<service>
   <id>GreenPro etl</id>
   <name>GreenPro etl</name>
   <description>GreenPro etl</description>
   <executable>java</executable>
   <arguments>-jar ".\pmc-etl-sybase-1.0.1.jar" --spring.profiles.active=dev</arguments>
   <log mode="roll-by-size">
  <sizeThreshold>10240</sizeThreshold>
  <keepFiles>100</keepFiles>
  </log>
  <logpath>%BASE%\log</logpath>
</service>

Po úpravě souboru je nutné službu restartovat.

Vytvoření instalátoru windows

Proces je stejný jako pro službu pos. (je třeba mít k dispozici program Inno Setup) v repozitáři je složka script, kde jsou všechny soubory potřebné k vytvoření instalátoru (kromě .jar souboru, který je třeba vytvořit)