summaryrefslogtreecommitdiffstats
path: root/fluent-bit/include/fluent-bit/config_format/flb_cf.h
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/include/fluent-bit/config_format/flb_cf.h')
-rw-r--r--fluent-bit/include/fluent-bit/config_format/flb_cf.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/fluent-bit/include/fluent-bit/config_format/flb_cf.h b/fluent-bit/include/fluent-bit/config_format/flb_cf.h
new file mode 100644
index 00000000..752e333b
--- /dev/null
+++ b/fluent-bit/include/fluent-bit/config_format/flb_cf.h
@@ -0,0 +1,177 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+/* Fluent Bit
+ * ==========
+ * Copyright (C) 2015-2022 The Fluent Bit Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FLB_CONFIG_FORMAT_MAIN_H
+#define FLB_CONFIG_FORMAT_MAIN_H
+
+#include <fluent-bit/flb_info.h>
+#include <fluent-bit/flb_sds.h>
+#include <monkey/mk_core.h>
+
+#include <cfl/cfl.h>
+#include <cfl/cfl_sds.h>
+#include <cfl/cfl_array.h>
+#include <cfl/cfl_list.h>
+#include <cfl/cfl_variant.h>
+
+#define FLB_CF_ERROR_SERVICE_EXISTS "SERVICE definition already exists"
+#define FLB_CF_ERROR_META_CHAR "invalid first meta character: '@' expected"
+#define FLB_CF_ERROR_KV_INVALID_KEY "invalid key content"
+#define FLB_CF_ERROR_KV_INVALID_VAL "invalid value content"
+
+/* manipulate error state for the context */
+#define flb_cf_error_set(cf, err) cf->error_str = err
+#define flb_cf_error_get(cf) cf->error_str
+#define flb_cr_error_reset(cf) cf->error_str = ""
+
+/* meta commands: handled as key value pairs */
+#define flb_cf_meta flb_kv
+
+enum cf_file_format {
+ FLB_CF_FLUENTBIT,
+#ifdef FLB_HAVE_LIBYAML
+ FLB_CF_YAML
+#endif
+};
+
+#define FLB_CF_CLASSIC FLB_CF_FLUENTBIT
+
+enum section_type {
+ FLB_CF_SERVICE = 0, /* [SERVICE] */
+ FLB_CF_PARSER, /* [PARSER] */
+ FLB_CF_MULTILINE_PARSER, /* [MULTILINE_PARSER] */
+ FLB_CF_CUSTOM, /* [CUSTOM] */
+ FLB_CF_INPUT, /* [INPUT] */
+ FLB_CF_FILTER, /* [FILTER] */
+ FLB_CF_OUTPUT, /* [OUTPUT] */
+ FLB_CF_OTHER, /* any other section.. */
+};
+
+struct flb_cf_group {
+ flb_sds_t name; /* group name */
+ struct cfl_kvlist *properties; /* key value properties */
+ struct mk_list _head; /* link to struct flb_cf_section->groups */
+};
+
+struct flb_cf_section {
+ int type;
+ flb_sds_t name; /* name (used for FLB_CF_OTHER type) */
+ struct cfl_kvlist *properties; /* key value properties */
+
+ struct mk_list groups; /* list of groups */
+
+ struct mk_list _head; /* link to struct flb_cf->sections */
+ struct mk_list _head_section; /* link to section type, e.g: inputs, filters.. */
+};
+
+struct flb_cf {
+ /* origin format */
+ int format;
+
+ /* global service */
+ struct flb_cf_section *service;
+
+ /* config environment variables (env section, availble on YAML) */
+ struct mk_list env;
+
+ /* meta commands (used by fluentbit classic mode) */
+ struct mk_list metas;
+
+ /* parsers */
+ struct mk_list parsers;
+ struct mk_list multiline_parsers;
+
+ /* custom plugins */
+ struct mk_list customs;
+
+ /* pipeline */
+ struct mk_list inputs;
+ struct mk_list filters;
+ struct mk_list outputs;
+
+ /* others */
+ struct mk_list others;
+
+ /* list head for all sections */
+ struct mk_list sections;
+
+ /* set the last error found */
+ char *error_str;
+
+
+ /* a list head entry in case the caller want's to link contexts */
+ struct mk_list _head;
+};
+
+
+struct flb_cf *flb_cf_create();
+struct flb_cf *flb_cf_create_from_file(struct flb_cf *cf, char *file);
+flb_sds_t flb_cf_key_translate(struct flb_cf *cf, char *key, int len);
+
+void flb_cf_destroy(struct flb_cf *cf);
+
+int flb_cf_set_origin_format(struct flb_cf *cf, int format);
+void flb_cf_dump(struct flb_cf *cf);
+
+struct flb_kv *flb_cf_env_property_add(struct flb_cf *cf,
+ char *k_buf, size_t k_len,
+ char *v_buf, size_t v_len);
+
+/* metas */
+struct flb_kv *flb_cf_meta_property_add(struct flb_cf *cf, char *meta, int len);
+
+#define flb_cf_foreach_meta(cf) \
+
+
+void flb_cf_meta_destroy(struct flb_cf *cf, struct flb_cf_meta *meta);
+void flb_cf_meta_destroy_all(struct flb_cf *cf);
+
+/* groups */
+struct flb_cf_group *flb_cf_group_create(struct flb_cf *cf, struct flb_cf_section *s,
+ char *name, int len);
+struct flb_cf_group *flb_cf_group_get(struct flb_cf *cf, struct flb_cf_section *s, char *name);
+void flb_cf_group_print(struct flb_cf_group *g);
+
+void flb_cf_group_destroy(struct flb_cf_group *g);
+
+/* sections */
+struct flb_cf_section *flb_cf_section_create(struct flb_cf *cf, char *name, int len);
+struct flb_cf_section *flb_cf_section_get_by_name(struct flb_cf *cf, char *name);
+void flb_cf_section_destroy(struct flb_cf *cf, struct flb_cf_section *s);
+void flb_cf_section_destroy_all(struct flb_cf *cf);
+
+/* properties */
+struct cfl_variant *flb_cf_section_property_add(struct flb_cf *cf,
+ struct cfl_kvlist *kv_list,
+ char *k_buf, size_t k_len,
+ char *v_buf, size_t v_len);
+
+struct cfl_array *flb_cf_section_property_add_list(struct flb_cf *cf,
+ struct cfl_kvlist *kv_list,
+ char *k_buf, size_t k_len);
+
+struct cfl_variant *flb_cf_section_property_get(struct flb_cf *cf,
+ struct flb_cf_section *s,
+ char *key);
+
+char *flb_cf_section_property_get_string(struct flb_cf *cf,
+ struct flb_cf_section *s,
+ char *key);
+
+#endif