Skip to main content

Utility Modules

A collection of auxiliary modules that support Platform operation. These are not constantly running but are designed to be executed on demand.

Not all are included in the current container release

The modules included in the container images are fixed, and many in the table below are not included in the current image. If you search for these paths inside the container, they will not be found.

ModulePurposeCurrent Release
backupIntegrated backup (PG / Aster TSDB / files)✅ Included in Data Lake container
mirror-makerData replication (HA / DR)✅ Separate container — Off by default via mirror profile
apiREST API client library✅ Library for external Java projects (unrelated to container)
setupBatch registration of initial models (CSV)✅ Released as own image (2026.09) — No Java/build required
recoveryData recovery❌ Not included in image
exporterTime series CSV export❌ Not included in image
migratorAster TSDB data migration❌ Excluded as of 2026-08-30
labJupyter / Metabase analysis environment❌ Excluded as of 2026-08-30

migrator and lab were explicitly removed from the images because "the orchestrator does not call them, there are no units, and no processes actually run" (lab occupied 792MB of the image).

If you require the procedures below, please contact webmaster@kopens.com.

Modules included in the Data Lake container are executed inside the container.

cd /opt/kopens/plantpulse-platform-docker/bin
./shell.sh

plantpulse-setup​

Batch registers site / asset / OPC / tag models based on CSV files.

Starting 2026.09, this is provided as its own container image — there is no need to install Java or perform a build.

# 내 CSV 를 마운트해서 등록
docker run --rm -v "$PWD/csv:/csv" \
docker.kopens.io/pp/plantpulse-setup:latest \
--host ${PP_HOST_IP} --port 80 --user admin --password '<password>' --dir /csv

# 이미지에 든 예제로 먼저 시험 — 마운트 없이 됩니다
docker run --rm docker.kopens.io/pp/plantpulse-setup:latest \
--host ${PP_HOST_IP} --port 80 --user admin --password '<password>' \
--dir /opt/kopens/plantpulse-platform/plantpulse-setup/model_example

docker run --rm docker.kopens.io/pp/plantpulse-setup:latest --help
ItemValue
Imagedocker.kopens.io/pp/plantpulse-setup:<릴리즈 태그> · :latest
CSV TransferMount host directory and provide the path inside the container to --dir
EncodingDefault is MS949. For UTF-8, use -e CSV_CHARSET=UTF-8
Required Arguments--host · --port · --user · --password · --dir (No default values)
ProtocolHTTP Only — set --port to 80
The --port 7003 in previous examples is now incorrect

API connector 7003 was removed on 2026-09-14. It now connects via 80, similar to the web. If you continue to use 7003, the connection will fail.

🔴 443 cannot be used either. This tool communicates only via plaintext HTTP (hardcoded in source). If 443 is provided, it will attempt to speak plaintext to a TLS port and fail to connect — this is the same type of failure as 7003 (installation completes, but connection fails).

CSV File Order:

  1. 1_SITE_LIST.csv — Site list
  2. 2_ASSET_TREE.csv — Asset hierarchy
  3. 3_OPC_LIST.csv — OPC server connection
  4. 4_TAG_LIST.csv — Tag definition

plantpulse-backup​

Integrated backup for PostgreSQL (pgBackRest), Aster TSDB (Medusa), and files (Restic).

cd /opt/kopens/plantpulse-platform/plantpulse-backup/bin

./backup.sh --install # 초기 설정
./backup.sh --postgres # PG Differential (기본)
./backup.sh --postgres full # PG Full
./backup.sh --postgres incr # PG Incremental
./backup.sh --cassandra # Cassandra Differential
./backup.sh --cassandra full # Cassandra Full
./backup.sh --purge # 보관 정책 정리

# 파일 백업
/opt/kopens/plantpulse-platform/plantpulse-backup/etc/run_restic.sh

This tool does not manage schedules. --cron-install · --cron-remove · --schedule-install · --schedule-remove were retired on 2026-09-08; they now return an error and terminate with exit code 2. Schedules are stored in the backup_schedule table of the Data Lake DB and triggered by Quartz — view via pd backup schedule and modify via pd backup schedule set.

The only feature this tool still possesses is a global pause switch — PP_BACKUP_SCHEDULE_ENABLED=false (stops triggering without altering the schedule). Status can be checked via ./backup.sh --schedule-show.

For details, see Backup and Recovery.

plantpulse-recovery​

Not included in the current container image

Reprocesses time series data for specific assets by period.

