set -e
CLUSTER=""
DAYS=""
while [[ $
case $1 in
--cluster)
CLUSTER="$2"
shift 2
;;
--days)
DAYS="$2"
shift 2
;;
*)
echo "❌ 알 수 없는 인자입니다: $1"
echo "사용법: ./run_pipeline_analysis.sh --cluster [COMPUTE|STORAGE] --days [N]"
exit 1
;;
esac
done
if [ -z "$CLUSTER" ] || [ -z "$DAYS" ]; then
echo "❌ 필수 파라미터가 누락되었습니다."
echo "사용법: ./run_pipeline_analysis.sh --cluster [COMPUTE|STORAGE] --days [개수]"
exit 1
fi
echo "🔍 AIStor(MinIO) 오브젝트 스토리지 내 [${CLUSTER}] 클러스터의 ${DAYS}일치 정산 원부 가용성 검증 중..."
CACHE_STATUS=$(python3 -c "
import os, sys, boto3
from datetime import datetime, timedelta, timezone
KST = timezone(timedelta(hours=9))
cluster = '$CLUSTER'
days = int('$DAYS')
s3_client = boto3.client(
's3',
endpoint_url=os.getenv('MINIO_ENDPOINT'),
aws_access_key_id=os.getenv('MINIO_ACCESS_KEY'),
aws_secret_access_key=os.getenv('MINIO_SECRET_KEY')
)
bucket_name = os.getenv('MINIO_RAW_BUCKET', 'devops-test')
now_kst = datetime.now(KST)
all_cached = True
for i in range(1, days + 1):
target_date = (now_kst - timedelta(days=i)).strftime('%Y%m%d')
object_key = f'merged/{cluster}/daily_enriched_{cluster}_{target_date}.parquet'
try:
s3_client.head_object(Bucket=bucket_name, Key=object_key)
except Exception:
all_cached = False
break
print('HIT' if all_cached else 'MISS')
")
if [ "$CACHE_STATUS" == "HIT" ]; then
echo "========================================================================="
echo "⚡ [Cache Hit] 요청하신 ${DAYS}일치 정산 데이터가 AIStor에 모두 완벽하게 보존되어 있습니다."
echo "🚀 1단계(수집) 및 2단계(정산)를 건너뛰고, [3단계 시각화]부터 패스트 트랙 가동합니다."
echo "========================================================================="
python3 step3_analytics.py --cluster "$CLUSTER"
python3 step4_governance_analyzer.py --cluster "$CLUSTER"
python3 step6_excel_builder.py --cluster "$CLUSTER"
else
echo "========================================================================="
echo "💨 [Cache Miss] AIStor에 정산 원부가 없거나 일부 유실된 상태가 감지되었습니다."
echo "🔄 무결성 확보를 위해 1단계 원천 징수부터 전 과정 풀 파이프라인(Full Recovery)을 집행합니다."
echo "========================================================================="
python3 step1_prom_fetch.py --days "$DAYS"
python3 step2_pipeline_polars.py --cluster "$CLUSTER" --days "$DAYS"
python3 step3_analytics.py --cluster "$CLUSTER"
python3 step4_governance_analyzer.py --cluster "$CLUSTER"
python3 step6_excel_builder.py --cluster "$CLUSTER"
fi
echo "🏁 === [Analysis Pipeline 완수] 모든 격리 분석 리포트가 자산화되었습니다. ==="