# Use amdsmi base image
FROM amdsmi-image

# Sync ROCm repositories
RUN apt-get update && apt-get install -y wget gnupg2 && \
    wget -qO - http://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - && \
    echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ jammy main' | tee /etc/apt/sources.list.d/rocm.list

# Install ROCm runtime and dependencies
RUN apt-get update && \
    apt-get install -y \
    rocm-smi-lib \
    cmake \
    make \
    g++ \
    doxygen \
    texlive-latex-base \
    automake \
    unzip \
    build-essential \
    autoconf \
    libtool \
    pkg-config \
    libgflags-dev \
    libgtest-dev \
    clang \
    libc++-dev \
    curl \
    libcap-dev \
    python3-argcomplete \
    python3-pip \
    bash && \
    rm -rf /var/lib/apt/lists/*

# Update setuptools
RUN python3 -m pip install --upgrade setuptools==59.6.0

# Check for modprobe
RUN command -v modprobe || echo "modprobe not found"

# Set environment variables
ENV GRPC_ROOT=/opt/grpc
ENV RDC_LIB_DIR=/opt/rocm/lib/rdc
ENV CMAKE_ROOT=/usr/bin/cmake

# Install gRPC
RUN git clone -b v1.67.1 https://github.com/grpc/grpc --depth=1 --shallow-submodules --recurse-submodules && \
    cd grpc && \
    cmake -B build \
        -DgRPC_INSTALL=ON \
        -DgRPC_BUILD_TESTS=OFF \
        -DBUILD_SHARED_LIBS=ON \
        -DCMAKE_INSTALL_PREFIX="$GRPC_ROOT" \
        -DCMAKE_INSTALL_LIBDIR=lib \
        -DCMAKE_BUILD_TYPE=Release && \
    make -C build -j $(nproc) && \
    make -C build install && \
    echo "$GRPC_ROOT" | tee /etc/ld.so.conf.d/grpc.conf

# Build and install RDC
RUN git clone https://github.com/ROCm/rocm-systems --recursive && \
    cd rocm-systems/projects/rdc && \
    cmake -B build -DGRPC_ROOT="$GRPC_ROOT" \
        -DSMIDIR="$SMI_DIR" \
        -DBUILD_TESTS=OFF \
        -DBUILD_PROFILER=OFF \
        -DBUILD_RUNTIME=OFF \
        -DBUILD_RVS=OFF && \
    make -C build -j $(nproc) && \
    make -C build install

# Update system library path
RUN export RDC_LIB_DIR=/opt/rocm/lib/rdc && \
    export GRPC_LIB_DIR="/opt/grpc/lib" && \
    echo "${RDC_LIB_DIR}" | tee /etc/ld.so.conf.d/x86_64-librdc_client.conf && \
    echo "${GRPC_LIB_DIR}" | tee -a /etc/ld.so.conf.d/x86_64-librdc_client.conf && \
    ldconfig

# Expose the port for Prometheus
EXPOSE 50051

# Expose the prometheus plugin port
EXPOSE 5000

# Set working directory to /opt/rocm/libexec/rdc/python_binding
WORKDIR /opt/rocm/libexec/rdc/python_binding

# Install Prometheus
RUN wget https://github.com/prometheus/prometheus/releases/download/v2.41.0/prometheus-2.41.0.linux-amd64.tar.gz && \
    tar xvfz prometheus-2.41.0.linux-amd64.tar.gz && \
    mv prometheus-2.41.0.linux-amd64/prometheus /usr/local/bin/ && \
    rm -rf prometheus-2.41.0.linux-amd64*

# Install Grafana
RUN wget https://dl.grafana.com/oss/release/grafana-9.3.2.linux-amd64.tar.gz && \
    tar -zxvf grafana-9.3.2.linux-amd64.tar.gz && \
    mv grafana-9.3.2 /usr/local/grafana && \
    rm grafana-9.3.2.linux-amd64.tar.gz

# Install Prometheus client for Python
RUN python3 -m pip install prometheus_client

# Ensure sudo can run without a password for the rdcd command
RUN echo "ALL ALL=(ALL) NOPASSWD: /opt/rocm/bin/rdcd" >> /etc/sudoers

# Set the entry point to run the rdcd command
ENTRYPOINT ["sudo", "/opt/rocm/bin/rdcd", "-u"]
