1+ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2+
3+ /* Fluent Bit
4+ * ==========
5+ * Copyright (C) 2015-2024 The Fluent Bit Authors
6+ *
7+ * Licensed under the Apache License, Version 2.0 (the "License");
8+ * you may not use this file except in compliance with the License.
9+ * You may obtain a copy of the License at
10+ *
11+ * http://www.apache.org/licenses/LICENSE-2.0
12+ *
13+ * Unless required by applicable law or agreed to in writing, software
14+ * distributed under the License is distributed on an "AS IS" BASIS,
15+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+ * See the License for the specific language governing permissions and
17+ * limitations under the License.
18+ */
19+
20+ #ifndef FLB_CONDITIONS_H
21+ #define FLB_CONDITIONS_H
22+
23+ #include <fluent-bit/flb_info.h>
24+ #include <fluent-bit/flb_sds.h>
25+ #include <fluent-bit/flb_regex.h>
26+ #include <fluent-bit/flb_mp.h>
27+ #include <fluent-bit/flb_cfl_record_accessor.h>
28+ #include <monkey/mk_core.h>
29+ #include <fluent-bit/flb_mp_chunk.h>
30+
31+ /* Context types enum */
32+ enum record_context_type {
33+ RECORD_CONTEXT_BODY = 0 ,
34+ RECORD_CONTEXT_METADATA = 1
35+ };
36+
37+ struct flb_condition ;
38+
39+ enum flb_condition_operator {
40+ FLB_COND_OP_AND ,
41+ FLB_COND_OP_OR
42+ };
43+
44+ enum flb_rule_operator {
45+ FLB_RULE_OP_EQ ,
46+ FLB_RULE_OP_NEQ ,
47+ FLB_RULE_OP_GT ,
48+ FLB_RULE_OP_LT ,
49+ FLB_RULE_OP_REGEX ,
50+ FLB_RULE_OP_IN ,
51+ FLB_RULE_OP_NOT_IN
52+ };
53+
54+ struct flb_condition_rule {
55+ struct flb_cfl_record_accessor * ra ; /* Record accessor for the field */
56+ enum record_context_type context ; /* Whether rule applies to body or metadata */
57+ enum flb_rule_operator op ;
58+ union {
59+ flb_sds_t str_val ;
60+ double num_val ;
61+ struct {
62+ flb_sds_t * values ;
63+ int count ;
64+ } array ;
65+ } value ;
66+ struct flb_regex * regex ;
67+ struct mk_list _head ;
68+ };
69+
70+ struct flb_condition {
71+ enum flb_condition_operator op ;
72+ struct mk_list rules ;
73+ };
74+
75+ /* Core condition functions */
76+ struct flb_condition * flb_condition_create (enum flb_condition_operator op );
77+
78+ int flb_condition_add_rule (struct flb_condition * cond ,
79+ const char * field ,
80+ enum flb_rule_operator op ,
81+ void * value ,
82+ int value_count ,
83+ enum record_context_type context );
84+
85+ void flb_condition_destroy (struct flb_condition * cond );
86+
87+ /* Evaluation function */
88+ int flb_condition_evaluate (struct flb_condition * cond ,
89+ struct flb_mp_chunk_record * record );
90+
91+ #endif /* FLB_CONDITIONS_H */
0 commit comments