cd /opt/kopens/plantpulse-platform/plantpulse-recovery/bin
./recovery.sh EQUIPMENT_000001 20260101 20260530

plantpulse-exporter​

Not included in the current container image

Time series data CSV export + high-volume dsbulk.

cd /opt/kopens/plantpulse-platform/plantpulse-exporter/bin

# 에셋 단위 CSV 추출
./export.sh EQUIPMENT_000001 20260101 20260530 /tmp

# 테이블 전체 벌크 언로드 (dsbulk)
./bulk-unload.sh pp tm_tag_point
# → /data1/pp-backup/cassandra/bulk/tm_tag_point.gz

# 벌크 로드 (복원)
./bulk-load.sh pp tm_tag_point

plantpulse-migrator​

Excluded from image as of 2026-08-30

Spark-based migration between Aster TSDB servers (server replacement / cluster migration).

cd /opt/kopens/plantpulse-platform/plantpulse-migrator/bin
./run.sh 192.168.0.41 192.168.0.237 pp.tm_tag_point

plantpulse-mirror-maker​

Data replication (HA / DR). Runs in its own container and is tied to the mirror profile, so it does not start by default.

cd /opt/kopens/plantpulse-platform-docker

# 켜기
docker compose -f compose/docker-compose.yml --profile mirror up -d plantpulse-mirror-maker

# 상태 · 로그
docker compose -f compose/docker-compose.yml --profile mirror ps
bin/logs.sh plantpulse-mirror-maker

Configurations are passed as environment variables in the compose file, as with other containers.

plantpulse-simulator​

Time series data simulator for testing and demos. It supports two modes: RANDOM (reads tag list and evenly distributes N samples per second) or CSV (plays back a file containing timestamps in order). Released as a container image starting 2026.09.

# 무작위 부하
docker run --rm \
-e API_HOST=${PP_HOST_IP} -e API_TOKEN=<v5 API 토큰> \
-e PP_MQ_USER=<메시징 계정> -e PP_MQ_PASSWORD=<메시징 비밀번호> \
-e SIM_TYPE=RANDOM -e SIM_MPS=1000 \
docker.kopens.io/pp/plantpulse-simulator:latest

# CSV 재생 — 파일을 마운트하고 «컨테이너 안» 경로를 줍니다
docker run --rm -v "$PWD/data:/data" \
-e API_HOST=${PP_HOST_IP} -e API_TOKEN=<token> \
-e PP_MQ_USER=<계정> -e PP_MQ_PASSWORD=<password> \
-e SIM_TYPE=CSV -e SIM_CSV=/data/a.csv,/data/b.csv \
-e SIM_START=TOMORROW -e SIM_SPEED=2.0 \
docker.kopens.io/pp/plantpulse-simulator:latest
Refuses to start if required network settings are missing

The container will not start if API_HOST · API_TOKEN · PP_MQ_USER · PP_MQ_PASSWORD are missing — this prevents a state where the container starts without a token and sends nothing.

plantpulse-api​

PlantPulse REST API client Java library.

plantpulse-api/
├── lib/ # 의존 jar
└── target/
├── plantpulse-api.jar
├── plantpulse-buffer.jar
├── plantpulse-cassandra-3.0.jar
├── plantpulse-cassandra.jar
└── plantpulse-cep-api.jar

Use by adding dependencies to pom.xml / build.gradle of an external Java project. For detailed usage, refer to the API User Manual.

plantpulse-lab​

Excluded from image as of 2026-08-30

Jupyter and Metabase were removed from the image (which occupied 792MB) because the orchestrator did not launch them and no processes were actually running.

The Jupyter card may still be visible in the web console, but that card did not function even before this change. If an analysis environment is required, it is recommended to host it externally and connect via Kyuubi(10000) and PostgreSQL(5432).

Analysis environment for data scientists and developers.

plantpulse-lab/
├── jupyter/ # Jupyter Notebook
│ ├── bin/
│ ├── logs/
│ └── notebook/ # 노트북 저장소
└── metabase/ # Metabase (BI 도구)
├── bin/
└── metabase.jar

Jupyter​

cd /opt/kopens/plantpulse-platform/plantpulse-lab/jupyter/bin
./start.sh
# 기본 포트 8888

PySpark / cassandra-driver / psycopg2 are pre-installed for immediate analysis.

Metabase​

cd /opt/kopens/plantpulse-platform/plantpulse-lab/metabase/bin
./start.sh
# 기본 포트 3001

Visual BI dashboard for non-developers. Direct connection to PostgreSQL / Kyuubi.