summaryrefslogtreecommitdiffstats
path: root/logsmanagement/rrd_api/rrd_api_systemd.c
diff options
context:
space:
mode:
Diffstat (limited to 'logsmanagement/rrd_api/rrd_api_systemd.c')
-rw-r--r--logsmanagement/rrd_api/rrd_api_systemd.c206
1 files changed, 206 insertions, 0 deletions
diff --git a/logsmanagement/rrd_api/rrd_api_systemd.c b/logsmanagement/rrd_api/rrd_api_systemd.c
new file mode 100644
index 00000000..1d489389
--- /dev/null
+++ b/logsmanagement/rrd_api/rrd_api_systemd.c
@@ -0,0 +1,206 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "rrd_api_systemd.h"
+
+const char *dim_sever_str[SYSLOG_SEVER_ARR_SIZE] = {
+ "0:Emergency",
+ "1:Alert",
+ "2:Critical",
+ "3:Error",
+ "4:Warning",
+ "5:Notice",
+ "6:Informational",
+ "7:Debug",
+ "uknown"
+};
+
+static const char *dim_facil_str[SYSLOG_FACIL_ARR_SIZE] = {
+ "0:kernel",
+ "1:user-level",
+ "2:mail",
+ "3:system",
+ "4:sec/auth",
+ "5:syslog",
+ "6:lpd/printer",
+ "7:news/nntp",
+ "8:uucp",
+ "9:time",
+ "10:sec/auth",
+ "11:ftp",
+ "12:ntp",
+ "13:logaudit",
+ "14:logalert",
+ "15:clock",
+ "16:local0",
+ "17:local1",
+ "18:local2",
+ "19:local3",
+ "20:local4",
+ "21:local5",
+ "22:local6",
+ "23:local7",
+ "uknown"
+};
+
+void systemd_chart_init(struct File_info *p_file_info){
+ p_file_info->chart_meta->chart_data_systemd = callocz(1, sizeof (struct Chart_data_systemd));
+ chart_data_systemd_t *chart_data = p_file_info->chart_meta->chart_data_systemd;
+ chart_data->last_update = now_realtime_sec(); // initial value shouldn't be 0
+ long chart_prio = p_file_info->chart_meta->base_prio;
+
+ lgs_mng_do_num_of_logs_charts_init(p_file_info, chart_prio);
+
+ /* Syslog priority value - initialise */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_PRIOR){
+ lgs_mng_create_chart(
+ (char *) p_file_info->chartname // type
+ , "priority_values" // id
+ , "Priority Values" // title
+ , "priority values" // units
+ , "priority" // family
+ , NULL // context
+ , RRDSET_TYPE_AREA_NAME // chart_type
+ , ++chart_prio // priority
+ , p_file_info->update_every // update_every
+ );
+
+ for(int i = 0; i < SYSLOG_PRIOR_ARR_SIZE - 1; i++){
+ char dim_id[4];
+ snprintfz(dim_id, 4, "%d", i);
+ chart_data->dim_prior[i] = strdupz(dim_id);
+ lgs_mng_add_dim(chart_data->dim_prior[i], RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
+ }
+ chart_data->dim_prior[SYSLOG_PRIOR_ARR_SIZE - 1] = "uknown";
+ lgs_mng_add_dim(chart_data->dim_prior[SYSLOG_PRIOR_ARR_SIZE - 1],
+ RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
+
+ }
+
+ /* Syslog severity level (== Systemd priority) - initialise */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_SEVER){
+ lgs_mng_create_chart(
+ (char *) p_file_info->chartname // type
+ , "severity_levels" // id
+ , "Severity Levels" // title
+ , "severity levels" // units
+ , "priority" // family
+ , NULL // context
+ , RRDSET_TYPE_AREA_NAME // chart_type
+ , ++chart_prio // priority
+ , p_file_info->update_every // update_every
+ );
+
+ for(int i = 0; i < SYSLOG_SEVER_ARR_SIZE; i++)
+ lgs_mng_add_dim(dim_sever_str[i], RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
+ }
+
+ /* Syslog facility level - initialise */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_FACIL){
+ lgs_mng_create_chart(
+ (char *) p_file_info->chartname // type
+ , "facility_levels" // id
+ , "Facility Levels" // title
+ , "facility levels" // units
+ , "priority" // family
+ , NULL // context
+ , RRDSET_TYPE_AREA_NAME // chart_type
+ , ++chart_prio // priority
+ , p_file_info->update_every // update_every
+ );
+
+ for(int i = 0; i < SYSLOG_FACIL_ARR_SIZE; i++)
+ lgs_mng_add_dim(dim_facil_str[i], RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
+ }
+
+ lgs_mng_do_custom_charts_init(p_file_info);
+}
+
+void systemd_chart_update(struct File_info *p_file_info){
+ chart_data_systemd_t *chart_data = p_file_info->chart_meta->chart_data_systemd;
+
+ if(chart_data->last_update != p_file_info->parser_metrics->last_update){
+
+ time_t lag_in_sec = p_file_info->parser_metrics->last_update - chart_data->last_update - 1;
+
+ lgs_mng_do_num_of_logs_charts_update(p_file_info, lag_in_sec, chart_data);
+
+ /* Syslog priority value - update */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_PRIOR){
+ for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
+ sec < p_file_info->parser_metrics->last_update;
+ sec++){
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "priority_values");
+ for(int idx = 0; idx < SYSLOG_PRIOR_ARR_SIZE; idx++){
+ if(chart_data->num_prior[idx])
+ lgs_mng_update_chart_set(chart_data->dim_prior[idx], chart_data->num_prior[idx]);
+ }
+ lgs_mng_update_chart_end(sec);
+ }
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "priority_values");
+ for(int idx = 0; idx < SYSLOG_PRIOR_ARR_SIZE; idx++){
+ if(p_file_info->parser_metrics->systemd->prior[idx]){
+ chart_data->num_prior[idx] = p_file_info->parser_metrics->systemd->prior[idx];
+ lgs_mng_update_chart_set(chart_data->dim_prior[idx], chart_data->num_prior[idx]);
+ }
+ }
+ lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
+
+ }
+
+ /* Syslog severity level (== Systemd priority) - update chart */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_SEVER){
+ for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
+ sec < p_file_info->parser_metrics->last_update;
+ sec++){
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "severity_levels");
+ for(int idx = 0; idx < SYSLOG_SEVER_ARR_SIZE; idx++){
+ if(chart_data->num_sever[idx])
+ lgs_mng_update_chart_set(dim_sever_str[idx], chart_data->num_sever[idx]);
+ }
+ lgs_mng_update_chart_end(sec);
+ }
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "severity_levels");
+ for(int idx = 0; idx < SYSLOG_SEVER_ARR_SIZE; idx++){
+ if(p_file_info->parser_metrics->systemd->sever[idx]){
+ chart_data->num_sever[idx] = p_file_info->parser_metrics->systemd->sever[idx];
+ lgs_mng_update_chart_set(dim_sever_str[idx], chart_data->num_sever[idx]);
+ }
+ }
+ lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
+
+ }
+
+ /* Syslog facility value - update chart */
+ if(p_file_info->parser_config->chart_config & CHART_SYSLOG_FACIL){
+ for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
+ sec < p_file_info->parser_metrics->last_update;
+ sec++){
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "facility_levels");
+ for(int idx = 0; idx < SYSLOG_FACIL_ARR_SIZE; idx++){
+ if(chart_data->num_facil[idx])
+ lgs_mng_update_chart_set(dim_facil_str[idx], chart_data->num_facil[idx]);
+ }
+ lgs_mng_update_chart_end(sec);
+ }
+
+ lgs_mng_update_chart_begin(p_file_info->chartname, "facility_levels");
+ for(int idx = 0; idx < SYSLOG_FACIL_ARR_SIZE; idx++){
+ if(p_file_info->parser_metrics->systemd->facil[idx]){
+ chart_data->num_facil[idx] = p_file_info->parser_metrics->systemd->facil[idx];
+ lgs_mng_update_chart_set(dim_facil_str[idx], chart_data->num_facil[idx]);
+ }
+ }
+ lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
+
+ }
+
+ lgs_mng_do_custom_charts_update(p_file_info, lag_in_sec);
+
+ chart_data->last_update = p_file_info->parser_metrics->last_update;
+ }
+}