#!/bin/bash
# 실습 #15 ① — cAdvisor 컨테이너 모니터링 + 웹 UI
# - cAdvisor: 구글 발 컨테이너 자원 메트릭 수집기 (CPU·Mem·Net·Disk·FS·cgroup)
# - 호스트의 /sys·/var/run·/var/lib/docker 를 ro 로 마운트해서 컨테이너 메타 직접 읽음
# - 자체 웹 UI (8080) + Prometheus 호환 /metrics 엔드포인트 동시 제공
set -e

# 1) lab03 에서 Docker 가 깔려 있어야 함
if ! command -v docker >/dev/null; then
    echo "→ docker 미설치. lab03/setup_01_install_basic.sh 먼저 실행."
    exit 1
fi

# 2) 기존 cadvisor 정리
sudo docker rm -f cadvisor 2>/dev/null || true

# 3) cAdvisor 띄우기
#    --privileged + /dev/kmsg : 커널 OOM 이벤트 같은 메시지 읽기 위해
#    /var/run/docker.sock     : 컨테이너 목록·메타 조회
sudo docker run -d \
    --name cadvisor \
    -p 8080:8080 \
    -v /:/rootfs:ro \
    -v /var/run:/var/run:ro \
    -v /sys:/sys:ro \
    -v /var/lib/docker/:/var/lib/docker:ro \
    -v /dev/disk/:/dev/disk:ro \
    --privileged \
    --device=/dev/kmsg \
    gcr.io/cadvisor/cadvisor:v0.49.1

sleep 3

# 4) 동작 확인
echo
echo "=== 컨테이너 상태 ==="
sudo docker ps --filter name=cadvisor --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

echo
echo "=== /healthz ==="
curl -s http://localhost:8080/healthz || true

echo
echo "=== Prometheus 호환 메트릭 (앞 5줄) ==="
curl -s http://localhost:8080/metrics | head -5

echo
cat <<EOF
사용:
  웹 UI         : http://<VM-IP>:8080
  컨테이너별    : http://<VM-IP>:8080/docker/<container_name>
  Prom 메트릭   : http://<VM-IP>:8080/metrics    (lab19 Prometheus 와 연동)

다음 시나리오:
  setup_02_cgroup_limits.sh — --cpus/--memory 제한 + cgroup v2 직접 확인
  setup_03_oom_simulate.sh  — 메모리 한도 초과 → OOM Killed 재현
EOF
