Skip to main content

Endpoint

GET /metrics
Returns real-time server metrics including connection counts, processing times, CPU usage, and memory consumption.

Response

{
  "active_connections": 2,
  "active_processes": 0,
  "total_requests": 150,
  "errors": 3,
  "avg_processing_time": 2.34,
  "memory_usage_mb": 128.5,
  "cpu_total_percent": 45.2,
  "cpu_per_core": [42.1, 48.3, 43.7, 46.8],
  "total_cpu_cores": 4,
  "effective_cores_used": 1.81
}

Response Fields

active_connections
integer
required
Number of currently active WebSocket connections
active_processes
integer
required
Number of active background processes (currently unused, always 0)
total_requests
integer
required
Total number of requests received since server start
errors
integer
required
Total number of errors encountered since server start
avg_processing_time
number
required
Average audio processing time in seconds, calculated from the last 100 requests
memory_usage_mb
number
required
Current memory usage of the server process in megabytes (MB)
cpu_total_percent
number
required
Total CPU usage as a percentage (0-100)
cpu_per_core
array
required
Array of CPU usage percentages for each individual core
[42.1, 48.3, 43.7, 46.8]
total_cpu_cores
integer
required
Total number of CPU cores available to the server
effective_cores_used
number
required
Effective number of cores being utilized, calculated as (cpu_total_percent / 100) * total_cpu_cores

Usage Examples

cURL

curl https://languagedetection-9l89.onrender.com/metrics

JavaScript

fetch('https://languagedetection-9l89.onrender.com/metrics')
  .then(response => response.json())
  .then(metrics => {
    console.log('Active connections:', metrics.active_connections);
    console.log('Average processing time:', metrics.avg_processing_time, 's');
    console.log('Memory usage:', metrics.memory_usage_mb, 'MB');
    console.log('CPU usage:', metrics.cpu_total_percent, '%');
  });

Python

import requests

response = requests.get('https://languagedetection-9l89.onrender.com/metrics')
metrics = response.json()

print(f"Active connections: {metrics['active_connections']}")
print(f"Average processing time: {metrics['avg_processing_time']}s")
print(f"Memory usage: {metrics['memory_usage_mb']}MB")
print(f"CPU usage: {metrics['cpu_total_percent']}%")

Implementation Details

From main.py:46-49:
@app.get("/metrics")
async def get_metrics():
    """Endpoint to retrieve current server metrics"""
    return metrics.get_metrics_dict()
The endpoint calls ServerMetrics.get_metrics_dict() which computes metrics in real-time using:
  • psutil.cpu_percent() for CPU usage
  • psutil.Process().memory_info() for memory consumption
  • Rolling deque of last 100 processing times for average calculation
See ServerMetrics class for implementation details.

Monitoring and Alerts

Use this endpoint to:
  • Monitor server health in real-time
  • Set up alerts for high error rates
  • Track processing time trends
  • Monitor resource utilization
  • Detect connection spikes

Update Frequency

Metrics are updated in real-time:
  • active_connections: Updated on each WebSocket connect/disconnect
  • total_requests: Incremented on each new connection
  • errors: Incremented on processing errors
  • processing_times: Appended after each successful audio processing
  • CPU/memory metrics: Computed at request time

Build docs developers (and LLMs) love