From d7579b286102b1775d987ccd877d9490dc1ab6e4 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 29 May 2026 18:21:00 +0100 Subject: [PATCH] formatting changes Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- docker/telemetry/TESTING.md | 92 ++++++++++++++-------------- docker/telemetry/integration-test.sh | 71 +++++++++++---------- 2 files changed, 86 insertions(+), 77 deletions(-) diff --git a/docker/telemetry/TESTING.md b/docker/telemetry/TESTING.md index fd20121f4b..9582b4499a 100644 --- a/docker/telemetry/TESTING.md +++ b/docker/telemetry/TESTING.md @@ -50,7 +50,7 @@ Wait for services to be ready: curl -sf http://localhost:13133/ && echo "collector ready" # Tempo readiness -curl -sf http://localhost:3200/ready > /dev/null && echo "tempo ready" +curl -sf http://localhost:3200/ready >/dev/null && echo "tempo ready" ``` ### Step 2: Start xrpld in standalone mode @@ -66,16 +66,16 @@ Wait a few seconds for the node to initialize. ```bash # server_info curl -s http://localhost:5005 \ - -d '{"method":"server_info"}' | jq .result.info.server_state + -d '{"method":"server_info"}' | jq .result.info.server_state # server_state curl -s http://localhost:5005 \ - -d '{"method":"server_state"}' | jq .result.state.server_state + -d '{"method":"server_state"}' | jq .result.state.server_state # ledger curl -s http://localhost:5005 \ - -d '{"method":"ledger","params":[{"ledger_index":"current"}]}' \ - | jq .result.ledger_current_index + -d '{"method":"ledger","params":[{"ledger_index":"current"}]}' | + jq .result.ledger_current_index ``` ### Step 4: Submit a transaction @@ -123,21 +123,21 @@ curl -s "$TEMPO/api/v2/search/tag/resource.service.name/values" | jq '.tagValues # Check RPC spans curl -s "$TEMPO/api/search" \ - --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.http_request"}' \ - --data-urlencode 'limit=5' | jq '.traces | length' + --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.http_request"}' \ + --data-urlencode 'limit=5' | jq '.traces | length' curl -s "$TEMPO/api/search" \ - --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.process"}' \ - --data-urlencode 'limit=5' | jq '.traces | length' + --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.process"}' \ + --data-urlencode 'limit=5' | jq '.traces | length' curl -s "$TEMPO/api/search" \ - --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.command.server_info"}' \ - --data-urlencode 'limit=5' | jq '.traces | length' + --data-urlencode 'q={resource.service.name="xrpld" && name="rpc.command.server_info"}' \ + --data-urlencode 'limit=5' | jq '.traces | length' # Check transaction spans curl -s "$TEMPO/api/search" \ - --data-urlencode 'q={resource.service.name="xrpld" && name="tx.process"}' \ - --data-urlencode 'limit=5' | jq '.traces | length' + --data-urlencode 'q={resource.service.name="xrpld" && name="tx.process"}' \ + --data-urlencode 'limit=5' | jq '.traces | length' ``` Or open Grafana Explore with Tempo datasource: http://localhost:3000 @@ -221,8 +221,8 @@ Generate 6 key pairs: ```bash for i in $(seq 1 6); do - curl -s http://localhost:5005 \ - -d '{"method":"validation_create"}' | jq '.result' + curl -s http://localhost:5005 \ + -d '{"method":"validation_create"}' | jq '.result' done ``` @@ -318,8 +318,8 @@ trace_ledger=1 ```bash for i in $(seq 1 6); do - .build/xrpld --conf /tmp/xrpld-integration/node$i/xrpld.cfg --start & - echo $! > /tmp/xrpld-integration/node$i/xrpld.pid + .build/xrpld --conf /tmp/xrpld-integration/node$i/xrpld.cfg --start & + echo $! >/tmp/xrpld-integration/node$i/xrpld.pid done ``` @@ -329,14 +329,14 @@ Poll each node until `server_state` = `"proposing"`: ```bash for port in 5005 5006 5007 5008 5009 5010; do - while true; do - state=$(curl -s http://localhost:$port \ - -d '{"method":"server_info"}' \ - | jq -r '.result.info.server_state') - echo "Port $port: $state" - [ "$state" = "proposing" ] && break - sleep 5 - done + while true; do + state=$(curl -s http://localhost:$port \ + -d '{"method":"server_info"}' | + jq -r '.result.info.server_state') + echo "Port $port: $state" + [ "$state" = "proposing" ] && break + sleep 5 + done done ``` @@ -412,18 +412,18 @@ curl -s "$TEMPO/api/v2/search/tag/resource.service.name/values" | jq '.tagValues # Query traces by operation for op in "rpc.http_request" "rpc.ws_upgrade" "rpc.ws_message" "rpc.process" \ - "rpc.command.server_info" "rpc.command.server_state" "rpc.command.ledger" \ - "tx.process" "tx.receive" "tx.apply" \ - "consensus.proposal.send" "consensus.ledger_close" \ - "consensus.accept" "consensus.accept.apply" \ - "consensus.validation.send" \ - "ledger.build" "ledger.validate" "ledger.store" \ - "peer.proposal.receive" "peer.validation.receive"; do - count=$(curl -s "$TEMPO/api/search" \ - --data-urlencode "q={resource.service.name=\"xrpld\" && name=\"$op\"}" \ - --data-urlencode "limit=5" \ - | jq '.traces | length') - printf "%-35s %s traces\n" "$op" "$count" + "rpc.command.server_info" "rpc.command.server_state" "rpc.command.ledger" \ + "tx.process" "tx.receive" "tx.apply" \ + "consensus.proposal.send" "consensus.ledger_close" \ + "consensus.accept" "consensus.accept.apply" \ + "consensus.validation.send" \ + "ledger.build" "ledger.validate" "ledger.store" \ + "peer.proposal.receive" "peer.validation.receive"; do + count=$(curl -s "$TEMPO/api/search" \ + --data-urlencode "q={resource.service.name=\"xrpld\" && name=\"$op\"}" \ + --data-urlencode "limit=5" | + jq '.traces | length') + printf "%-35s %s traces\n" "$op" "$count" done ``` @@ -435,16 +435,16 @@ Base URL: `http://localhost:9090` PROM="http://localhost:9090" # Span call counts (from spanmetrics connector) -curl -s "$PROM/api/v1/query?query=traces_span_metrics_calls_total" \ - | jq '.data.result[] | {span: .metric.span_name, count: .value[1]}' +curl -s "$PROM/api/v1/query?query=traces_span_metrics_calls_total" | + jq '.data.result[] | {span: .metric.span_name, count: .value[1]}' # Latency histogram -curl -s "$PROM/api/v1/query?query=traces_span_metrics_duration_milliseconds_count" \ - | jq '.data.result[] | {span: .metric.span_name, count: .value[1]}' +curl -s "$PROM/api/v1/query?query=traces_span_metrics_duration_milliseconds_count" | + jq '.data.result[] | {span: .metric.span_name, count: .value[1]}' # RPC calls by command -curl -s "$PROM/api/v1/query?query=traces_span_metrics_calls_total{span_name=~\"rpc.command.*\"}" \ - | jq '.data.result[] | {command: .metric["xrpl.rpc.command"], count: .value[1]}' +curl -s "$PROM/api/v1/query?query=traces_span_metrics_calls_total{span_name=~\"rpc.command.*\"}" | + jq '.data.result[] | {command: .metric["xrpl.rpc.command"], count: .value[1]}' ``` ### Grafana @@ -486,7 +486,7 @@ Pre-configured datasources: 1. Check that all peer ports (51235-51240) are not in use: ```bash for p in 51235 51236 51237 51238 51239 51240; do - ss -tlnp | grep ":$p " && echo "port $p in use" + ss -tlnp | grep ":$p " && echo "port $p in use" done ``` 2. Verify `[ips_fixed]` lists all 6 peer ports @@ -499,8 +499,8 @@ Pre-configured datasources: 1. Verify genesis account exists: ```bash curl -s http://localhost:5005 \ - -d '{"method":"account_info","params":[{"account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}]}' \ - | jq .result.account_data.Balance + -d '{"method":"account_info","params":[{"account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}]}' | + jq .result.account_data.Balance ``` 2. Check submit response for error codes 3. In standalone mode, remember to call `ledger_accept` after submitting diff --git a/docker/telemetry/integration-test.sh b/docker/telemetry/integration-test.sh index d61c3584d8..634addcf91 100755 --- a/docker/telemetry/integration-test.sh +++ b/docker/telemetry/integration-test.sh @@ -34,7 +34,7 @@ RPC_PORT_BASE=5005 CONSENSUS_TIMEOUT=120 GENESIS_ACCOUNT="rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh" GENESIS_SEED="snoPBrXtMeMyMHUVTgbuqAfg1SUTb" -DEST_ACCOUNT="" # Generated dynamically via wallet_propose +DEST_ACCOUNT="" # Generated dynamically via wallet_propose TEMPO="http://localhost:3200" PROM="http://localhost:9090" @@ -45,18 +45,27 @@ FAIL=0 # --------------------------------------------------------------------------- # Helpers # --------------------------------------------------------------------------- -log() { printf "\033[1;34m[INFO]\033[0m %s\n" "$*"; } -ok() { printf "\033[1;32m[PASS]\033[0m %s\n" "$*"; PASS=$((PASS + 1)); } -fail() { printf "\033[1;31m[FAIL]\033[0m %s\n" "$*"; FAIL=$((FAIL + 1)); } -die() { printf "\033[1;31m[ERROR]\033[0m %s\n" "$*" >&2; exit 1; } +log() { printf "\033[1;34m[INFO]\033[0m %s\n" "$*"; } +ok() { + printf "\033[1;32m[PASS]\033[0m %s\n" "$*" + PASS=$((PASS + 1)) +} +fail() { + printf "\033[1;31m[FAIL]\033[0m %s\n" "$*" + FAIL=$((FAIL + 1)) +} +die() { + printf "\033[1;31m[ERROR]\033[0m %s\n" "$*" >&2 + exit 1 +} check_span() { local op="$1" local count count=$(curl -sf "$TEMPO/api/search" \ --data-urlencode "q={resource.service.name=\"rippled\" && name=\"$op\"}" \ - --data-urlencode "limit=5" \ - | jq '.traces | length' 2>/dev/null || echo 0) + --data-urlencode "limit=5" | + jq '.traces | length' 2>/dev/null || echo 0) if [ "$count" -gt 0 ]; then ok "$op ($count traces)" else @@ -166,7 +175,7 @@ mkdir -p "$TEMP_DATA" # Create a minimal temp config for key generation TEMP_CFG="$TEMP_DATA/xrpld.cfg" -cat > "$TEMP_CFG" <"$TEMP_CFG" < "$TEMP_DATA/stdout.log" 2>&1 & +"$XRPLD" --conf "$TEMP_CFG" -a --start >"$TEMP_DATA/stdout.log" 2>&1 & TEMP_PID=$! log "Temporary xrpld started (PID $TEMP_PID), waiting for RPC..." @@ -240,7 +249,7 @@ VALIDATORS_FILE="$WORKDIR/validators.txt" for i in $(seq 0 $((NUM_NODES - 1))); do echo "${PUBKEYS[$i]}" done -} > "$VALIDATORS_FILE" +} >"$VALIDATORS_FILE" # Create per-node configs for i in $(seq 1 "$NUM_NODES"); do @@ -260,7 +269,7 @@ for i in $(seq 1 "$NUM_NODES"); do fi done - cat > "$NODE_DIR/xrpld.cfg" <"$NODE_DIR/xrpld.cfg" < "$NODE_DIR/stdout.log" 2>&1 & - echo $! > "$NODE_DIR/xrpld.pid" + "$XRPLD" --conf "$NODE_DIR/xrpld.cfg" --start >"$NODE_DIR/stdout.log" 2>&1 & + echo $! >"$NODE_DIR/xrpld.pid" log " Node $i started (PID $(cat "$NODE_DIR/xrpld.pid"))" done @@ -352,7 +361,7 @@ start_time=$(date +%s) nodes_ready=0 while [ "$nodes_ready" -lt "$NUM_NODES" ]; do - elapsed=$(( $(date +%s) - start_time )) + elapsed=$(($(date +%s) - start_time)) if [ "$elapsed" -ge "$CONSENSUS_TIMEOUT" ]; then fail "Consensus timeout after ${CONSENSUS_TIMEOUT}s ($nodes_ready/$NUM_NODES nodes ready)" log "Continuing with partial consensus..." @@ -363,8 +372,8 @@ while [ "$nodes_ready" -lt "$NUM_NODES" ]; do for i in $(seq 1 "$NUM_NODES"); do RPC_PORT=$((RPC_PORT_BASE + i - 1)) state=$(curl -sf "http://localhost:$RPC_PORT" \ - -d '{"method":"server_info"}' 2>/dev/null \ - | jq -r '.result.info.server_state' 2>/dev/null || echo "unreachable") + -d '{"method":"server_info"}' 2>/dev/null | + jq -r '.result.info.server_state' 2>/dev/null || echo "unreachable") if [ "$state" = "proposing" ]; then nodes_ready=$((nodes_ready + 1)) fi @@ -388,8 +397,8 @@ fi log "Waiting for first validated ledger..." for attempt in $(seq 1 60); do val_seq=$(curl -sf "http://localhost:$RPC_PORT_BASE" \ - -d '{"method":"server_info"}' 2>/dev/null \ - | jq -r '.result.info.validated_ledger.seq // 0' 2>/dev/null || echo 0) + -d '{"method":"server_info"}' 2>/dev/null | + jq -r '.result.info.validated_ledger.seq // 0' 2>/dev/null || echo 0) if [ "$val_seq" -gt 2 ] 2>/dev/null; then ok "First validated ledger: seq $val_seq" break @@ -406,11 +415,11 @@ done log "Exercising RPC spans..." curl -sf "http://localhost:$RPC_PORT_BASE" \ - -d '{"method":"server_info"}' > /dev/null + -d '{"method":"server_info"}' >/dev/null curl -sf "http://localhost:$RPC_PORT_BASE" \ - -d '{"method":"server_state"}' > /dev/null + -d '{"method":"server_state"}' >/dev/null curl -sf "http://localhost:$RPC_PORT_BASE" \ - -d '{"method":"ledger","params":[{"ledger_index":"current"}]}' > /dev/null + -d '{"method":"ledger","params":[{"ledger_index":"current"}]}' >/dev/null log "RPC commands sent. Waiting 5s for batch export..." sleep 5 @@ -427,7 +436,7 @@ wallet_result=$(curl -sf "http://localhost:$RPC_PORT_BASE" \ DEST_ACCOUNT=$(echo "$wallet_result" | jq -r '.result.account_id' 2>/dev/null) if [ -z "$DEST_ACCOUNT" ] || [ "$DEST_ACCOUNT" = "null" ]; then fail "Could not generate destination wallet" - DEST_ACCOUNT="rrrrrrrrrrrrrrrrrrrrrhoLvTp" # ACCOUNT_ZERO fallback + DEST_ACCOUNT="rrrrrrrrrrrrrrrrrrrrrhoLvTp" # ACCOUNT_ZERO fallback fi log " Destination: $DEST_ACCOUNT" @@ -460,8 +469,8 @@ sleep 15 log "Verifying spans in Tempo..." # Check service registration -services=$(curl -sf "$TEMPO/api/v2/search/tag/resource.service.name/values" \ - | jq -r '.tagValues[].value' 2>/dev/null || echo "") +services=$(curl -sf "$TEMPO/api/v2/search/tag/resource.service.name/values" | + jq -r '.tagValues[].value' 2>/dev/null || echo "") if echo "$services" | grep -q "rippled"; then ok "Service 'rippled' registered in Tempo" else @@ -508,16 +517,16 @@ log "--- Phase 5: Spanmetrics ---" log "Waiting 20s for Prometheus scrape cycle..." sleep 20 -calls_count=$(curl -sf "$PROM/api/v1/query?query=traces_span_metrics_calls_total" \ - | jq '.data.result | length' 2>/dev/null || echo 0) +calls_count=$(curl -sf "$PROM/api/v1/query?query=traces_span_metrics_calls_total" | + jq '.data.result | length' 2>/dev/null || echo 0) if [ "$calls_count" -gt 0 ]; then ok "Prometheus: traces_span_metrics_calls_total ($calls_count series)" else fail "Prometheus: traces_span_metrics_calls_total (0 series)" fi -duration_count=$(curl -sf "$PROM/api/v1/query?query=traces_span_metrics_duration_milliseconds_count" \ - | jq '.data.result | length' 2>/dev/null || echo 0) +duration_count=$(curl -sf "$PROM/api/v1/query?query=traces_span_metrics_duration_milliseconds_count" | + jq '.data.result | length' 2>/dev/null || echo 0) if [ "$duration_count" -gt 0 ]; then ok "Prometheus: duration histogram ($duration_count series)" else @@ -525,7 +534,7 @@ else fi # Check Grafana -if curl -sf http://localhost:3000/api/health > /dev/null 2>&1; then +if curl -sf http://localhost:3000/api/health >/dev/null 2>&1; then ok "Grafana: healthy at localhost:3000" else fail "Grafana: not reachable at localhost:3000" @@ -542,8 +551,8 @@ sleep 20 check_statsd_metric() { local metric_name="$1" local result - result=$(curl -sf "$PROM/api/v1/query?query=$metric_name" \ - | jq '.data.result | length' 2>/dev/null || echo 0) + result=$(curl -sf "$PROM/api/v1/query?query=$metric_name" | + jq '.data.result | length' 2>/dev/null || echo 0) if [ "$result" -gt 0 ]; then ok "StatsD: $metric_name ($result series)" else