mirror of
https://github.com/netdata/netdata.git
synced 2025-04-17 03:02:41 +00:00

* Alarm_repeat mergin the original! * Alarm_repeat binary tree! * Alarm_repeat binary tree finished! * Alarm_repeat move function and format string * Alarms bringing a new Binary tree * Alarms fixing the last two * Alarm_repeat useless var! * Alarm fix format and repeat alarm! * Alarm_backend steps! * Alarm_repeat stopping to test cloud! * Alarm_repeat stopping to test cloud 2! * Alarm_repeat fixing when restart!
156 lines
4.5 KiB
C
156 lines
4.5 KiB
C
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
#define NETDATA_RRD_INTERNALS 1
|
|
|
|
#include "rrd.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// globals
|
|
|
|
/*
|
|
// if not zero it gives the time (in seconds) to remove un-updated dimensions
|
|
// DO NOT ENABLE
|
|
// if dimensions are removed, the chart generation will have to run again
|
|
int rrd_delete_unupdated_dimensions = 0;
|
|
*/
|
|
|
|
int default_rrd_update_every = UPDATE_EVERY;
|
|
int default_rrd_history_entries = RRD_DEFAULT_HISTORY_ENTRIES;
|
|
RRD_MEMORY_MODE default_rrd_memory_mode = RRD_MEMORY_MODE_SAVE;
|
|
int gap_when_lost_iterations_above = 1;
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// RRD - memory modes
|
|
|
|
inline const char *rrd_memory_mode_name(RRD_MEMORY_MODE id) {
|
|
switch(id) {
|
|
case RRD_MEMORY_MODE_RAM:
|
|
return RRD_MEMORY_MODE_RAM_NAME;
|
|
|
|
case RRD_MEMORY_MODE_MAP:
|
|
return RRD_MEMORY_MODE_MAP_NAME;
|
|
|
|
case RRD_MEMORY_MODE_NONE:
|
|
return RRD_MEMORY_MODE_NONE_NAME;
|
|
|
|
case RRD_MEMORY_MODE_SAVE:
|
|
return RRD_MEMORY_MODE_SAVE_NAME;
|
|
|
|
case RRD_MEMORY_MODE_ALLOC:
|
|
return RRD_MEMORY_MODE_ALLOC_NAME;
|
|
|
|
case RRD_MEMORY_MODE_DBENGINE:
|
|
return RRD_MEMORY_MODE_DBENGINE_NAME;
|
|
}
|
|
|
|
return RRD_MEMORY_MODE_SAVE_NAME;
|
|
}
|
|
|
|
RRD_MEMORY_MODE rrd_memory_mode_id(const char *name) {
|
|
if(unlikely(!strcmp(name, RRD_MEMORY_MODE_RAM_NAME)))
|
|
return RRD_MEMORY_MODE_RAM;
|
|
|
|
else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_MAP_NAME)))
|
|
return RRD_MEMORY_MODE_MAP;
|
|
|
|
else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_NONE_NAME)))
|
|
return RRD_MEMORY_MODE_NONE;
|
|
|
|
else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_ALLOC_NAME)))
|
|
return RRD_MEMORY_MODE_ALLOC;
|
|
|
|
else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_DBENGINE_NAME)))
|
|
return RRD_MEMORY_MODE_DBENGINE;
|
|
|
|
return RRD_MEMORY_MODE_SAVE;
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// RRD - algorithms types
|
|
|
|
RRD_ALGORITHM rrd_algorithm_id(const char *name) {
|
|
if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
|
|
return RRD_ALGORITHM_INCREMENTAL;
|
|
|
|
else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
|
|
return RRD_ALGORITHM_ABSOLUTE;
|
|
|
|
else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
|
|
return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
|
|
|
|
else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
|
|
return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
|
|
|
|
else
|
|
return RRD_ALGORITHM_ABSOLUTE;
|
|
}
|
|
|
|
const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
|
|
switch(algorithm) {
|
|
case RRD_ALGORITHM_ABSOLUTE:
|
|
default:
|
|
return RRD_ALGORITHM_ABSOLUTE_NAME;
|
|
|
|
case RRD_ALGORITHM_INCREMENTAL:
|
|
return RRD_ALGORITHM_INCREMENTAL_NAME;
|
|
|
|
case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
|
|
return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
|
|
|
|
case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
|
|
return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
|
|
}
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// RRD - chart types
|
|
|
|
inline RRDSET_TYPE rrdset_type_id(const char *name) {
|
|
if(unlikely(strcmp(name, RRDSET_TYPE_AREA_NAME) == 0))
|
|
return RRDSET_TYPE_AREA;
|
|
|
|
else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
|
|
return RRDSET_TYPE_STACKED;
|
|
|
|
else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
|
|
return RRDSET_TYPE_LINE;
|
|
}
|
|
|
|
const char *rrdset_type_name(RRDSET_TYPE chart_type) {
|
|
switch(chart_type) {
|
|
case RRDSET_TYPE_LINE:
|
|
default:
|
|
return RRDSET_TYPE_LINE_NAME;
|
|
|
|
case RRDSET_TYPE_AREA:
|
|
return RRDSET_TYPE_AREA_NAME;
|
|
|
|
case RRDSET_TYPE_STACKED:
|
|
return RRDSET_TYPE_STACKED_NAME;
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// RRD - cache directory
|
|
|
|
char *rrdset_cache_dir(RRDHOST *host, const char *id, const char *config_section) {
|
|
char *ret = NULL;
|
|
|
|
char b[FILENAME_MAX + 1];
|
|
char n[FILENAME_MAX + 1];
|
|
rrdset_strncpyz_name(b, id, FILENAME_MAX);
|
|
|
|
snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
|
|
ret = config_get(config_section, "cache directory", n);
|
|
|
|
if(host->rrd_memory_mode == RRD_MEMORY_MODE_MAP || host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE) {
|
|
int r = mkdir(ret, 0775);
|
|
if(r != 0 && errno != EEXIST)
|
|
error("Cannot create directory '%s'", ret);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|