Compare commits
4 Commits
aaafebdef1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 684d6ab857 | |||
| 4a051f02d9 | |||
| 9ec41da15e | |||
| 14e62c4a6c |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
/.venv/
|
/.venv/
|
||||||
|
.idea/
|
||||||
7
.idea/misc.xml
generated
7
.idea/misc.xml
generated
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Black">
|
|
||||||
<option name="sdkName" value="Python 3.11 (tmobile-monitor)" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (tmobile-monitor)" project-jdk-type="Python SDK" />
|
|
||||||
</project>
|
|
||||||
10
.idea/tmobile-monitor.iml
generated
10
.idea/tmobile-monitor.iml
generated
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="PYTHON_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
32
README.md
Normal file
32
README.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# LTE/5G Router Metrics Exporter
|
||||||
|
|
||||||
|
This project provides a simple Prometheus exporter that collects signal metrics
|
||||||
|
from a local network device (commonly a home LTE/5G router) by scraping its
|
||||||
|
web interface at `http://192.168.1.1`.
|
||||||
|
|
||||||
|
The exporter parses the router’s status page using BeautifulSoup and exposes
|
||||||
|
the following metrics on port **8000**:
|
||||||
|
|
||||||
|
- `snr` — Signal-to-Noise Ratio
|
||||||
|
- `rsrp` — Reference Signal Received Power
|
||||||
|
- `rsrq` — Reference Signal Received Quality
|
||||||
|
|
||||||
|
These metrics can be scraped by Prometheus and visualized in Grafana.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Scrapes metrics directly from your router's HTML status page
|
||||||
|
- Exposes them in Prometheus format
|
||||||
|
- Lightweight and easy to deploy
|
||||||
|
- Designed to run continuously (default refresh interval: **10 seconds**)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Install dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install requests beautifulsoup4 prometheus_client
|
||||||
35
main.py
35
main.py
@@ -1,35 +0,0 @@
|
|||||||
import requests
|
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
|
|
||||||
url = 'http://192.168.1.1'
|
|
||||||
|
|
||||||
response = requests.get(url, verify=False)
|
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
|
||||||
snr_element = soup.find('div', id='snr')
|
|
||||||
pci_element = soup.find('div', id='pci')
|
|
||||||
rsrp_element = soup.find('div', id='internetStatusRSRP')
|
|
||||||
rsrq_element = soup.find('div', id='internetStatusRSRQ')
|
|
||||||
|
|
||||||
if snr_element:
|
|
||||||
snr_value = snr_element.text.strip().split()[0] # Extracting the numerical part
|
|
||||||
print(f"SNR value: {snr_value}")
|
|
||||||
else:
|
|
||||||
print("SNR value not found on the page.")
|
|
||||||
|
|
||||||
if pci_element:
|
|
||||||
pci_value = pci_element.text.strip()
|
|
||||||
print(f"PCI value: {pci_value}")
|
|
||||||
else:
|
|
||||||
print("PCI value not found on the page.")
|
|
||||||
|
|
||||||
if rsrp_element:
|
|
||||||
rsrp_value = rsrp_element.text.strip()
|
|
||||||
print(f"RSRP value: {rsrp_value}")
|
|
||||||
else:
|
|
||||||
print("RSRP value not found on the page.")
|
|
||||||
|
|
||||||
if rsrq_element:
|
|
||||||
rsrq_value = rsrq_element.text.strip()
|
|
||||||
print(f"RSRQ value: {rsrq_value}")
|
|
||||||
else:
|
|
||||||
print("RSRQ value not found on the page.")
|
|
||||||
Reference in New Issue
Block a user