diff options
Diffstat (limited to 'src/logsmanagement/file_info.h')
-rw-r--r-- | src/logsmanagement/file_info.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/logsmanagement/file_info.h b/src/logsmanagement/file_info.h new file mode 100644 index 00000000..224f4ecc --- /dev/null +++ b/src/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_ |