diff mbox series

monitor: trace qmp_send_response

Message ID 20210204222444.22217-1-vsementsov@virtuozzo.com
State New
Headers show
Series monitor: trace qmp_send_response | expand

Commit Message

Vladimir Sementsov-Ogievskiy Feb. 4, 2021, 10:24 p.m. UTC
Add a useful counterpart for trace_handle_qmp_command for debugging
libvirt guests.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 monitor/qmp.c        | 6 ++++++
 monitor/trace-events | 1 +
 2 files changed, 7 insertions(+)

Comments

Markus Armbruster Feb. 5, 2021, 7:56 a.m. UTC | #1
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:

> Add a useful counterpart for trace_handle_qmp_command for debugging
> libvirt guests.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>  monitor/qmp.c        | 6 ++++++
>  monitor/trace-events | 1 +
>  2 files changed, 7 insertions(+)
>
> diff --git a/monitor/qmp.c b/monitor/qmp.c
> index 8f91af32be..772b9e7b30 100644
> --- a/monitor/qmp.c
> +++ b/monitor/qmp.c
> @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
>      const QObject *data = QOBJECT(rsp);
>      GString *json;
>  
> +    if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) {
> +        json = qobject_to_json(data);
> +        trace_qmp_send_response(mon, json->str);
> +        g_string_free(json, true);
> +    }
> +
>      json = qobject_to_json_pretty(data, mon->pretty);
>      assert(json != NULL);
>  
> diff --git a/monitor/trace-events b/monitor/trace-events
> index 0365ac4d99..12f0576c7b 100644
> --- a/monitor/trace-events
> +++ b/monitor/trace-events
> @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d"
>  monitor_qmp_cmd_in_band(const char *id) "%s"
>  monitor_qmp_cmd_out_of_band(const char *id) "%s"
>  handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
> +qmp_send_response(void *mon, const char *req) "mon %p req: %s"

A slightly lazier version of this just landed in commit f680405f45 "qmp:
Add more tracepoints".  The difference is yours ignores mon->pretty for
tracing.

Thoughts?
Vladimir Sementsov-Ogievskiy Feb. 5, 2021, 8:17 a.m. UTC | #2
05.02.2021 10:56, Markus Armbruster wrote:
> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
> 
>> Add a useful counterpart for trace_handle_qmp_command for debugging
>> libvirt guests.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   monitor/qmp.c        | 6 ++++++
>>   monitor/trace-events | 1 +
>>   2 files changed, 7 insertions(+)
>>
>> diff --git a/monitor/qmp.c b/monitor/qmp.c
>> index 8f91af32be..772b9e7b30 100644
>> --- a/monitor/qmp.c
>> +++ b/monitor/qmp.c
>> @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
>>       const QObject *data = QOBJECT(rsp);
>>       GString *json;
>>   
>> +    if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) {
>> +        json = qobject_to_json(data);
>> +        trace_qmp_send_response(mon, json->str);
>> +        g_string_free(json, true);
>> +    }
>> +
>>       json = qobject_to_json_pretty(data, mon->pretty);
>>       assert(json != NULL);
>>   
>> diff --git a/monitor/trace-events b/monitor/trace-events
>> index 0365ac4d99..12f0576c7b 100644
>> --- a/monitor/trace-events
>> +++ b/monitor/trace-events
>> @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d"
>>   monitor_qmp_cmd_in_band(const char *id) "%s"
>>   monitor_qmp_cmd_out_of_band(const char *id) "%s"
>>   handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
>> +qmp_send_response(void *mon, const char *req) "mon %p req: %s"
> 
> A slightly lazier version of this just landed in commit f680405f45 "qmp:
> Add more tracepoints".  The difference is yours ignores mon->pretty for
> tracing.
> 
> Thoughts?
> 

Ah, missed this, great. Then, nothing to do.

In our environment (I'm not sure who do it libvirt, or other our tool) different query- commands are called periodically and their output is big enough, so I decided to trace json in oneline.. Still better is developing a way to not trace some qmp commands and their output.
Markus Armbruster Feb. 5, 2021, 1:46 p.m. UTC | #3
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:

> 05.02.2021 10:56, Markus Armbruster wrote:
>> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
>> 
>>> Add a useful counterpart for trace_handle_qmp_command for debugging
>>> libvirt guests.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>>   monitor/qmp.c        | 6 ++++++
>>>   monitor/trace-events | 1 +
>>>   2 files changed, 7 insertions(+)
>>>
>>> diff --git a/monitor/qmp.c b/monitor/qmp.c
>>> index 8f91af32be..772b9e7b30 100644
>>> --- a/monitor/qmp.c
>>> +++ b/monitor/qmp.c
>>> @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
>>>       const QObject *data = QOBJECT(rsp);
>>>       GString *json;
>>>   +    if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE))
>>> {
>>> +        json = qobject_to_json(data);
>>> +        trace_qmp_send_response(mon, json->str);
>>> +        g_string_free(json, true);
>>> +    }
>>> +
>>>       json = qobject_to_json_pretty(data, mon->pretty);
>>>       assert(json != NULL);
>>>   diff --git a/monitor/trace-events b/monitor/trace-events
>>> index 0365ac4d99..12f0576c7b 100644
>>> --- a/monitor/trace-events
>>> +++ b/monitor/trace-events
>>> @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d"
>>>   monitor_qmp_cmd_in_band(const char *id) "%s"
>>>   monitor_qmp_cmd_out_of_band(const char *id) "%s"
>>>   handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
>>> +qmp_send_response(void *mon, const char *req) "mon %p req: %s"
>> A slightly lazier version of this just landed in commit f680405f45
>> "qmp:
>> Add more tracepoints".  The difference is yours ignores mon->pretty for
>> tracing.
>> Thoughts?
>> 
>
> Ah, missed this, great. Then, nothing to do.
>
> In our environment (I'm not sure who do it libvirt, or other our tool) different query- commands are called periodically and their output is big enough, so I decided to trace json in oneline.. Still better is developing a way to not trace some qmp commands and their output.

Feel free to add features you find useful on top.
diff mbox series

Patch

diff --git a/monitor/qmp.c b/monitor/qmp.c
index 8f91af32be..772b9e7b30 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -111,6 +111,12 @@  void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
     const QObject *data = QOBJECT(rsp);
     GString *json;
 
+    if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) {
+        json = qobject_to_json(data);
+        trace_qmp_send_response(mon, json->str);
+        g_string_free(json, true);
+    }
+
     json = qobject_to_json_pretty(data, mon->pretty);
     assert(json != NULL);
 
diff --git a/monitor/trace-events b/monitor/trace-events
index 0365ac4d99..12f0576c7b 100644
--- a/monitor/trace-events
+++ b/monitor/trace-events
@@ -13,3 +13,4 @@  monitor_suspend(void *ptr, int cnt) "mon %p: %d"
 monitor_qmp_cmd_in_band(const char *id) "%s"
 monitor_qmp_cmd_out_of_band(const char *id) "%s"
 handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
+qmp_send_response(void *mon, const char *req) "mon %p req: %s"