# portable soak 运行配置。
# 复制为 .env 后可以在远端直接调整；所有路径默认相对 package 根目录。

# 最大运行轮次。重复执行 run_soak.sh 时会从已有最后一轮之后继续编号。
# 正整数表示固定运行轮次；负数（例如 -1）表示持续运行不自动停止；0 非法。
MAX_RUNS=3

# 两轮之间等待秒数。做连续无等待验收时设置为 0。
INTERVAL_SECS=0

# 连续运行的时间预算，单位秒。0 表示不启用；启用后会在每轮结束时检查并自然停止。
# 24 小时稳定性测试设置为 86400。
STOP_AFTER_SECS=0

# 要运行的 RIR 列表，逗号分隔。
# 合法值只有：afrinic, apnic, arin, lacnic, ripe。
# 示例：RIRS=apnic,arin 或 RIRS=afrinic,apnic,arin,lacnic,ripe
RIRS=afrinic,apnic,arin,lacnic,ripe

# TAL/TA 输入模式。
# file-with-ta：使用 package 内置 fixtures/tal + fixtures/ta，完全离线固定输入。
# file-live-ta：使用 package 内置 fixtures/tal；snapshot 轮默认先阻塞完成 live TA 获取再启动子进程，
#               delta 轮后台 best-effort 刷新 TA 到 state/live-ta，子进程使用当前已有的 state/live-ta。
# url：直接把 TAL URL 传给子进程，由子进程处理 TAL/TA 获取。
TAL_INPUT_MODE=file-with-ta

# file-live-ta live TA 刷新 curl 超时配置。
LIVE_TA_REFRESH_CONNECT_TIMEOUT_SECS=15
LIVE_TA_REFRESH_MAX_TIME_SECS=120

# file-live-ta 在 snapshot 轮是否先完成 live TA 获取再启动子进程。
# 建议保持 1，避免 clean state 首轮 snapshot 使用旧 fixture TA。
LIVE_TA_REFRESH_BEFORE_SNAPSHOT=1

# 运行根目录。默认使用 package 根目录；如需把产物写到独立数据盘，可改成绝对路径。
RUN_ROOT="${PACKAGE_ROOT}"

# 保留最近多少轮 run 目录。24 小时稳定性测试默认使用最近 100 轮。
RETAIN_RUNS=10

# 每轮完成并复制出 run 产物后，是否清理 tmp/daemon-run_xxxx，避免 tmp 与 runs 双份占用。
CLEAN_TMP_AFTER_RUN=0

# 是否输出 compact report JSON。1 表示启用，0 表示关闭。
OUTPUT_COMPACT_REPORT=1

# 是否复用持久 rsync mirror。1 表示跨 run 复用；失败隔离数据库时也不会清理 mirror。
ALLOW_RSYNC_MIRROR_REUSE=1

# rsync 同步/去重 scope。
# module-root 表示扩大实际拉取到 rsync module 根目录，并在同一 module 下复用成功拉取结果；
# host 表示按 rsync host 做失败短路，但实际拉取仍限定当前发布点，避免同一不可达 host 重复等待超时；
# publication-point 表示只按当前发布点去重。
RSYNC_SCOPE=module-root

# 前一轮失败或不完整时，是否隔离旧数据库和运行态目录后强制下一轮 snapshot。
# 建议保持 1；设置为 0 时，检测到前一轮失败会直接停止。
FAILURE_SNAPSHOT_RESET=1

# 每隔多少轮执行一次 db_stats --exact。设置为空或 0 表示关闭 exact 统计。
DB_STATS_EXACT_EVERY=3

# 是否开启 ours RP progress log。1 表示开启。
RPKI_PROGRESS_LOG=1

# progress log 慢步骤阈值，单位秒。
RPKI_PROGRESS_SLOW_SECS=10

# phase2 stage fresh 慢发布点阈值，单位毫秒。
RPKI_PROGRESS_STAGE_FRESH_SLOW_MS=1000

# phase2 PP 控制面慢发布点阈值，单位毫秒。
RPKI_PROGRESS_PP_CONTROL_SLOW_MS=100

# 是否在运行前尝试禁用 rpki-client timer 并杀掉竞争 RP 进程。
DISABLE_COMPETING_RPS=1

# 是否启用实验性 child CRT 验证缓存。独立于 ROA cache / PP cache；默认关闭。
# 开启后会额外传入 --enable-child-certificate-validation-cache。
ENABLE_CHILD_CERTIFICATE_VALIDATION_CACHE=0

