Utility Modules
A collection of auxiliary modules that support Platform operation. These are not constantly running but are designed to be executed on demand.
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.
| Module | Purpose | Current Release |
|---|---|---|
| backup | Integrated backup (PG / Aster TSDB / files) | ✅ Included in Data Lake container |
| mirror-maker | Data replication (HA / DR) | ✅ Separate container — Off by default via mirror profile |
| api | REST API client library | ✅ Library for external Java projects (unrelated to container) |
| setup | Batch registration of initial models (CSV) | ✅ Released as own image (2026.09) — No Java/build required |
| recovery | Data recovery | ❌ Not included in image |
| exporter | Time series CSV export | ❌ Not included in image |
| migrator | Aster TSDB data migration | ❌ Excluded as of 2026-08-30 |
| lab | Jupyter / 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
| Item | Value |
|---|---|
| Image | docker.kopens.io/pp/plantpulse-setup:<릴리즈 태그> · :latest |
| CSV Transfer | Mount host directory and provide the path inside the container to --dir |
| Encoding | Default is MS949. For UTF-8, use -e CSV_CHARSET=UTF-8 |
| Required Arguments | --host · --port · --user · --password · --dir (No default values) |
| Protocol | HTTP Only — set --port to 80 |
--port 7003 in previous examples is now incorrectAPI 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_SITE_LIST.csv— Site list2_ASSET_TREE.csv— Asset hierarchy3_OPC_LIST.csv— OPC server connection4_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
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
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
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
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
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.