[lttng-dev] C API message iterator example for libbabeltrace2
Maksim Khmelevskiy
mk.void.mail at gmail.com
Sat Aug 20 12:14:18 EDT 2022
Hi Simon,
thanks for the reply!
What I came up with for now is this example
<https://github.com/ImMax/babeltrace/commit/2082a0f4d77d2edeec6fb95c308a79fb313f7a02>.
It's probably has a lot of design mistakes but it's at least runnable.
I also see that examples for C API aren't build, but maybe I'm wrong.
Another thing, if you have lack of resources I would be happy to help, I
could make a PR with your guidance and review.
Answers to the questions:
1) Not sure that I completely understand the question, I wanted to parse
events(name, fields), not the metadata file aligned with the CTF trace file.
2) Because I wanted to get C-structs directly from the CTF traces. I'm sure
that it's very niche requirement, sane people would not need it.
3) I would do something like that, but I have a requirement of providing C
structs. I guess to apply filters or do something else with traces (I'm not
sure, not my idea, but I also find it weird)
On Fri, 19 Aug 2022 at 17:00, Simon Marchi <simark at simark.ca> wrote:
> On 8/12/22 09:19, Maksim Khmelevskiy via lttng-dev wrote:
> > Hi,
> >
>
> > there is a nice py message iterator example
> > <https://babeltrace.org/docs/v2.0/python/bt2/examples.html> but for C
> > API only plugins are covered with examples, do you think it would make
> > sense to create an example of a standalone application which simply
> > uses `source.ctf.fs` as source and iterates over all messages? It
> > would be nice hint for those who want to see an example of graph
> > creation with all the code in one file.
>
> Hi Maksim,
>
> I'm not sure which example you are referring to exactly. But in Python,
> we have the high-level TraceCollectionMessageIterator object, which does
> roughly:
>
> - Instantiate source and filter components according to the provided
> specs, including automatic source discovery
> - Instantiate a flt.utils.muxer component to merge the streams from all
> sources ports
> - Instantiate a sink component that presents the events as a Python
> iterable
> - Connect the ports of all these components
> - More things that are irrelevant here
>
> There is no such high-level object in the C interface, so you have
> to do all this by hand, it will necessarily be much more verbose. It
> would be nice to have the equivalent of TraceCollectionMessageIterator
> in the C API, it is just not done yet due to lack of resources.
>
> I did search in the documentation for an example program that uses the C
> API to create and run a graph, and I haven't found one. I agree that
> adding one would be nice. I'll look into writing one.
>
> Regarding your use case:
>
> > I'm interested in that example because I want to transform CTF file
> > into list of C structures representing messages.
>
> I have some questions:
>
> - Is the data you want to convert found in the metadata of the traces
> (description of event types) of in the payload of events?
> - Why do you want to write this in C instead of Python? It sounds like
> it would be much faster to write in Python (with
> TraceCollectionMessageIterator), and it doesn't sound like something
> where the performance is critical (but of course I don't have the
> full context).
> - Why do you need to write an application where you create and run the
> graph yourself? Could you instead just write your sink component
> class (which reads the messages and writes your output files),
> packaged in a plugin and use it through the babeltrace2 command-line:
>
> $ babeltrace2 /path/to/ctf/trace -c sink.foo.bar -p 'output="out.h"'
>
> ? This way, you just have to care about writing your component
> class, which does the conversion you need.
>
> Simon
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20220820/2085ced5/attachment.htm>
More information about the lttng-dev
mailing list