# 传给 rpki 子进程的额外参数。多个参数用空格分隔。
# 示例：RPKI_EXTRA_ARGS="--enable-roa-validation-cache"
# 实验性 transport 预热：RPKI_EXTRA_ARGS="--enable-transport-request-prefetch --enable-roa-validation-cache"
RPKI_EXTRA_ARGS=""

# 是否为每轮输出 timing profile 到 runs/run_xxxx/analyze/timing.json。
# 性能 profile 或打点验证时设置为 1；普通 soak 建议保持 0，避免额外开销。
RPKI_ANALYZE=0

# 长期稳定性测试 runner 配置。运行命令：./run_24h_soak_with_metrics.sh
# 总运行时长，单位秒；0 表示持续运行不自动停止；如需 24 小时自然停止可设置为 86400。
SOAK_DURATION_SECS=0

# 小时报告间隔，单位秒。正式运行使用 3600；短周期验证可设置为 60。
HOURLY_REPORT_INTERVAL_SECS=3600

# 24 小时 runner 覆盖 run 保留数量；按 #062 要求默认保留最近 100 个 run。
SOAK_RETAIN_RUNS=100

# 是否启动 rpki_artifact_metrics sidecar。
START_METRICS_SERVICE=1

# 24 小时 runner 退出时是否停止 metrics sidecar。默认保留，方便 Prometheus/Grafana 继续展示最后状态。
STOP_METRICS_SERVICE_ON_EXIT=0

# metrics sidecar 监听地址。Prometheus 容器通过 host.docker.internal 访问。
METRICS_LISTEN=0.0.0.0:9556
METRICS_POLL_SECS=5
METRICS_INSTANCE=remote231-24h

# 是否启动 query service。启动后默认只索引启动后新完成的 run，避免补历史 run 影响 RP 性能。
START_QUERY_SERVICE=0

# query service 退出策略。长期运行时通常保持 0，让服务持续可查。
STOP_QUERY_SERVICE_ON_EXIT=0

# query service 监听地址和索引保留策略。
QUERY_LISTEN=0.0.0.0:9560
QUERY_WATCH_INTERVAL_SECS=5
QUERY_RETAIN_INDEXED_RUNS=10
QUERY_PROJECTION_ENTRY_LIMIT=20

# 默认不设置最小 run seq，由 query service 自动从“启动时最新 run 的下一轮”开始跟踪。
# 如需实验性指定起点，可设置为具体数字，例如 QUERY_WATCH_MIN_RUN_SEQ=7208。
QUERY_WATCH_MIN_RUN_SEQ=

# 是否允许 query service 补索引历史 run。默认 0，避免大量历史 report.json 扫描和 query-db 写入拖慢 RP。
QUERY_WATCH_BACKFILL=0

# 是否启动 package 内置 Prometheus/Grafana monitor stack。
START_MONITOR_STACK=1

# 24 小时 runner 退出时是否停止 monitor stack。默认保留，方便继续查看最后状态；数据 volume 会保留。
STOP_MONITOR_STACK_ON_EXIT=0

# Prometheus/Grafana 监控数据保留周期。
PROMETHEUS_RETENTION=7d

# 是否发送每小时 Feishu 摘要。需要配置 FEISHU_WEBHOOK_SCRIPT 或 FEISHU_WEBHOOK_URL。
SEND_FEISHU=1

# 只打印 Feishu 消息，不真实发送。联调时可设置为 1。
FEISHU_DRY_RUN=0

# 可选：复用 feishu-webhook skill 的发送脚本路径。
# 示例：FEISHU_WEBHOOK_SCRIPT=/home/yuyr/.codex/skills/user/feishu-webhook/scripts/send_feishu_text.py
FEISHU_WEBHOOK_SCRIPT=

# 小时报告异常判定阈值。
WALL_WARN_SECS=140
VRP_MIN=900000
VAPS_MIN=1000
PP_MIN=50000
# warning 只汇总展示；默认不作为 incident 条件。设置为非负数才启用阈值。
WARNING_MAX=-1

# 可选覆盖路径；默认由 package 自动推导。
# BIN_DIR="${PACKAGE_ROOT}/bin"
# FIXTURE_DIR="${PACKAGE_ROOT}/fixtures"
# DB_DIR="${RUN_ROOT}/state/db"
# META_DIR="${RUN_ROOT}/state/meta"
# TMP_DIR="${RUN_ROOT}/tmp"
# RSYNC_MIRROR_ROOT="${RUN_ROOT}/state/rsync-mirror"
