summaryrefslogtreecommitdiffstats
path: root/logsmanagement/file_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'logsmanagement/file_info.h')
-rw-r--r--logsmanagement/file_info.h165
1 files changed, 165 insertions, 0 deletions
diff --git a/logsmanagement/file_info.h b/logsmanagement/file_info.h
new file mode 100644
index 00000000..751b8744
--- /dev/null
+++ b/logsmanagement/file_info.h
@@ -0,0 +1,165 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+/** @file file_info.h
+ * @brief Includes the File_info structure that is the primary
+ * structure for configuring each log source.
+ */
+
+#ifndef FILE_INFO_H_
+#define FILE_INFO_H_
+
+#include <uv.h>
+#include "../database/sqlite/sqlite3.h"
+#include "defaults.h"
+#include "parser.h"
+
+// Cool trick --> http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/c_preprocessor_applications_en
+/* WARNING: DO NOT CHANGED THE ORDER OF LOG_SRC_TYPES, ONLY APPEND NEW TYPES */
+#define LOG_SRC_TYPES LST(FLB_TAIL)LST(FLB_WEB_LOG)LST(FLB_KMSG) \
+ LST(FLB_SYSTEMD)LST(FLB_DOCKER_EV)LST(FLB_SYSLOG) \
+ LST(FLB_SERIAL)LST(FLB_MQTT)
+#define LST(x) x,
+enum log_src_type_t {LOG_SRC_TYPES};
+#undef LST
+#define LST(x) #x,
+static const char * const log_src_type_t_str[] = {LOG_SRC_TYPES};
+#undef LST
+
+#define LOG_SRCS LST(LOG_SOURCE_LOCAL)LST(LOG_SOURCE_FORWARD)
+#define LST(x) x,
+enum log_src_t {LOG_SRCS};
+#undef LST
+#define LST(x) #x,
+static const char * const log_src_t_str[] = {LOG_SRCS};
+#undef LST
+
+#include "rrd_api/rrd_api.h"
+
+typedef enum log_src_state {
+ LOG_SRC_UNINITIALIZED = 0, /*!< config not initialized */
+ LOG_SRC_READY, /*!< config initialized (monitoring may have started or not) */
+ LOG_SRC_EXITING /*!< cleanup and destroy stage */
+} LOG_SRC_STATE;
+
+typedef struct flb_tail_config {
+ int use_inotify;
+} Flb_tail_config_t;
+
+typedef struct flb_kmsg_config {
+ char *prio_level;
+} Flb_kmsg_config_t;
+
+typedef struct flb_serial_config {
+ char *bitrate;
+ char *min_bytes;
+ char *separator;
+ char *format;
+} Flb_serial_config_t;
+
+typedef struct flb_socket_config {
+ char *mode;
+ char *unix_path;
+ char *unix_perm;
+ char *listen;
+ char *port;
+} Flb_socket_config_t;
+
+typedef struct syslog_parser_config {
+ char *log_format;
+ Flb_socket_config_t *socket_config;
+} Syslog_parser_config_t;
+
+typedef struct flb_output_config {
+ char *plugin; /**< Fluent Bit output plugin name, see: https://docs.fluentbit.io/manual/pipeline/outputs **/
+ int id; /**< Incremental id of plugin configuration in linked list, starting from 1 **/
+ struct flb_output_config_param {
+ char *key; /**< Key of the parameter configuration **/
+ char *val; /**< Value of the parameter configuration **/
+ struct flb_output_config_param *next; /**< Next output parameter configuration in the linked list of parameters **/
+ } *param;
+ struct flb_output_config *next; /**< Next output plugin configuration in the linked list of output plugins **/
+} Flb_output_config_t;
+
+struct File_info {
+
+ /* Struct members core to any log source type */
+ const char *chartname; /**< Top level chart name for this log source on web dashboard **/
+ char *filename; /**< Full path of log source **/
+ const char *file_basename; /**< Basename of log source **/
+ const char *stream_guid; /**< Streaming input GUID **/
+ enum log_src_t log_source; /**< Defines log source origin - see enum log_src_t for options **/
+ enum log_src_type_t log_type; /**< Defines type of log source - see enum log_src_type_t for options **/
+ struct Circ_buff *circ_buff; /**< Associated circular buffer - only one should exist per log source. **/
+ int compression_accel; /**< LZ4 compression acceleration factor for collected logs, see also: https://github.com/lz4/lz4/blob/90d68e37093d815e7ea06b0ee3c168cccffc84b8/lib/lz4.h#L195 **/
+ int update_every; /**< Interval (in sec) of how often to collect and update charts **/
+ int update_timeout; /**< Timeout to update charts after, since last update */
+ int use_log_timestamp; /**< Use log timestamps instead of collection timestamps, if available **/
+ int do_sd_journal_send; /**< Write to system journal - not applicable to all log source types **/
+ struct Chart_meta *chart_meta;
+ LOG_SRC_STATE state; /**< State of log source, used to sync status among threads **/
+
+ /* Struct members related to disk database */
+ sqlite3 *db; /**< SQLite3 DB connection to DB that contains metadata for this log source **/
+ const char *db_dir; /**< Path to metadata DB and compressed log BLOBs directory **/
+ const char *db_metadata; /**< Path to metadata DB file **/
+ uv_mutex_t *db_mut; /**< DB access mutex **/
+ uv_thread_t *db_writer_thread; /**< Thread responsible for handling the DB writes **/
+ uv_file blob_handles[BLOB_MAX_FILES + 1]; /**< File handles for BLOB files. Item 0 not used - just for matching 1-1 with DB ids **/
+ logs_manag_db_mode_t db_mode; /**< DB mode as enum. **/
+ int blob_write_handle_offset; /**< File offset denoting HEAD of currently open database BLOB file **/
+ int buff_flush_to_db_interval; /**< Frequency at which RAM buffers of this log source will be flushed to the database **/
+ int64_t blob_max_size; /**< When the size of a BLOB exceeds this value, the BLOB gets rotated. **/
+ int64_t blob_total_size; /**< This is the total disk space that all BLOBs occupy (for this log source) **/
+ int64_t db_write_duration; /**< Holds timing details related to duration of DB write operations **/
+ int64_t db_rotate_duration; /**< Holds timing details related to duration of DB rorate operations **/
+ sqlite3_stmt *stmt_get_log_msg_metadata_asc; /**< SQLITE3 statement used to retrieve metadata from database during queries in ascending order **/
+ sqlite3_stmt *stmt_get_log_msg_metadata_desc; /**< SQLITE3 statement used to retrieve metadata from database during queries in descending order **/
+
+ /* Struct members related to queries */
+ struct {
+ usec_t user;
+ usec_t sys;
+ } cpu_time_per_mib;
+
+ /* Struct members related to log parsing */
+ Log_parser_config_t *parser_config; /**< Configuration to be user by log parser - read from logsmanagement.conf **/
+ Log_parser_cus_config_t **parser_cus_config; /**< Array of custom log parsing configurations **/
+ Log_parser_metrics_t *parser_metrics; /**< Extracted metrics **/
+
+ /* Struct members related to Fluent-Bit inputs, filters, buffers, outputs */
+ int flb_input; /**< Fluent-bit input interface property for this log source **/
+ int flb_parser; /**< Fluent-bit parser interface property for this log source **/
+ int flb_lib_output; /**< Fluent-bit "lib" output interface property for this log source **/
+ void *flb_config; /**< Any other Fluent-Bit configuration specific to this log source only **/
+ uv_mutex_t flb_tmp_buff_mut;
+ uv_timer_t flb_tmp_buff_cpy_timer;
+ Flb_output_config_t *flb_outputs; /**< Linked list of Fluent Bit outputs for this log source **/
+
+};
+
+struct File_infos_arr {
+ struct File_info **data;
+ uint8_t count; /**< Number of items in array **/
+};
+
+extern struct File_infos_arr *p_file_infos_arr; /**< Array that contains all p_file_info structs for all log sources **/
+
+typedef struct {
+ int update_every;
+ int update_timeout;
+ int use_log_timestamp;
+ int circ_buff_max_size_in_mib;
+ int circ_buff_drop_logs;
+ int compression_acceleration;
+ logs_manag_db_mode_t db_mode;
+ int disk_space_limit_in_mib;
+ int buff_flush_to_db_interval;
+ int enable_collected_logs_total;
+ int enable_collected_logs_rate;
+ char *sd_journal_field_prefix;
+ int do_sd_journal_send;
+} g_logs_manag_config_t;
+
+extern g_logs_manag_config_t g_logs_manag_config;
+
+#endif // FILE_INFO_H_