#!/usr/bin/env bash set -euo pipefail # Script de medição de tempo de inicialização e memória RSS em idle do CyberCore Signer PORT=21325 JAR_FILE="modules/cybercore-app/target/cybercore-signer.jar" JAVA_BIN="${JAVA_HOME:-/home/claudecio/.jdks/jdk-25.0.4.1+1}/bin/java" if [ ! -f "$JAR_FILE" ]; then echo "Erro: JAR $JAR_FILE não encontrado. Execute ./mvnw package primeiro." exit 1 fi # Garante que a porta esteja livre antes de iniciar fuser -k "${PORT}/tcp" 2>/dev/null || true sleep 1 # Timestamp inicial em milissegundos START_TIME=$(date +%s%3N) # Inicia o agente em modo headless "$JAVA_BIN" -jar "$JAR_FILE" --headless --port "$PORT" > /dev/null 2>&1 & APP_PID=$! # Aguarda até que o endpoint CCSP /status responda HTTP 200 MAX_WAIT_SECONDS=15 READY=0 while true; do HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:${PORT}/ccsp/v1/status" 2>/dev/null || echo "000") if [ "$HTTP_CODE" = "200" ]; then READY=1 break fi CURRENT_TIME=$(date +%s%3N) ELAPSED=$((CURRENT_TIME - START_TIME)) if [ "$ELAPSED" -gt $((MAX_WAIT_SECONDS * 1000)) ]; then echo "Timeout aguardando inicialização do servidor CCSP." kill -9 "$APP_PID" 2>/dev/null || true exit 1 fi sleep 0.05 done END_TIME=$(date +%s%3N) STARTUP_MS=$((END_TIME - START_TIME)) # Aguarda 2 segundos para estabilização de memória em repouso (idle) sleep 2 # Mede RSS via ps (em KB) RSS_KB=$(ps -o rss= -p "$APP_PID" | tr -d ' ' || echo "0") RSS_MB=$(awk "BEGIN {printf \"%.2f\", $RSS_KB / 1024}") # Encerra o processo limpo kill "$APP_PID" 2>/dev/null || true wait "$APP_PID" 2>/dev/null || true echo "STARTUP_MS=${STARTUP_MS}" echo "RSS_KB=${RSS_KB}" echo "RSS_MB=${RSS_MB}"