This function returns the virJSONValue object which has the same qom_path as specified.
Signed-off-by: Amneesh Singh <na...@weirdnatto.in> --- src/qemu/qemu_monitor.c | 38 ++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor.h | 4 ++++ 2 files changed, 42 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 9581e90796..3d4302a6ed 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -1537,6 +1537,7 @@ qemuMonitorGetCPUInfoLegacy(struct qemuMonitorQueryCpusEntry *cpuentries, vcpus[i].tid = cpuentries[i].tid; vcpus[i].halted = cpuentries[i].halted; vcpus[i].qemu_id = cpuentries[i].qemu_id; + vcpus[i].qom_path = g_strdup(cpuentries[i].qom_path); } /* for legacy hotplug to work we need to fake the vcpu count added by @@ -4446,3 +4447,40 @@ qemuMonitorExtractQueryStats(virJSONValue *info) return g_steal_pointer(&hash_table); } + + +/** + * qemuMonitorStatsSchemaByQOMPath: + * @arr: Array of objects returned by qemuMonitorQueryStats + * + * Returns the object which matches the QOM path of the vCPU + * + * Returns NULL on failure. + */ +virJSONValue * +qemuMonitorGetStatsByQOMPath(virJSONValue *arr, + char *qom_path) +{ + size_t i; + + if (!virJSONValueIsArray(arr) || !qom_path) + return NULL; + + for (i = 0; i < virJSONValueArraySize(arr); i++) { + virJSONValue *obj = virJSONValueArrayGet(arr, i); + const char *test_qom_path = NULL; + + if (!obj) + return NULL; + + test_qom_path = virJSONValueObjectGetString(obj, "qom-path"); + + if (!test_qom_path) + return NULL; + + if (STRCASEEQ(qom_path, test_qom_path)) + return obj; + } + + return NULL; +} diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 4c817dea20..6b0440fdf0 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1564,3 +1564,7 @@ qemuMonitorQueryStats(qemuMonitor *mon, GHashTable * qemuMonitorExtractQueryStats(virJSONValue *info); + +virJSONValue * +qemuMonitorGetStatsByQOMPath(virJSONValue *arr, + char *qom_path); -- 2.37.1