20260616 增加产品UI查询服务
This commit is contained in:
@@ -27,7 +27,7 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
IGNORE_REGEX='repository_view_stats\.rs|db_stats\.rs|rrdp_state_dump\.rs|ccr_dump\.rs|ccr_verify\.rs|ccr_to_routinator_csv\.rs|ccr_to_compare_views\.rs|cir_materialize\.rs|cir_extract_inputs\.rs|cir_drop_report\.rs|cir_ta_only_fixture\.rs|cir_dump_reject_list\.rs|rpki_object_parse\.rs|triage_ccr_cir_pair\.rs|rpki_artifact_metrics|rpki_inter_rp_metrics|rpki_daemon\.rs|sequence_triage_ccr_cir|ccr_state_compare\.rs|cir_state_compare\.rs|cir_probe_rpki_client_cache\.rs|ccr/compare_view\.rs|progress_log\.rs|cli\.rs|validation/run_tree_from_tal\.rs|validation/tree_parallel\.rs|validation/tree_runner|validation/from_tal\.rs|sync/store_projection\.rs|sync/repo\.rs|sync/rrdp|(^|/)storage(/|\.rs$)|cir/materialize\.rs'
|
||||
IGNORE_REGEX='repository_view_stats\.rs|db_stats\.rs|rrdp_state_dump\.rs|ccr_dump\.rs|ccr_verify\.rs|ccr_to_routinator_csv\.rs|ccr_to_compare_views\.rs|cir_materialize\.rs|cir_extract_inputs\.rs|cir_drop_report\.rs|cir_ta_only_fixture\.rs|cir_dump_reject_list\.rs|rpki_object_parse\.rs|rpki_query_indexer\.rs|rpki_query_service\.rs|triage_ccr_cir_pair\.rs|rpki_artifact_metrics|rpki_inter_rp_metrics|rpki_daemon\.rs|sequence_triage_ccr_cir|ccr_state_compare\.rs|cir_state_compare\.rs|cir_probe_rpki_client_cache\.rs|ccr/compare_view\.rs|progress_log\.rs|cli\.rs|validation/run_tree_from_tal\.rs|validation/tree_parallel\.rs|validation/tree_runner|validation/from_tal\.rs|sync/store_projection\.rs|sync/repo\.rs|sync/rrdp|(^|/)storage(/|\.rs$)|cir/materialize\.rs'
|
||||
|
||||
# Preserve colored output even though we post-process output by running under a pseudo-TTY.
|
||||
# We run tests only once, then generate both CLI text + HTML reports without rerunning tests.
|
||||
|
||||
@@ -14,7 +14,7 @@ Usage:
|
||||
scripts/soak/build_portable_soak_package.sh [--out-dir <path>] [--profile <profile>]
|
||||
|
||||
Requires release binaries to already exist. Build them first, for example:
|
||||
cargo build --release --bin rpki --bin rpki_daemon --bin db_stats
|
||||
cargo build --release --bin rpki --bin rpki_daemon --bin db_stats --bin rpki_artifact_metrics --bin rpki_query_service --bin rpki_query_indexer
|
||||
USAGE
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ else
|
||||
TARGET_BIN_DIR="$REPO_ROOT/target/$PROFILE"
|
||||
fi
|
||||
|
||||
REQUIRED_BINS=(rpki rpki_daemon db_stats rpki_artifact_metrics)
|
||||
REQUIRED_BINS=(rpki rpki_daemon db_stats rpki_artifact_metrics rpki_query_service rpki_query_indexer)
|
||||
OPTIONAL_BINS=(
|
||||
ccr_dump
|
||||
ccr_state_compare
|
||||
|
||||
@@ -90,6 +90,25 @@ 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
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ SOAK_SCRIPT="${SOAK_SCRIPT:-$PACKAGE_ROOT/run_soak.sh}"
|
||||
HOURLY_REPORT_SCRIPT="${HOURLY_REPORT_SCRIPT:-$PACKAGE_ROOT/scripts/soak/hourly_soak_report.py}"
|
||||
|
||||
SOAK_DURATION_SECS="${SOAK_DURATION_SECS:-0}"
|
||||
SOAK_INTERVAL_SECS="${SOAK_INTERVAL_SECS:-${INTERVAL_SECS:-0}}"
|
||||
HOURLY_REPORT_INTERVAL_SECS="${HOURLY_REPORT_INTERVAL_SECS:-3600}"
|
||||
SOAK_RETAIN_RUNS="${SOAK_RETAIN_RUNS:-100}"
|
||||
CLEAN_TMP_AFTER_RUN="${CLEAN_TMP_AFTER_RUN:-1}"
|
||||
@@ -30,6 +31,17 @@ STOP_METRICS_SERVICE_ON_EXIT="${STOP_METRICS_SERVICE_ON_EXIT:-0}"
|
||||
METRICS_LISTEN="${METRICS_LISTEN:-0.0.0.0:9556}"
|
||||
METRICS_POLL_SECS="${METRICS_POLL_SECS:-5}"
|
||||
METRICS_INSTANCE="${METRICS_INSTANCE:-remote231-24h}"
|
||||
START_QUERY_SERVICE="${START_QUERY_SERVICE:-0}"
|
||||
STOP_QUERY_SERVICE_ON_EXIT="${STOP_QUERY_SERVICE_ON_EXIT:-0}"
|
||||
QUERY_LISTEN="${QUERY_LISTEN:-0.0.0.0:9560}"
|
||||
QUERY_DB="${QUERY_DB:-$RUN_ROOT/state/query-db}"
|
||||
QUERY_EXPORT_ROOT="${QUERY_EXPORT_ROOT:-$RUN_ROOT/state/query-exports}"
|
||||
QUERY_REPO_BYTES_DB="${QUERY_REPO_BYTES_DB:-$RUN_ROOT/state/db/repo-bytes.db}"
|
||||
QUERY_WATCH_INTERVAL_SECS="${QUERY_WATCH_INTERVAL_SECS:-5}"
|
||||
QUERY_WATCH_MIN_RUN_SEQ="${QUERY_WATCH_MIN_RUN_SEQ:-}"
|
||||
QUERY_WATCH_BACKFILL="${QUERY_WATCH_BACKFILL:-0}"
|
||||
QUERY_RETAIN_INDEXED_RUNS="${QUERY_RETAIN_INDEXED_RUNS:-10}"
|
||||
QUERY_PROJECTION_ENTRY_LIMIT="${QUERY_PROJECTION_ENTRY_LIMIT:-20}"
|
||||
PROMETHEUS_RETENTION="${PROMETHEUS_RETENTION:-7d}"
|
||||
SEND_FEISHU="${SEND_FEISHU:-1}"
|
||||
FEISHU_DRY_RUN="${FEISHU_DRY_RUN:-0}"
|
||||
@@ -45,6 +57,7 @@ WARNING_MAX="${WARNING_MAX:--1}"
|
||||
|
||||
SOAK_PID=""
|
||||
METRICS_PID=""
|
||||
QUERY_PID=""
|
||||
REPORTER_STOP=0
|
||||
|
||||
die() {
|
||||
@@ -75,6 +88,10 @@ cleanup() {
|
||||
kill "$METRICS_PID" >/dev/null 2>&1 || true
|
||||
wait "$METRICS_PID" >/dev/null 2>&1 || true
|
||||
fi
|
||||
if is_true "$STOP_QUERY_SERVICE_ON_EXIT" && [[ -n "$QUERY_PID" ]] && kill -0 "$QUERY_PID" >/dev/null 2>&1; then
|
||||
kill "$QUERY_PID" >/dev/null 2>&1 || true
|
||||
wait "$QUERY_PID" >/dev/null 2>&1 || true
|
||||
fi
|
||||
if is_true "$START_MONITOR_STACK" && is_true "$STOP_MONITOR_STACK_ON_EXIT" && [[ -f "$MONITOR_DIR/docker-compose.yml" ]]; then
|
||||
(cd "$MONITOR_DIR" && PROMETHEUS_RETENTION="$PROMETHEUS_RETENTION" docker compose down) >/dev/null 2>&1 || true
|
||||
fi
|
||||
@@ -116,6 +133,7 @@ format_epoch_rfc3339() {
|
||||
|
||||
main() {
|
||||
validate_non_negative_int "SOAK_DURATION_SECS" "$SOAK_DURATION_SECS"
|
||||
validate_non_negative_int "SOAK_INTERVAL_SECS" "$SOAK_INTERVAL_SECS"
|
||||
validate_non_negative_int "HOURLY_REPORT_INTERVAL_SECS" "$HOURLY_REPORT_INTERVAL_SECS"
|
||||
[[ "$HOURLY_REPORT_INTERVAL_SECS" != "0" ]] || die "HOURLY_REPORT_INTERVAL_SECS must be > 0"
|
||||
[[ -x "$SOAK_SCRIPT" ]] || die "missing executable: $SOAK_SCRIPT"
|
||||
@@ -137,6 +155,34 @@ main() {
|
||||
echo "$METRICS_PID" > "$LOG_ROOT/metrics.pid"
|
||||
fi
|
||||
|
||||
if is_true "$START_QUERY_SERVICE"; then
|
||||
[[ -x "$BIN_DIR/rpki_query_service" ]] || die "missing executable: $BIN_DIR/rpki_query_service"
|
||||
[[ -x "$BIN_DIR/rpki_query_indexer" ]] || die "missing executable: $BIN_DIR/rpki_query_indexer"
|
||||
mkdir -p "$QUERY_EXPORT_ROOT"
|
||||
query_args=(
|
||||
"$BIN_DIR/rpki_query_service"
|
||||
--query-db "$QUERY_DB"
|
||||
--repo-bytes-db "$QUERY_REPO_BYTES_DB"
|
||||
--export-root "$QUERY_EXPORT_ROOT"
|
||||
--listen "$QUERY_LISTEN"
|
||||
--watch-run-root "$RUN_ROOT"
|
||||
--watch-interval-secs "$QUERY_WATCH_INTERVAL_SECS"
|
||||
--indexer-bin "$BIN_DIR/rpki_query_indexer"
|
||||
--retain-indexed-runs "$QUERY_RETAIN_INDEXED_RUNS"
|
||||
--projection-entry-limit "$QUERY_PROJECTION_ENTRY_LIMIT"
|
||||
)
|
||||
if [[ -n "$QUERY_WATCH_MIN_RUN_SEQ" ]]; then
|
||||
query_args+=(--watch-min-run-seq "$QUERY_WATCH_MIN_RUN_SEQ")
|
||||
fi
|
||||
if is_true "$QUERY_WATCH_BACKFILL"; then
|
||||
query_args+=(--watch-backfill)
|
||||
fi
|
||||
"${query_args[@]}" \
|
||||
> "$LOG_ROOT/query-service.stdout" 2> "$LOG_ROOT/query-service.stderr" &
|
||||
QUERY_PID="$!"
|
||||
echo "$QUERY_PID" > "$LOG_ROOT/query-service.pid"
|
||||
fi
|
||||
|
||||
if is_true "$START_MONITOR_STACK"; then
|
||||
if [[ ! -f "$MONITOR_DIR/docker-compose.yml" ]]; then
|
||||
die "missing monitor compose: $MONITOR_DIR/docker-compose.yml"
|
||||
@@ -169,7 +215,7 @@ main() {
|
||||
fi
|
||||
printf '\n# Generated by run_24h_soak_with_metrics.sh\n'
|
||||
printf 'MAX_RUNS=-1\n'
|
||||
printf 'INTERVAL_SECS=0\n'
|
||||
printf 'INTERVAL_SECS=%q\n' "$SOAK_INTERVAL_SECS"
|
||||
if (( SOAK_DURATION_SECS > 0 )); then
|
||||
printf 'STOP_AFTER_SECS=%q\n' "$SOAK_DURATION_SECS"
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user