Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: staffan@eternaltraveller.com (Staffan Tjernstrom)
Subject: [lttng-dev] [lttng-ust] [babeltrace] use case question - field names in event classes
Date: Tue, 11 Oct 2016 09:46:27 -0500	[thread overview]
Message-ID: <8867c80160a75f382ac5dd3f50d2014b.squirrel@email.powweb.com> (raw)

We have a situation where we have a significant number (1000's) of
log-style trace messages generated by a large group of (sometime
offsite) developers.

Unfortunately the tracepoint definitions are maintained by a small
group of central developers.

So we have a need for generic tracepoint definitions, without loosing
the ability to tailor the output from individual log messages.

One approach we've come up with involves including the labels as part
of the parameter pack:

TRACEPOINT_EVENT(
    my_app,
    two_ints_and_string,
    TP_ARGS(
        // some pre-amble fields removed for clarity
        char const *, label1_arg,
        int, value1_arg,
        char const *, label2_arg,
        int, value2_arg,
        char const *, label3_arg,
        char const *, value3_arg
    ),
    TP_FIELDS(
        // pre-amble removed for clarity
        ctf_string( label1, label1_arg )
        ctf_integer(int, value1, value1_arg)
        ctf_string( label2, label2_arg )
        ctf_integer(int, value2, value2_arg)
    )
)

and we can then call this from multiple locations in our general
code-base using:

tracepoint(my_app, two_ints_and_string, "widget_height", 19,
"widget_width", 23, "widget_name", widget_name_as_cstring);

tracepoint(my_app, two_ints_and_string, "x_coordinate", x,
"y_coordinate", y, "point_type", "star");


The issue with this is that the output obviously treats the field
names and their values as individual items, so we get output like

label1 = "widget_height", value1 = 19, label2 = "widget_width", value2
=- 23, label3 = "widget_name", value3 = "topper"
label1 = "x_coordinate", value1 = -23, label2 = "y_coordinate", value2
= 25532, label3 = "point_type", value3 = "star"

But of course we need to mechanically scrape / inspect the output, so
what we'd really like would be output something more like:

widget_height = 19, widget_width = 23, widget_name = "topper"
x_coordinate = -23, y_coordinate = 25532, point_type = "star"

Post-processing of the babeltrace output is of course one option
(using -n none), but it feels like the wrong choice (adding more steps
to the tracing chain).

Does anyone out there have any better ideas how to achieve having our
cake ( a small number of generic tracepoints ), and eating it (
user-defined field names )?



             reply	other threads:[~2016-10-11 14:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-11 14:46 Staffan Tjernstrom [this message]
2016-10-12 13:33 ` Philippe Proulx
2016-10-12 13:51   ` Staffan Tjernstrom
2016-10-12 15:23     ` Julien Desfossez
2016-10-12 15:36       ` Staffan Tjernstrom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8867c80160a75f382ac5dd3f50d2014b.squirrel@email.powweb.com \
    --to=staffan@eternaltraveller.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox