From: Neeraj Pratap Singh Date: Tue, 2 Dec 2025 12:20:52 +0000 (+0530) Subject: src/pybind/mgr: handle json-pretty for perf stats X-Git-Tag: v21.0.1~38^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F66492%2Fhead;p=ceph.git src/pybind/mgr: handle json-pretty for perf stats Fixes: https://tracker.ceph.com/issues/74072 Signed-off-by: Neeraj Pratap Singh --- diff --git a/src/pybind/mgr/stats/fs/perf_stats.py b/src/pybind/mgr/stats/fs/perf_stats.py index 7b97e42857a..3c602d2e251 100644 --- a/src/pybind/mgr/stats/fs/perf_stats.py +++ b/src/pybind/mgr/stats/fs/perf_stats.py @@ -648,4 +648,4 @@ class FSPerfStats(object): with self.lock: user_query = self.register_query(filter_spec) result = self.generate_report(user_query) - return 0, json.dumps(result), "" + return result diff --git a/src/pybind/mgr/stats/module.py b/src/pybind/mgr/stats/module.py index e3380ee414e..119e370a1a6 100644 --- a/src/pybind/mgr/stats/module.py +++ b/src/pybind/mgr/stats/module.py @@ -4,6 +4,7 @@ performance stats for ceph filesystem (for now...) import json from typing import List, Dict +from xml.dom.minidom import parseString from .cli import StatsCLICommand @@ -11,6 +12,11 @@ from mgr_module import MgrModule, Option, NotifyType from .fs.perf_stats import FSPerfStats +try: + from dicttoxml import dicttoxml # type: ignore[import-not-found] +except ImportError: + dicttoxml = None + class Module(MgrModule): CLICommand = StatsCLICommand COMMANDS = [ @@ -40,5 +46,19 @@ class Module(MgrModule): prefix = cmd['prefix'] # only supported command is `fs perf stats` right now if prefix.startswith('fs perf stats'): - return self.fs_perf_stats.get_perf_data(cmd) + result = self.fs_perf_stats.get_perf_data(cmd) + if 'format' in cmd: + if cmd['format'] == 'json-pretty': + return 0, json.dumps(result, indent=2), "" + elif cmd['format'] == 'xml': + if dicttoxml is None: + raise ImportError("dicttoxml package required for xml") + result = json.loads(json.dumps(result, default=str)) + return dicttoxml(result) + elif cmd['format'] == 'xml-pretty': + if dicttoxml is None: + raise ImportError("dicttoxml package required for xml") + res_xml = parseString(dicttoxml(result)) + return res_xml.toprettyxml() + return 0, json.dumps(result), "" raise NotImplementedError(cmd['prefix'])