Skip to content

Commit 0937918

Browse files
[BugFix] fix work metrics not returned by metrics api (#4912)
* [BugFix] fix work metrics not returned by metrics api * [fix] fix conflict * [fix] fix ci
1 parent b9bdf82 commit 0937918

File tree

3 files changed

+29
-29
lines changed

3 files changed

+29
-29
lines changed

fastdeploy/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,20 @@
1717
import os
1818
import subprocess
1919
import sys
20+
import uuid
2021

2122
# suppress warning log from paddlepaddle
2223
os.environ["GLOG_minloglevel"] = "2"
2324
# suppress log from aistudio
2425
os.environ["AISTUDIO_LOG"] = "critical"
26+
# set prometheus dir
27+
if os.getenv("PROMETHEUS_MULTIPROC_DIR", "") == "":
28+
prom_dir = f"/tmp/fd_prom_{str(uuid.uuid4())}"
29+
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
30+
if os.path.exists(prom_dir):
31+
os.rmdir(prom_dir)
32+
os.mkdir(prom_dir)
33+
2534
import typing
2635

2736
from paddleformers.utils.log import logger as pf_logger

fastdeploy/entrypoints/openai/api_server.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
from fastdeploy.envs import environment_variables
6161
from fastdeploy.metrics.metrics import (
6262
EXCLUDE_LABELS,
63-
cleanup_prometheus_files,
6463
get_filtered_metrics,
6564
main_process_metrics,
6665
)
@@ -630,17 +629,19 @@ def launch_metrics_server():
630629
if not is_port_available(args.host, args.metrics_port):
631630
raise Exception(f"The parameter `metrics_port`:{args.metrics_port} is already in use.")
632631

633-
prom_dir = cleanup_prometheus_files(True)
634-
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
632+
# Move setting prometheus directory to fastdeploy/__init__.py
633+
# prom_dir = cleanup_prometheus_files(True)
634+
# os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
635635
metrics_server_thread = threading.Thread(target=run_metrics_server, daemon=True)
636636
metrics_server_thread.start()
637637
time.sleep(1)
638638

639639

640-
def setup_metrics_environment():
641-
"""Prepare Prometheus multiprocess directory before starting API workers."""
642-
prom_dir = cleanup_prometheus_files(True)
643-
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
640+
# NOTE: This is commented out since PROMETHEUS_MULTIPROC_DIR is already set up in fastdeploy/__init__.py
641+
# def setup_metrics_environment():
642+
# """Prepare Prometheus multiprocess directory before starting API workers."""
643+
# prom_dir = cleanup_prometheus_files(True)
644+
# os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
644645

645646

646647
controller_app = FastAPI()
@@ -755,7 +756,7 @@ def main():
755756
launch_metrics_server()
756757
console_logger.info(f"Launching metrics service at http://{args.host}:{args.metrics_port}/metrics")
757758
else:
758-
setup_metrics_environment()
759+
# setup_metrics_environment()
759760
console_logger.info(f"Launching metrics service at http://{args.host}:{args.port}/metrics")
760761
console_logger.info(f"Launching chat completion service at http://{args.host}:{args.port}/v1/chat/completions")
761762
console_logger.info(f"Launching completion service at http://{args.host}:{args.port}/v1/completions")

tests/entrypoints/openai/test_metrics_routes.py

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -184,27 +184,17 @@ class WithDict:
184184
assert "without_dict" in data and data["without_dict"] is None
185185

186186

187-
def test_setup_metrics_environment_sets_env_var(tmp_path):
188-
# Cover calling setup_metrics_environment()
189-
with (
190-
patch("fastdeploy.utils.FlexibleArgumentParser.parse_args") as mock_parse_args,
191-
patch("fastdeploy.utils.retrive_model_from_server") as mock_retrive_model,
192-
patch("fastdeploy.entrypoints.chat_utils.load_chat_template") as mock_load_template,
193-
):
194-
mock_parse_args.return_value = _build_mock_args()
195-
mock_retrive_model.return_value = "test-model"
196-
mock_load_template.return_value = None
197-
198-
from fastdeploy.entrypoints.openai import api_server as api_server_mod
199-
200-
api_server = importlib.reload(api_server_mod)
201-
202-
desired_dir = str(tmp_path / "prom_multiproc")
203-
204-
# Patch the name imported into api_server so we don't touch real FS
205-
with patch("fastdeploy.entrypoints.openai.api_server.cleanup_prometheus_files", return_value=desired_dir):
206-
api_server.setup_metrics_environment()
207-
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR") == desired_dir
187+
def test_setup_metrics_environment_sets_env_var():
188+
# Cover 'fastdeploy/__init__.py'
189+
import fastdeploy
190+
191+
# clear PROMETHEUS_MULTIPROC_DIR
192+
os.environ.pop("PROMETHEUS_MULTIPROC_DIR")
193+
# reload fastdeploy
194+
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR") is None
195+
importlib.reload(fastdeploy)
196+
# check if PROMETHEUS_MULTIPROC_DIR is reinitialized
197+
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR").startswith("/tmp/fd_prom")
208198

209199

210200
def test_metrics_app_routes_when_metrics_port_diff():

0 commit comments

Comments
 (0)