[lttng-dev] [lttng-ust] [babeltrace] use case question -field names in event classes
Thibault, Daniel
Daniel.Thibault at drdc-rddc.gc.ca
Wed Oct 12 20:02:17 UTC 2016
----------------------------------------------------------------------
On Tue, Oct 11, 2016 at 4:46 PM, Staffan Tjernstrom <staffan at eternaltraveller.com> wrote:
> 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 losing
> 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 )?
Have you thought about using TRACEPOINT_EVENT_CLASS and TRACEPOINT_EVENT_INSTANCE?
Untested:
TRACEPOINT_EVENT_CLASS(
my_app,
two_ints_and_string,
TP_ARGS(
// some pre-amble fields removed for clarity
int, value1_arg,
int, value2_arg,
char const *, value3_arg
),
TRACEPOINT_EVENT_INSTANCE(
my_app,
two_ints_and_string,
two_ints_and_string_widget,
TP_ARGS(
// repeats the TRACEPOINT_EVENT_CLASS TP_ARGS
),
TRACEPOINT_EVENT_INSTANCE(
my_app,
two_ints_and_string,
two_ints_and_string_point,
TP_ARGS(
// repeats the TRACEPOINT_EVENT_CLASS TP_ARGS
),
tracepoint(my_app, two_ints_and_string_widget, 19, 23, widget_name_as_cstring);
tracepoint(my_app, two_ints_and_string_point, x, y, "star");
You would only need one TRACEPOINT_EVENT_CLASS per signature, and could tailor the event names to make the arguments as obvious as they need to be.
Daniel U. Thibault, M.Sc.²
Informaticien scientifique, CME-PSC, Centre de recherches de Valcartier
Recherche et développement pour la défense Canada / Gouvernement du Canada
daniel.thibault at drdc-rddc.gc.ca / Tél: 418-844-4000x4245 Téléc: 418-844-4538
daniel.thibault at forces.gc.ca / Tél: 418-844-4000x4245 Téléc: 418-844-4538
Computer Scientist, MCCS-SPC, Valcartier Research Centre
Defence Research and Development Canada / Government of Canada
daniel.thibault at drdc-rddc.gc.ca / Tel: 418-844-4000x4245 Fax: 418-844-4538
daniel.thibault at forces.gc.ca / Tel: 418-844-4000x4245 Fax: 418-844-4538
DRDC is an agency of the Department of National Defence / RDDC est une agence du ministère de la Défense nationale
More information about the lttng-dev
mailing list