Skip to content

Commit 0e7d909

Browse files
chore: basic prometheus end point created
1 parent cf0d7a0 commit 0e7d909

3 files changed

Lines changed: 53 additions & 6 deletions

File tree

src/routes/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@
1919
from src.routes.experimental import experimental_bp
2020
from src.routes.error_handlers import error_handlers_bp
2121
from src.routes.profile import profile_bp
22+
from src.routes.prometheus import prometheus_bp

src/routes/prometheus.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from flask import blueprints
2+
from werkzeug.middleware.dispatcher import DispatcherMiddleware
3+
from prometheus_client import make_wsgi_app, Counter, Gauge
4+
import threading
5+
import time
6+
from src.config import app
7+
from src.utils import _get_system_info
8+
9+
# Define the Prometheus Blueprint
10+
prometheus_bp = blueprints.Blueprint('prometheus', __name__)
11+
12+
# Initialize Prometheus metrics
13+
cpu_usage_metric = Gauge('cpu_usage_percentage', 'Current CPU usage percentage')
14+
memory_usage_metric = Gauge('memory_usage_percentage', 'Current memory usage percentage')
15+
disk_usage_metric = Gauge('disk_usage_percentage', 'Disk usage percentage')
16+
network_sent_metric = Gauge('network_bytes_sent', 'Total network bytes sent')
17+
network_recv_metric = Gauge('network_bytes_received', 'Total network bytes received')
18+
request_count = Counter('http_requests_total', 'Total HTTP requests made')
19+
20+
def collect_metrics():
21+
"""
22+
Collect system metrics and update Prometheus Gauges.
23+
Runs in a separate thread and updates metrics every 5 seconds.
24+
"""
25+
while True:
26+
# Gather system information
27+
system_info = _get_system_info()
28+
29+
# Update Prometheus metrics
30+
cpu_usage_metric.set(system_info['cpu_percent'])
31+
memory_usage_metric.set(system_info['memory_percent'])
32+
disk_usage_metric.set(system_info['disk_percent'])
33+
network_sent_metric.set(system_info['network_sent'])
34+
network_recv_metric.set(system_info['network_received'])
35+
36+
# Increment HTTP request counter
37+
request_count.inc()
38+
39+
# Sleep for 5 seconds before the next collection
40+
time.sleep(5)
41+
42+
# Start the metrics collection in a background thread
43+
metrics_thread = threading.Thread(target=collect_metrics, daemon=True)
44+
metrics_thread.start()
45+
46+
# Expose the /metrics endpoint for Prometheus to scrape metrics
47+
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
48+
'/metrics': make_wsgi_app() # Serve Prometheus metrics at /metrics
49+
})

src/utils.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -482,11 +482,9 @@ def _get_system_info():
482482
Returns:
483483
dict: System information dictionary with various system metrics.
484484
"""
485-
boot_time = get_cached_value('boot_time', lambda: datetime.datetime.fromtimestamp(psutil.boot_time()))
486-
uptime_dict = get_cached_value('uptime', lambda: format_uptime(datetime.datetime.now() - boot_time))
487-
disk_total = get_cached_value("disk_total", get_disk_total)
488-
memory_available = get_cached_value("memory_available", get_memory_available)
489-
# Gathering fresh system information
485+
486+
disk_total = get_disk_total()
487+
memory_available = get_memory_available()
490488
battery_data = check_battery_status()
491489
memory_info = psutil.virtual_memory()
492490
disk_info = psutil.disk_usage('/')
@@ -518,7 +516,6 @@ def _get_system_info():
518516
'timestamp': datetime.datetime.now(),
519517
}
520518
# update uptime dictionary
521-
info.update(uptime_dict)
522519

523520
return info
524521

0 commit comments

Comments
 (0)