From cab3f160369bcc2536e536fa88ea76dd7bc586b4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 2 Dec 2016 15:36:52 -0500 Subject: [PATCH] Add trimmer plug-in skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- configure.ac | 1 + include/babeltrace/plugin/plugin-system.h | 23 +++++ plugins/Makefile.am | 2 +- plugins/trimmer/Makefile.am | 16 ++++ plugins/trimmer/iterator.c | 91 ++++++++++++++++++ plugins/trimmer/iterator.h | 49 ++++++++++ plugins/trimmer/trimmer.c | 109 ++++++++++++++++++++++ plugins/trimmer/trimmer.h | 39 ++++++++ 8 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 plugins/trimmer/Makefile.am create mode 100644 plugins/trimmer/iterator.c create mode 100644 plugins/trimmer/iterator.h create mode 100644 plugins/trimmer/trimmer.c create mode 100644 plugins/trimmer/trimmer.h diff --git a/configure.ac b/configure.ac index bc7df068..68d4668b 100644 --- a/configure.ac +++ b/configure.ac @@ -423,6 +423,7 @@ AC_CONFIG_FILES([ plugins/ctf/lttng-live/Makefile plugins/muxer/Makefile plugins/text/Makefile + plugins/trimmer/Makefile babeltrace.pc babeltrace-ctf.pc ]) diff --git a/include/babeltrace/plugin/plugin-system.h b/include/babeltrace/plugin/plugin-system.h index e471a0dd..1ec7a08c 100644 --- a/include/babeltrace/plugin/plugin-system.h +++ b/include/babeltrace/plugin/plugin-system.h @@ -266,6 +266,17 @@ typedef struct bt_notification *(*bt_notification_iterator_get_cb)( typedef enum bt_notification_iterator_status (*bt_notification_iterator_next_cb)( struct bt_notification_iterator *iterator); +/** + * Function advancing an iterator's position to a given time (relative to Epoch). + * + * @param iterator Notification iterator instance + * @param time Time at which to seek, expressed in ns since Epoch + * @returns One of #bt_notification_iterator_status values + */ +typedef enum bt_notification_iterator_status + (*bt_notification_iterator_seek_time_cb)( + struct bt_notification_iterator *iterator, int64_t time); + /** * Function cleaning-up an iterator's private data on destruction. * @@ -296,6 +307,18 @@ extern enum bt_notification_iterator_status bt_notification_iterator_set_next_cb(struct bt_notification_iterator *iterator, bt_notification_iterator_next_cb next); +/** + * Set an iterator's "seek_time" callback which sets the iterator's position to + * provided time (in ns since Epoch). + * + * @param iterator Notification iterator instance + * @param seek_timetime Iterator "seek_time" callback + * @returns One of #bt_notification_iterator_status values + */ +extern enum bt_notification_iterator_status +bt_notification_iterator_set_seek_time_cb(struct bt_notification_iterator *iterator, + bt_notification_iterator_seek_time_cb seek_time); + /** * Set an iterator's "destroy" callback. * diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 6575b0be..ec8418f0 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -1 +1 @@ -SUBDIRS = ctf text muxer +SUBDIRS = ctf text muxer trimmer diff --git a/plugins/trimmer/Makefile.am b/plugins/trimmer/Makefile.am new file mode 100644 index 00000000..4729bc4f --- /dev/null +++ b/plugins/trimmer/Makefile.am @@ -0,0 +1,16 @@ +AM_CFLAGS = $(PACKAGE_CFLAGS) -I$(top_srcdir)/include + +SUBDIRS = . + +plugindir = "$(PLUGINSDIR)" +plugin_LTLIBRARIES = libbabeltrace-plugin-trimmer.la + +libbabeltrace_plugin_trimmer_la_SOURCES = \ + trimmer.h trimmer.c iterator.h iterator.c + +libbabeltrace_plugin_trimmer_la_LDFLAGS = \ + -version-info $(BABELTRACE_LIBRARY_VERSION) + +libbabeltrace_plugin_trimmer_la_LIBADD = \ + $(top_builddir)/lib/libbabeltrace.la \ + $(top_builddir)/formats/ctf/libbabeltrace-ctf.la diff --git a/plugins/trimmer/iterator.c b/plugins/trimmer/iterator.c new file mode 100644 index 00000000..492f3f1a --- /dev/null +++ b/plugins/trimmer/iterator.c @@ -0,0 +1,91 @@ +/* + * iterator.c + * + * Babeltrace Trace Trimmer Iterator + * + * Copyright 2016 Jérémie Galarneau + * + * Author: Jérémie Galarneau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "trimmer.h" +#include "iterator.h" +#include + +BT_HIDDEN +enum bt_component_status trimmer_iterator_init(struct bt_component *component, + struct bt_notification_iterator *iterator) +{ + enum bt_component_status ret; + enum bt_notification_iterator_status it_ret; + + it_ret = bt_notification_iterator_set_next_cb(iterator, + trimmer_iterator_next); + if (it_ret) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + + it_ret = bt_notification_iterator_set_get_cb(iterator, + trimmer_iterator_get); + if (it_ret) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + + it_ret = bt_notification_iterator_set_seek_time_cb(iterator, + trimmer_iterator_seek_time); + if (it_ret) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } +end: + return ret; +} + +BT_HIDDEN +struct bt_notification *trimmer_iterator_get( + struct bt_notification_iterator *iterator) +{ + return NULL; +} + +BT_HIDDEN +enum bt_notification_iterator_status trimmer_iterator_next( + struct bt_notification_iterator *iterator) +{ + enum bt_notification_iterator_status ret; + + ret = BT_NOTIFICATION_ITERATOR_STATUS_OK; +end: + return ret; +} + +BT_HIDDEN +enum bt_notification_iterator_status trimmer_iterator_seek_time( + struct bt_notification_iterator *iterator, int64_t time) +{ + enum bt_notification_iterator_status ret; + + ret = BT_NOTIFICATION_ITERATOR_STATUS_OK; +end: + return ret; +} diff --git a/plugins/trimmer/iterator.h b/plugins/trimmer/iterator.h new file mode 100644 index 00000000..c32b498d --- /dev/null +++ b/plugins/trimmer/iterator.h @@ -0,0 +1,49 @@ +#ifndef BABELTRACE_PLUGIN_TRIMMER_ITERATOR_H +#define BABELTRACE_PLUGIN_TRIMMER_ITERATOR_H + +/* + * BabelTrace - Trace Trimmer Iterator + * + * Copyright 2016 Jérémie Galarneau + * + * Author: Jérémie Galarneau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "trimmer.h" + +BT_HIDDEN +enum bt_component_status trimmer_iterator_init( + struct bt_component *component, + struct bt_notification_iterator *iterator); + +BT_HIDDEN +struct bt_notification *trimmer_iterator_get( + struct bt_notification_iterator *iterator); + +BT_HIDDEN +enum bt_notification_iterator_status trimmer_iterator_next( + struct bt_notification_iterator *iterator); + +BT_HIDDEN +enum bt_notification_iterator_status trimmer_iterator_seek_time( + struct bt_notification_iterator *iterator, int64_t time); + +#endif /* BABELTRACE_PLUGIN_TRIMMER_ITERATOR_H */ diff --git a/plugins/trimmer/trimmer.c b/plugins/trimmer/trimmer.c new file mode 100644 index 00000000..7e6f024c --- /dev/null +++ b/plugins/trimmer/trimmer.c @@ -0,0 +1,109 @@ +/* + * trimmer.c + * + * Babeltrace Trace Trimmer + * + * Copyright 2016 Jérémie Galarneau + * + * Author: Jérémie Galarneau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include "trimmer.h" +#include "iterator.h" + +static +void destroy_trimmer_data(struct trimmer *trimmer) +{ + g_free(trimmer); +} + +static +struct trimmer *create_trimmer_data(void) +{ + struct trimmer *trimmer; + + trimmer = g_new0(struct trimmer, 1); + if (!trimmer) { + goto end; + } +end: + return trimmer; +} + +static +void destroy_trimmer(struct bt_component *component) +{ + void *data = bt_component_get_private_data(component); + + destroy_trimmer_data(data); +} + +enum bt_component_status trimmer_component_init( + struct bt_component *component, struct bt_value *params) +{ + enum bt_component_status ret; + struct trimmer *trimmer = create_trimmer_data(); + + if (!trimmer) { + ret = BT_COMPONENT_STATUS_NOMEM; + goto end; + } + + ret = bt_component_set_destroy_cb(component, + destroy_trimmer); + if (ret != BT_COMPONENT_STATUS_OK) { + goto error; + } + + ret = bt_component_set_private_data(component, trimmer); + if (ret != BT_COMPONENT_STATUS_OK) { + goto error; + } + + ret = bt_component_filter_set_iterator_init_cb(component, + trimmer_iterator_init); + if (ret != BT_COMPONENT_STATUS_OK) { + goto error; + } +end: + return ret; +error: + destroy_trimmer_data(trimmer); + return ret; +} + +/* Initialize plug-in entry points. */ +BT_PLUGIN_NAME("trimmer"); +BT_PLUGIN_DESCRIPTION("Babeltrace Trace Trimmer Plug-In."); +BT_PLUGIN_AUTHOR("Jérémie Galarneau"); +BT_PLUGIN_LICENSE("MIT"); + +BT_PLUGIN_COMPONENT_CLASSES_BEGIN +BT_PLUGIN_FILTER_COMPONENT_CLASS_ENTRY("trimmer", + "Ensure that trace notifications outside of a given range are filtered-out.", + trimmer_component_init) +BT_PLUGIN_COMPONENT_CLASSES_END diff --git a/plugins/trimmer/trimmer.h b/plugins/trimmer/trimmer.h new file mode 100644 index 00000000..9f4a34af --- /dev/null +++ b/plugins/trimmer/trimmer.h @@ -0,0 +1,39 @@ +#ifndef BABELTRACE_PLUGIN_TRIMMER_H +#define BABELTRACE_PLUGIN_TRIMMER_H + +/* + * BabelTrace - Trace Trimmer Plug-in + * + * Copyright 2016 Jérémie Galarneau + * + * Author: Jérémie Galarneau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include + +struct trimmer { + int64_t range_start, range_end; +}; + +#endif /* BABELTRACE_PLUGIN_TRIMMER_H */ -- 2.34.1