[lttng-dev] [PATCH] Python agent: Support Agent protocol v2.0
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Fri Oct 23 17:59:01 EDT 2015
Merged into UST master, thanks!
Mathieu
----- On Oct 23, 2015, at 5:12 PM, Jeremie Galarneau jeremie.galarneau at efficios.com wrote:
> Signed-off-by: Jérémie Galarneau <jeremie.galarneau at efficios.com>
> ---
> liblttng-ust-python-agent/lttngust/agent.py | 2 +-
> liblttng-ust-python-agent/lttngust/cmd.py | 26 +++++++++++++++++++++++---
> 2 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/liblttng-ust-python-agent/lttngust/agent.py
> b/liblttng-ust-python-agent/lttngust/agent.py
> index 84cfd83..ebfa2de 100644
> --- a/liblttng-ust-python-agent/lttngust/agent.py
> +++ b/liblttng-ust-python-agent/lttngust/agent.py
> @@ -40,7 +40,7 @@ except ImportError:
>
>
> _PROTO_DOMAIN = 5
> -_PROTO_MAJOR = 1
> +_PROTO_MAJOR = 2
> _PROTO_MINOR = 0
>
>
> diff --git a/liblttng-ust-python-agent/lttngust/cmd.py
> b/liblttng-ust-python-agent/lttngust/cmd.py
> index fe180fa..382de68 100644
> --- a/liblttng-ust-python-agent/lttngust/cmd.py
> +++ b/liblttng-ust-python-agent/lttngust/cmd.py
> @@ -2,6 +2,7 @@
> #
> # Copyright (C) 2015 - Philippe Proulx <pproulx at efficios.com>
> # Copyright (C) 2014 - David Goulet <dgoulet at efficios.com>
> +# Copyright (C) 2015 - Jérémie Galarneau <jeremie.galarneau at efficios.com>
> #
> # This library is free software; you can redistribute it and/or modify it under
> # the terms of the GNU Lesser General Public License as published by the Free
> @@ -29,6 +30,10 @@ _server_cmd_header_struct = struct.Struct('>QII')
> _SERVER_CMD_HEADER_SIZE = _server_cmd_header_struct.size
>
>
> +# agent protocol symbol size
> +_LTTNG_SYMBOL_NAME_LEN = 256
> +
> +
> class _ServerCmdHeader(object):
> def __init__(self, data_size, cmd_id, cmd_version):
> self.data_size = data_size
> @@ -64,21 +69,36 @@ class _ServerCmdList(_ServerCmd):
> class _ServerCmdEnable(_ServerCmd):
> _NAME_OFFSET = 8
> _loglevel_struct = struct.Struct('>II')
> + # filter expression size
> + _filter_exp_len_struct = struct.Struct('>I')
>
> - def __init__(self, header, loglevel, loglevel_type, name):
> + def __init__(self, header, loglevel, loglevel_type, name, filter_exp):
> super(self.__class__, self).__init__(header)
> self.loglevel = loglevel
> self.loglevel_type = loglevel_type
> self.name = name
> + self.filter_expression = filter_exp
> + dbg._pdebug('server enable command {}'.format(self.__dict__))
>
> @classmethod
> def from_data(cls, header, data):
> try:
> loglevel, loglevel_type = cls._loglevel_struct.unpack_from(data)
> - data_name = data[cls._loglevel_struct.size:]
> + name_start = cls._loglevel_struct.size
> + name_end = name_start + _LTTNG_SYMBOL_NAME_LEN
> + data_name = data[name_start:name_end]
> name = data_name.rstrip(b'\0').decode()
>
> - return cls(header, loglevel, loglevel_type, name)
> + filter_exp_start = name_end + cls._filter_exp_len_struct.size
> + filter_exp_len, = cls._filter_exp_len_struct.unpack_from(
> + data[name_end:filter_exp_start])
> + print(filter_exp_len)
> + filter_exp_end = filter_exp_start + filter_exp_len
> +
> + filter_exp = data[filter_exp_start:filter_exp_end].rstrip(
> + b'\0').decode()
> +
> + return cls(header, loglevel, loglevel_type, name, filter_exp)
> except (Exception) as e:
> dbg._pdebug('cannot decode enable command: {}'.format(e))
> return None
> --
> 2.6.2
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list