summaryrefslogtreecommitdiffstats
path: root/src/lib/event-filter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/event-filter.h')
-rw-r--r--src/lib/event-filter.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/lib/event-filter.h b/src/lib/event-filter.h
new file mode 100644
index 0000000..0a55e05
--- /dev/null
+++ b/src/lib/event-filter.h
@@ -0,0 +1,64 @@
+#ifndef EVENT_FILTER_H
+#define EVENT_FILTER_H
+
+struct event;
+
+struct event_filter_field {
+ const char *key;
+ const char *value;
+};
+
+struct event_filter *event_filter_create(void);
+struct event_filter *event_filter_create_fragment(pool_t pool);
+void event_filter_ref(struct event_filter *filter);
+void event_filter_unref(struct event_filter **filter);
+
+/* Add queries from source filter to destination filter. */
+void event_filter_merge(struct event_filter *dest,
+ const struct event_filter *src);
+/* Add queries from source filter to destination filter, but with supplied
+ context overriding whatever context source queries had. */
+void event_filter_merge_with_context(struct event_filter *dest,
+ const struct event_filter *src,
+ void *new_context);
+
+/* Remove query with given context from filter.
+ Returns TRUE if query was removed, otherwise FALSE. */
+bool event_filter_remove_queries_with_context(struct event_filter *filter,
+ void *context);
+
+/* Export the filter into a string. The context pointers aren't exported. */
+void event_filter_export(struct event_filter *filter, string_t *dest);
+/* Add queries to the filter from the given string. The string is expected to
+ be generated by event_filter_export(). Returns TRUE on success, FALSE on
+ invalid string. */
+#define event_filter_import(filter, str, error_r) \
+ (event_filter_parse((str), (filter), (error_r)) == 0)
+
+/* Parse a string-ified query, filling the passed in filter */
+int event_filter_parse(const char *str, struct event_filter *filter,
+ const char **error_r);
+
+/* Returns TRUE if the event matches the event filter. */
+bool event_filter_match(struct event_filter *filter, struct event *event,
+ const struct failure_context *ctx);
+/* Same as event_filter_match(), but use the given source filename:linenum
+ instead of taking it from the event. */
+bool event_filter_match_source(struct event_filter *filter, struct event *event,
+ const char *source_filename,
+ unsigned int source_linenum,
+ const struct failure_context *ctx);
+
+/* Iterate through all queries with non-NULL context that match the event. */
+struct event_filter_match_iter *
+event_filter_match_iter_init(struct event_filter *filter, struct event *event,
+ const struct failure_context *ctx);
+/* Return context for the query that matched, or NULL when there are no more
+ matches. Note: This skips over any queries that have NULL context. */
+void *event_filter_match_iter_next(struct event_filter_match_iter *iter);
+void event_filter_match_iter_deinit(struct event_filter_match_iter **iter);
+
+void event_filter_init(void);
+void event_filter_deinit(void);
+
+#endif