mirror of https://github.com/xqemu/xqemu.git
block: Convert bdrv_info_stats() to QObject
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 <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
d15e546567
commit
218a536a7a
82
block.c
82
block.c
|
@ -1261,22 +1261,82 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
|
||||||
*ret_data = QOBJECT(bs_list);
|
*ret_data = QOBJECT(bs_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The "info blockstats" command. */
|
static void bdrv_stats_iter(QObject *data, void *opaque)
|
||||||
void bdrv_info_stats(Monitor *mon)
|
|
||||||
{
|
{
|
||||||
|
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;
|
BlockDriverState *bs;
|
||||||
|
|
||||||
|
devices = qlist_new();
|
||||||
|
|
||||||
for (bs = bdrv_first; bs != NULL; bs = bs->next) {
|
for (bs = bdrv_first; bs != NULL; bs = bs->next) {
|
||||||
monitor_printf(mon, "%s:"
|
obj = qobject_from_jsonf("{ 'device': %s, 'stats': {"
|
||||||
" rd_bytes=%" PRIu64
|
"'rd_bytes': %" PRId64 ","
|
||||||
" wr_bytes=%" PRIu64
|
"'wr_bytes': %" PRId64 ","
|
||||||
" rd_operations=%" PRIu64
|
"'rd_operations': %" PRId64 ","
|
||||||
" wr_operations=%" PRIu64
|
"'wr_operations': %" PRId64
|
||||||
"\n",
|
"} }",
|
||||||
bs->device_name,
|
bs->device_name,
|
||||||
bs->rd_bytes, bs->wr_bytes,
|
bs->rd_bytes, bs->wr_bytes,
|
||||||
bs->rd_ops, bs->wr_ops);
|
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)
|
const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
|
||||||
|
|
3
block.h
3
block.h
|
@ -48,7 +48,8 @@ typedef struct QEMUSnapshotInfo {
|
||||||
|
|
||||||
void bdrv_info_print(Monitor *mon, const QObject *data);
|
void bdrv_info_print(Monitor *mon, const QObject *data);
|
||||||
void bdrv_info(Monitor *mon, QObject **ret_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(void);
|
||||||
void bdrv_init_with_whitelist(void);
|
void bdrv_init_with_whitelist(void);
|
||||||
|
|
|
@ -2371,7 +2371,8 @@ static const mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show block device statistics",
|
.help = "show block device statistics",
|
||||||
.mhandler.info = bdrv_info_stats,
|
.user_print = bdrv_stats_print,
|
||||||
|
.mhandler.info_new = bdrv_info_stats,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "registers",
|
.name = "registers",
|
||||||
|
|
Loading…
Reference in New Issue