[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/19] block: Convert bdrv_info_stats() to QObject
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 16/19] block: Convert bdrv_info_stats() to QObject |
Date: |
Wed, 9 Dec 2009 14:27:55 -0200 |
Each device statistic information is stored in a QDict and
the returned QObject is a QList of all devices.
This commit should not change user output.
Signed-off-by: Luiz Capitulino <address@hidden>
---
block.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------
block.h | 3 +-
monitor.c | 3 +-
3 files changed, 75 insertions(+), 13 deletions(-)
diff --git a/block.c b/block.c
index d7eccb7..3f3496e 100644
--- a/block.c
+++ b/block.c
@@ -1261,22 +1261,82 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
*ret_data = QOBJECT(bs_list);
}
-/* The "info blockstats" command. */
-void bdrv_info_stats(Monitor *mon)
+static void bdrv_stats_iter(QObject *data, void *opaque)
{
+ QDict *qdict;
+ Monitor *mon = opaque;
+
+ qdict = qobject_to_qdict(data);
+ monitor_printf(mon, "%s:", qdict_get_str(qdict, "device"));
+
+ qdict = qobject_to_qdict(qdict_get(qdict, "stats"));
+ monitor_printf(mon, " rd_bytes=%" PRId64
+ " wr_bytes=%" PRId64
+ " rd_operations=%" PRId64
+ " wr_operations=%" PRId64
+ "\n",
+ qdict_get_int(qdict, "rd_bytes"),
+ qdict_get_int(qdict, "wr_bytes"),
+ qdict_get_int(qdict, "rd_operations"),
+ qdict_get_int(qdict, "wr_operations"));
+}
+
+void bdrv_stats_print(Monitor *mon, const QObject *data)
+{
+ qlist_iter(qobject_to_qlist(data), bdrv_stats_iter, mon);
+}
+
+/**
+ * bdrv_info_stats(): show block device statistics
+ *
+ * Each device statistic information is stored in a QDict and
+ * the returned QObject is a QList of all devices.
+ *
+ * The QDict contains the following:
+ *
+ * - "device": device name
+ * - "stats": A QDict with the statistics information, it contains:
+ * - "rd_bytes": bytes read
+ * - "wr_bytes": bytes written
+ * - "rd_operations": read operations
+ * - "wr_operations": write operations
+ *
+ * Example:
+ *
+ * [ { "device": "ide0-hd0",
+ * "stats": { "rd_bytes": 512,
+ * "wr_bytes": 0,
+ * "rd_operations": 1,
+ * "wr_operations": 0 } },
+ * { "device": "ide1-cd0",
+ * "stats": { "rd_bytes": 0,
+ * "wr_bytes": 0,
+ * "rd_operations": 0,
+ * "wr_operations": 0 } } ]
+ */
+void bdrv_info_stats(Monitor *mon, QObject **ret_data)
+{
+ QObject *obj;
+ QList *devices;
BlockDriverState *bs;
+ devices = qlist_new();
+
for (bs = bdrv_first; bs != NULL; bs = bs->next) {
- monitor_printf(mon, "%s:"
- " rd_bytes=%" PRIu64
- " wr_bytes=%" PRIu64
- " rd_operations=%" PRIu64
- " wr_operations=%" PRIu64
- "\n",
- bs->device_name,
- bs->rd_bytes, bs->wr_bytes,
- bs->rd_ops, bs->wr_ops);
- }
+ obj = qobject_from_jsonf("{ 'device': %s, 'stats': {"
+ "'rd_bytes': %" PRId64 ","
+ "'wr_bytes': %" PRId64 ","
+ "'rd_operations': %" PRId64 ","
+ "'wr_operations': %" PRId64
+ "} }",
+ bs->device_name,
+ bs->rd_bytes, bs->wr_bytes,
+ bs->rd_ops, bs->wr_ops);
+ assert(obj != NULL);
+ qlist_append_obj(devices, obj);
+ }
+
+ *ret_data = QOBJECT(devices);
}
const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
diff --git a/block.h b/block.h
index 3282dd2..fa51ddf 100644
--- a/block.h
+++ b/block.h
@@ -48,7 +48,8 @@ typedef struct QEMUSnapshotInfo {
void bdrv_info_print(Monitor *mon, const QObject *data);
void bdrv_info(Monitor *mon, QObject **ret_data);
-void bdrv_info_stats(Monitor *mon);
+void bdrv_stats_print(Monitor *mon, const QObject *data);
+void bdrv_info_stats(Monitor *mon, QObject **ret_data);
void bdrv_init(void);
void bdrv_init_with_whitelist(void);
diff --git a/monitor.c b/monitor.c
index db596a9..e63a262 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2345,7 +2345,8 @@ static const mon_cmd_t info_cmds[] = {
.args_type = "",
.params = "",
.help = "show block device statistics",
- .mhandler.info = bdrv_info_stats,
+ .user_print = bdrv_stats_print,
+ .mhandler.info_new = bdrv_info_stats,
},
{
.name = "registers",
--
1.6.6.rc1.39.g9a42
- Re: [Qemu-devel] [PATCH 10/19] monitor: Convert do_info_name() to QObject, (continued)
[Qemu-devel] [PATCH 09/19] monitor: Convert do_info_kvm() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 11/19] monitor: Convert do_info_hpet() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 12/19] monitor: Convert do_info_uuid() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 13/19] monitor: Convert do_info_mice() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 14/19] migration: Convert do_info_migrate() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 15/19] block: Convert bdrv_info() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 16/19] block: Convert bdrv_info_stats() to QObject,
Luiz Capitulino <=
[Qemu-devel] [PATCH 17/19] char: Convert qemu_chr_info() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 18/19] PCI: Convert pci_device_hot_add() to QObject, Luiz Capitulino, 2009/12/09
[Qemu-devel] [PATCH 19/19] VNC: Convert do_info_vnc() to QObject, Luiz Capitulino, 2009/12/09
Re: [Qemu-devel] [FOR 0.12 v3 00/19]: info handlers conversions to QObject, Markus Armbruster, 2009/12/10