lttng-dev.lists.lttng.org archive mirror
 help / color / mirror / Atom feed
* bt2 Python quick start/examples?
@ 2020-03-12  2:56 Rocky Dunlap via lttng-dev
  2020-03-12 14:18 ` Jonathan Rajotte-Julien via lttng-dev
  0 siblings, 1 reply; 3+ messages in thread
From: Rocky Dunlap via lttng-dev @ 2020-03-12  2:56 UTC (permalink / raw)
  To: lttng-dev


[-- Attachment #1.1: Type: text/plain, Size: 254 bytes --]

I see that the bt2 Python documentation is not yet ready:
https://babeltrace.org/docs/v2.0/python/bt2/

In lieu of that, where is the best place to find at least a few examples of
using the bt2 Python API for basic trace processing tasks?

Thanks,
Rocky

[-- Attachment #1.2: Type: text/html, Size: 407 bytes --]

[-- Attachment #2: Type: text/plain, Size: 156 bytes --]

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bt2 Python quick start/examples?
  2020-03-12  2:56 bt2 Python quick start/examples? Rocky Dunlap via lttng-dev
@ 2020-03-12 14:18 ` Jonathan Rajotte-Julien via lttng-dev
  2020-03-12 15:58   ` Simon Marchi via lttng-dev
  0 siblings, 1 reply; 3+ messages in thread
From: Jonathan Rajotte-Julien via lttng-dev @ 2020-03-12 14:18 UTC (permalink / raw)
  To: Rocky Dunlap; +Cc: lttng-dev

Hi,

On Wed, Mar 11, 2020 at 10:56:24PM -0400, Rocky Dunlap via lttng-dev wrote:
> I see that the bt2 Python documentation is not yet ready:
> https://babeltrace.org/docs/v2.0/python/bt2/

Slowly getting there.

> 
> In lieu of that, where is the best place to find at least a few examples of
> using the bt2 Python API for basic trace processing tasks?

Simon Marchi have some examples [1] that have been used in his talk [2][3].

Hope this helps a bit.


[1] https://github.com/simark/babeltrace-fun-plugins
[2] https://www.youtube.com/watch?v=P3cPISvW444&feature=youtu.be
[3] https://tracingsummit.org/ts/2019/files/Tracingsummit2019-babeltrace2-marchi.pdf


-- 
Jonathan Rajotte-Julien
EfficiOS

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bt2 Python quick start/examples?
  2020-03-12 14:18 ` Jonathan Rajotte-Julien via lttng-dev
@ 2020-03-12 15:58   ` Simon Marchi via lttng-dev
  0 siblings, 0 replies; 3+ messages in thread
From: Simon Marchi via lttng-dev @ 2020-03-12 15:58 UTC (permalink / raw)
  To: Jonathan Rajotte-Julien, Rocky Dunlap; +Cc: lttng-dev

On 2020-03-12 10:18 a.m., Jonathan Rajotte-Julien via lttng-dev wrote:
> Hi,
> 
> On Wed, Mar 11, 2020 at 10:56:24PM -0400, Rocky Dunlap via lttng-dev wrote:
>> I see that the bt2 Python documentation is not yet ready:
>> https://babeltrace.org/docs/v2.0/python/bt2/
> 
> Slowly getting there.
> 
>>
>> In lieu of that, where is the best place to find at least a few examples of
>> using the bt2 Python API for basic trace processing tasks?
> 
> Simon Marchi have some examples [1] that have been used in his talk [2][3].
> 
> Hope this helps a bit.
> 
> 
> [1] https://github.com/simark/babeltrace-fun-plugins
> [2] https://www.youtube.com/watch?v=P3cPISvW444&feature=youtu.be
> [3] https://tracingsummit.org/ts/2019/files/Tracingsummit2019-babeltrace2-marchi.pdf

In my presentation, I only touched the subject of writing component classes in
Python.

I think that what many people are looking for is how to read a trace from
Python, perhaps using existing component classes, to quickly
prototype/implement some analysis.  So let me provide some small examples here
to get people started, until the formal documentation is completed.

If all you want to do is iterate on all the events of a trace or trace
collection, then the most convenient/high-level entry point is the
bt2.TraceCollectionMessageIterator class.  It works similarly to the Babeltrace
2 CLI's convert command, in that you can just pass it an input string (a file
path, a directory path or an arbitrary string recognized by some source
component class) and it will use the auto-discovery mechanism to figure out
which source components to instantiate.  You can also pass it more precise
configurations of components to instantiate if needed, as well as various flags
similar to what the CLI's convert command accepts (begin, end,
stream-intersection).

Here's a simple example that iterates on an LTTng kernel trace:

    import bt2

    it = bt2.TraceCollectionMessageIterator(
        "/home/smarchi/lttng-traces/auto-20191016-165642"
    )
    for msg in it:
        if type(msg) == bt2._EventMessageConst:
            ev = msg.event
            if ev.cls.name == "sched_switch":
                cpu = ev.packet.context_field["cpu_id"]
                prev_tid = ev.payload_field["prev_tid"]
                next_tid = ev.payload_field["next_tid"]
                print(
                    "cpu {}: switching from tid {} to tid {}".format(
                        cpu, prev_tid, next_tid
                    )
                )

Here's another example that shows how to instantiate a graph manually, add and
connects ports to it and run it.  It connects a "source.text.dmesg" source with
a "sink.text.details" sink and runs the graph until completion.

    import bt2

    g = bt2.Graph()
    source = g.add_component(
        bt2.find_plugin("text").source_component_classes["dmesg"], "source"
    )
    sink = g.add_component(
        bt2.find_plugin("text").sink_component_classes["details"], "sink"
    )
    g.connect_ports(source.output_ports["out"], sink.input_ports["in"])
    g.run()


Without any parameters, the source.text.dmesg component reads on standard
input, so you can execute this example with:

    $ dmesg | python3 example.py

For more examples of what these types can do, you can always look at the test
cases:

    https://github.com/efficios/babeltrace/tree/master/tests/bindings/python/bt2

Hope this helps for the moment,

Simon

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-03-12 15:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-12  2:56 bt2 Python quick start/examples? Rocky Dunlap via lttng-dev
2020-03-12 14:18 ` Jonathan Rajotte-Julien via lttng-dev
2020-03-12 15:58   ` Simon Marchi via lttng-dev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).