Loading .gitlab-ci.yml +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ variables: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" environment: name: dev/${CI_PROJECT_NAME} Loading @@ -35,6 +38,9 @@ variables: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" AWS_REGION=${AWS_REGION} environment: name: pro/${CI_PROJECT_NAME} Loading Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ RUN apk add --no-cache --virtual \ tar xvzf /pg_partman.tgz && \ cd pg_partman-${PG_PARTMAN_VERSION} && \ make && \ make install && \ make NO_BGW=1 install && \ cd .. && \ rm -rf pg_partman.tgz pg_partman-* && \ echo "shared_preload_libraries='pg_partman_bgw,pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "shared_preload_libraries='pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "checkpoint_timeout = 30min" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "max_wal_size = 2GB" >> /usr/local/share/postgresql/postgresql.conf.sample && \ mv /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint-origin.sh Loading deploy/.env +3 −1 Original line number Diff line number Diff line PGDATA=/var/lib/postgresql/data/db-files/ INTERVAL=half-hour INTERVAL=hourly MAINTENANCE_INTERVAL=30 * * * * RETENTION_TIME=7 days POSTGRES_DB=ais deploy/docker-compose.postgresql.tmpl.yml +7 −1 Original line number Diff line number Diff line Loading @@ -9,10 +9,16 @@ services: - POSTGRES_USER - PGDATA - INTERVAL - MAINTENANCE_INTERVAL_MINUTE - MAINTENANCE_INTERVAL_HOUR - MAINTENANCE_INTERVAL_DAY_OF_MONTH - MAINTENANCE_INTERVAL_MONTH - MAINTENANCE_INTERVAL_DAY_OF_WEEK - RETENTION_TIME networks: postgres-vessel-net: aliases: - vessel-db - ais-db volumes: - vessel-postgres-vol:/var/lib/postgresql/data Loading rootfs/docker-entrypoint-initdb.d/vessel.sh +26 −9 Original line number Diff line number Diff line Loading @@ -2,6 +2,16 @@ set -e INTERVAL=${INTERVAL:-hourly} MAINTENANCE_INTERVAL_MINUTE=${MAINTENANCE_INTERVAL_MINUTE:-30} MAINTENANCE_INTERVAL_HOUR=${MAINTENANCE_INTERVAL_HOUR:-*} MAINTENANCE_INTERVAL_DAY_OF_MONTH=${MAINTENANCE_INTERVAL_DAY_OF_MONTH:-*} MAINTENANCE_INTERVAL_MONTH=${MAINTENANCE_INTERVAL_MONTH:-*} MAINTENANCE_INTERVAL_DAY_OF_WEEK=${MAINTENANCE_INTERVAL_DAY_OF_WEEK:-*} RETENTION_TIME=${RETENTION_TIME:-7 days} maintenanceInterval="$MAINTENANCE_INTERVAL_MINUTE $MAINTENANCE_INTERVAL_HOUR $MAINTENANCE_INTERVAL_DAY_OF_MONTH $MAINTENANCE_INTERVAL_MONTH $MAINTENANCE_INTERVAL_DAY_OF_WEEK" psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE SCHEMA IF NOT EXISTS ais; Loading Loading @@ -54,8 +64,14 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E ON ais.location USING gist (shape); CREATE INDEX IF NOT EXISTS sidx_location_tstamp ON ais.location (tstamp); CREATE INDEX IF NOT EXISTS sidx_location_tstamp_desc ON ais.location (tstamp DESC); CREATE INDEX IF NOT EXISTS sidx_location_mmsi ON ais.location (mmsi); CREATE INDEX IF NOT EXISTS sidx_location_tstamp_mmsi ON ais.location (tstamp, mmsi); CREATE OR REPLACE FUNCTION ais.initialize_geom_and_dates() RETURNS TRIGGER Loading Loading @@ -116,12 +132,13 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E WHEN TAG IN ('CREATE TABLE') EXECUTE PROCEDURE on_create_table_create_trigger(); SELECT partman.create_parent('ais.location', 'tstamp', 'native', '${INTERVAL}', p_premake := 8); UPDATE partman.part_config SET infinite_time_partitions = true; SELECT cron.schedule('@${INTERVAL}', \$\$CALL partman.run_maintenance_proc(p_analyze := false)\$\$); SELECT partman.create_parent('ais.location', 'tstamp', 'native', '${INTERVAL}', p_premake := 3, p_automatic_maintenance := 'off'); UPDATE partman.part_config SET infinite_time_partitions = true, retention = '${RETENTION_TIME}', retention_keep_table = false; CREATE VIEW ais.last_20m AS SELECT DISTINCT ON (mmsi) * FROM ais.location WHERE tstamp > current_timestamp - interval '20 minutes' ORDER BY mmsi, tstamp DESC; SELECT cron.schedule('${maintenanceInterval}', \$\$CALL partman.run_maintenance_proc(p_analyze := false)\$\$); EOSQL No newline at end of file Loading
.gitlab-ci.yml +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ variables: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" environment: name: dev/${CI_PROJECT_NAME} Loading @@ -35,6 +38,9 @@ variables: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" AWS_REGION=${AWS_REGION} environment: name: pro/${CI_PROJECT_NAME} Loading
Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ RUN apk add --no-cache --virtual \ tar xvzf /pg_partman.tgz && \ cd pg_partman-${PG_PARTMAN_VERSION} && \ make && \ make install && \ make NO_BGW=1 install && \ cd .. && \ rm -rf pg_partman.tgz pg_partman-* && \ echo "shared_preload_libraries='pg_partman_bgw,pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "shared_preload_libraries='pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "checkpoint_timeout = 30min" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "max_wal_size = 2GB" >> /usr/local/share/postgresql/postgresql.conf.sample && \ mv /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint-origin.sh Loading
deploy/.env +3 −1 Original line number Diff line number Diff line PGDATA=/var/lib/postgresql/data/db-files/ INTERVAL=half-hour INTERVAL=hourly MAINTENANCE_INTERVAL=30 * * * * RETENTION_TIME=7 days POSTGRES_DB=ais
deploy/docker-compose.postgresql.tmpl.yml +7 −1 Original line number Diff line number Diff line Loading @@ -9,10 +9,16 @@ services: - POSTGRES_USER - PGDATA - INTERVAL - MAINTENANCE_INTERVAL_MINUTE - MAINTENANCE_INTERVAL_HOUR - MAINTENANCE_INTERVAL_DAY_OF_MONTH - MAINTENANCE_INTERVAL_MONTH - MAINTENANCE_INTERVAL_DAY_OF_WEEK - RETENTION_TIME networks: postgres-vessel-net: aliases: - vessel-db - ais-db volumes: - vessel-postgres-vol:/var/lib/postgresql/data Loading
rootfs/docker-entrypoint-initdb.d/vessel.sh +26 −9 Original line number Diff line number Diff line Loading @@ -2,6 +2,16 @@ set -e INTERVAL=${INTERVAL:-hourly} MAINTENANCE_INTERVAL_MINUTE=${MAINTENANCE_INTERVAL_MINUTE:-30} MAINTENANCE_INTERVAL_HOUR=${MAINTENANCE_INTERVAL_HOUR:-*} MAINTENANCE_INTERVAL_DAY_OF_MONTH=${MAINTENANCE_INTERVAL_DAY_OF_MONTH:-*} MAINTENANCE_INTERVAL_MONTH=${MAINTENANCE_INTERVAL_MONTH:-*} MAINTENANCE_INTERVAL_DAY_OF_WEEK=${MAINTENANCE_INTERVAL_DAY_OF_WEEK:-*} RETENTION_TIME=${RETENTION_TIME:-7 days} maintenanceInterval="$MAINTENANCE_INTERVAL_MINUTE $MAINTENANCE_INTERVAL_HOUR $MAINTENANCE_INTERVAL_DAY_OF_MONTH $MAINTENANCE_INTERVAL_MONTH $MAINTENANCE_INTERVAL_DAY_OF_WEEK" psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE SCHEMA IF NOT EXISTS ais; Loading Loading @@ -54,8 +64,14 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E ON ais.location USING gist (shape); CREATE INDEX IF NOT EXISTS sidx_location_tstamp ON ais.location (tstamp); CREATE INDEX IF NOT EXISTS sidx_location_tstamp_desc ON ais.location (tstamp DESC); CREATE INDEX IF NOT EXISTS sidx_location_mmsi ON ais.location (mmsi); CREATE INDEX IF NOT EXISTS sidx_location_tstamp_mmsi ON ais.location (tstamp, mmsi); CREATE OR REPLACE FUNCTION ais.initialize_geom_and_dates() RETURNS TRIGGER Loading Loading @@ -116,12 +132,13 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E WHEN TAG IN ('CREATE TABLE') EXECUTE PROCEDURE on_create_table_create_trigger(); SELECT partman.create_parent('ais.location', 'tstamp', 'native', '${INTERVAL}', p_premake := 8); UPDATE partman.part_config SET infinite_time_partitions = true; SELECT cron.schedule('@${INTERVAL}', \$\$CALL partman.run_maintenance_proc(p_analyze := false)\$\$); SELECT partman.create_parent('ais.location', 'tstamp', 'native', '${INTERVAL}', p_premake := 3, p_automatic_maintenance := 'off'); UPDATE partman.part_config SET infinite_time_partitions = true, retention = '${RETENTION_TIME}', retention_keep_table = false; CREATE VIEW ais.last_20m AS SELECT DISTINCT ON (mmsi) * FROM ais.location WHERE tstamp > current_timestamp - interval '20 minutes' ORDER BY mmsi, tstamp DESC; SELECT cron.schedule('${maintenanceInterval}', \$\$CALL partman.run_maintenance_proc(p_analyze := false)\$\$); EOSQL No newline at end of file