Skip to content

Commit

Permalink
feat: add worker mem metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
vrenaville committed Aug 2, 2024
1 parent 0d0ca60 commit 1c29119
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 0 deletions.
3 changes: 3 additions & 0 deletions monitoring_prometheus/controllers/prometheus_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@

from odoo.http import Controller, route

from ..models.psutils_helpers import get_process_info


class PrometheusController(Controller):
@route("/metrics", auth="public")
def metrics(self):
get_process_info()
return generate_latest()
1 change: 1 addition & 0 deletions monitoring_prometheus/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import ir_http
from . import psutils_helpers
1 change: 1 addition & 0 deletions monitoring_prometheus/models/ir_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
REQUEST_TIME = Summary(
"request_latency_sec", "Request response time in sec", ["query_type"]
)

LONGPOLLING_COUNT = Counter("longpolling", "Longpolling request count")


Expand Down
34 changes: 34 additions & 0 deletions monitoring_prometheus/models/psutils_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import psutil

from prometheus_client import Gauge


MEMORY_USAGE_VMS = Gauge(
"memory_user_vms_mb", "Memory usage in MB", ["process","pid"]
)

MEMORY_USAGE_RSS = Gauge(
"memory_user_rss_mb", "Memory usage in MB", ["process", "pid"]
)


def get_process_info():
for process in psutil.process_iter(['pid', 'name', 'memory_full_info', 'cpu_percent']):
try:
print(process.cmdline())
if process.info['memory_full_info']:
if process.nice() == 10:
ProcessLabel = "workercron"
elif process.info['pid'] == 1:
ProcessLabel = "dispatcher"
elif any(['gevent' in x for x in process.cmdline()]):
ProcessLabel = "gevent"
elif any(['odoo' in x for x in process.cmdline()]):
ProcessLabel = "workerhttp"
else:
ProcessLabel = "other"
MEMORY_USAGE_VMS.labels(ProcessLabel,process.info['pid']).set(process.info['memory_full_info'].rss / 1024 / 1024)
MEMORY_USAGE_RSS.labels(ProcessLabel,process.info['pid']).set(process.info['memory_full_info'].vms / 1024 / 1024)

except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass

0 comments on commit 1c29119

Please sign in to comment.