diff --git a/Dockerfile b/Dockerfile index db44e34..3b03183 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,28 @@ # Dockerfile for netprobe_lite # https://github.com/plaintextpackets/netprobe_lite/ -FROM python:3.11-slim-bookworm +FROM python:3.13-alpine -COPY requirements.txt /netprobe_lite/requirements.txt - -# Install python/pip ENV PYTHONUNBUFFERED=1 -ENV PIP_DISABLE_PIP_VERSION_CHECK=on -RUN apt-get update && apt-get install -y iputils-ping && apt-get install -y traceroute && apt-get clean \ - && pip install -r /netprobe_lite/requirements.txt --break-system-packages +# install ip utils to get a ping with jitter data in the output +RUN apk add iputils + +# Install uv (https://github.com/astral-sh/uv) +COPY --from=ghcr.io/astral-sh/uv:python3.13-alpine /usr/local/bin/uv /usr/local/bin/uvx /bin/ WORKDIR /netprobe_lite -ENTRYPOINT [ "/bin/bash", "./entrypoint.sh" ] +COPY requirements.txt ./requirements.txt + +# create virtualenv and install packages +RUN uv venv +RUN uv pip install -r ./requirements.txt + +# copy python files into the container +COPY entrypoint.sh ./entrypoint.sh +COPY *.py ./ +COPY helpers ./helpers +COPY config/__init__.py ./config/__init__.py +COPY logs ./logs + +ENTRYPOINT [ "/bin/sh", "./entrypoint.sh" ] diff --git a/compose.yml b/compose.yml index f6038de..17bb7eb 100644 --- a/compose.yml +++ b/compose.yml @@ -22,9 +22,12 @@ services: restart: always container_name: netprobe-probe image: "plaintextpackets/netprobe:latest" + build: . pull_policy: always volumes: - - .:/netprobe_lite + - ./logs:/netprobe_lite/logs + env_file: + - .env environment: MODULE: "NETPROBE" networks: @@ -37,9 +40,12 @@ services: restart: always container_name: netprobe-speedtest image: "plaintextpackets/netprobe:latest" + build: . pull_policy: always volumes: - - .:/netprobe_lite + - ./logs:/netprobe_lite/logs + env_file: + - .env environment: MODULE: "SPEEDTEST" networks: @@ -52,11 +58,16 @@ services: restart: always container_name: netprobe-presentation image: "plaintextpackets/netprobe:latest" + build: . pull_policy: always volumes: - - .:/netprobe_lite + - ./logs:/netprobe_lite/logs + env_file: + - .env environment: MODULE: "PRESENTATION" + ports: + - 5080:5000 networks: - netprobe-net dns: @@ -97,8 +108,8 @@ services: dns: - 8.8.8.8 - 8.8.4.4 - + volumes: prometheus_data: grafana_data: - \ No newline at end of file + diff --git a/entrypoint.sh b/entrypoint.sh index 285be9b..9432f96 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1 +1,11 @@ -if [[ "${MODULE}" == "NETPROBE" ]]; then python3 netprobe.py; elif [[ "${MODULE}" == "COLLECTOR" ]]; then python3 collector.py; elif [[ "${MODULE}" == "PRESENTATION" ]]; then python3 presentation.py; elif [[ "${MODULE}" == "SPEEDTEST" ]]; then python3 netprobe_speedtest.py; else /bin/bash; fi \ No newline at end of file +if [[ "${MODULE}" == "NETPROBE" ]]; then + uv run netprobe.py; +elif [[ "${MODULE}" == "COLLECTOR" ]]; then + uv run collector.py; +elif [[ "${MODULE}" == "PRESENTATION" ]]; then + uv run presentation.py; +elif [[ "${MODULE}" == "SPEEDTEST" ]]; then + uv run netprobe_speedtest.py; +else + /bin/sh; +fi diff --git a/helpers/network_helper.py b/helpers/network_helper.py index 2a38a31..9c38aa4 100644 --- a/helpers/network_helper.py +++ b/helpers/network_helper.py @@ -20,7 +20,7 @@ def __init__(self,sites,count,dns_test_site,nameservers_external): def pingtest(self,count,site): - ping = subprocess.getoutput(f"ping -n -i 0.1 -c {count} {site} | grep 'rtt\|loss'") + ping = subprocess.getoutput(f"ping -n -i 0.1 -c {count} {site} | grep 'rtt\\|loss'") try: loss = ping.split(' ')[5].strip('%') diff --git a/requirements.txt b/requirements.txt index 404a0f0..cc7aea3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -prometheus_client==0.18.0 -requests==2.31.0 -redis==5.0.1 -python-dotenv==1.0.0 -dnspython==2.4.2 -speedtest-cli==2.1.3 \ No newline at end of file +prometheus_client==0.21.1 +requests==2.32.3 +redis==5.2.1 +python-dotenv==1.0.1 +dnspython==2.7.0 +speedtest-cli==2.1.3