Create web server with exported data for Prometheus.
This commit is contained in:
parent
b794cbd6cf
commit
f564068ea5
18
Dockerfile
Normal file
18
Dockerfile
Normal file
@ -0,0 +1,18 @@
|
||||
# Use the official Python image from the Docker Hub
|
||||
FROM python:3.9-slim
|
||||
|
||||
# Set the working directory inside the container
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the requirements file and the script into the container
|
||||
COPY requirements.txt .
|
||||
COPY tmobile_monitor.py .
|
||||
|
||||
# Install the Python dependencies
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Expose the port that the Prometheus client will use
|
||||
EXPOSE 8000
|
||||
|
||||
# Run the script
|
||||
CMD ["python", "tmobile_monitor.py"]
|
||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
requests~=2.31.0
|
||||
beautifulsoup4~=4.12.3
|
||||
prometheus_client~=0.20.0
|
||||
39
tmobile_monitor.py
Normal file
39
tmobile_monitor.py
Normal file
@ -0,0 +1,39 @@
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from prometheus_client import start_http_server, Gauge
|
||||
import time
|
||||
|
||||
metrics = {
|
||||
'snr': Gauge('snr', 'Signal to Noise Ratio'),
|
||||
'internetStatusRSRP': Gauge('rsrp', 'Reference Signal Received Power'),
|
||||
'internetStatusRSRQ': Gauge('rsrq', 'Reference Signal Received Quality')
|
||||
}
|
||||
|
||||
|
||||
def collect_metrics():
|
||||
url = 'http://192.168.1.1'
|
||||
|
||||
try:
|
||||
response = requests.get(url, verify=False)
|
||||
response.raise_for_status()
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
|
||||
for key in metrics:
|
||||
element = soup.find('div', id=key)
|
||||
if element:
|
||||
value = float(element.text.strip().split()[0])
|
||||
metrics[key].set(value)
|
||||
else:
|
||||
print(f"{key.upper()} value not found on the page.")
|
||||
|
||||
except requests.RequestException as e:
|
||||
print(f"Error fetching data from {url}: {e}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
start_http_server(8000)
|
||||
print("HTTP server started on port 8000")
|
||||
|
||||
while True:
|
||||
collect_metrics()
|
||||
time.sleep(10)
|
||||
Loading…
x
Reference in New Issue
Block a user