summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aclk/aclk_query.c2
-rw-r--r--collectors/apps.plugin/apps_plugin.c483
-rw-r--r--collectors/cgroups.plugin/sys_fs_cgroup.c42
-rw-r--r--collectors/ebpf.plugin/ebpf.c2
-rw-r--r--collectors/plugins.d/pluginsd_parser.c93
-rw-r--r--collectors/plugins.d/pluginsd_parser.h4
-rw-r--r--collectors/proc.plugin/ipc.c8
-rw-r--r--collectors/proc.plugin/proc_diskstats.c34
-rw-r--r--collectors/proc.plugin/proc_interrupts.c2
-rw-r--r--collectors/proc.plugin/proc_loadavg.c2
-rw-r--r--collectors/proc.plugin/proc_mdstat.c6
-rw-r--r--collectors/proc.plugin/proc_net_rpc_nfs.c20
-rw-r--r--collectors/proc.plugin/proc_net_rpc_nfsd.c38
-rw-r--r--collectors/proc.plugin/proc_pagetypeinfo.c4
-rw-r--r--collectors/proc.plugin/proc_pressure.c2
-rw-r--r--collectors/proc.plugin/proc_softirqs.c2
-rw-r--r--collectors/proc.plugin/proc_stat.c38
-rw-r--r--collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c2
-rw-r--r--collectors/proc.plugin/sys_block_zram.c14
-rw-r--r--collectors/proc.plugin/sys_class_infiniband.c4
-rw-r--r--collectors/proc.plugin/sys_class_power_supply.c4
-rw-r--r--collectors/proc.plugin/sys_devices_system_edac_mc.c4
-rw-r--r--collectors/proc.plugin/sys_kernel_mm_ksm.c8
-rw-r--r--collectors/slabinfo.plugin/slabinfo.c26
-rw-r--r--collectors/tc.plugin/plugin_tc.c10
-rw-r--r--daemon/analytics.c88
-rw-r--r--daemon/analytics.h14
-rw-r--r--daemon/main.c28
-rw-r--r--daemon/unit_test.c69
-rw-r--r--database/engine/cache.c9
-rw-r--r--database/engine/metric.c54
-rw-r--r--database/engine/pagecache.c14
-rw-r--r--database/engine/pdc.c5
-rw-r--r--database/engine/rrdengine.c2
-rwxr-xr-xdatabase/engine/rrdengineapi.c6
-rw-r--r--database/rrd.h6
-rw-r--r--database/rrdcalc.h2
-rw-r--r--database/rrdcalctemplate.h2
-rw-r--r--database/rrdcontext.c290
-rw-r--r--database/rrdcontext.h26
-rw-r--r--database/rrdfunctions.c35
-rw-r--r--database/rrdfunctions.h4
-rw-r--r--database/rrdhost.c2
-rw-r--r--database/rrdlabels.c22
-rw-r--r--database/sqlite/sqlite_aclk.c2
-rw-r--r--database/sqlite/sqlite_aclk_node.c2
-rw-r--r--database/sqlite/sqlite_db_migration.c2
-rw-r--r--health/health_config.c8
-rw-r--r--health/health_json.c22
-rw-r--r--libnetdata/adaptive_resortable_list/adaptive_resortable_list.c2
-rw-r--r--libnetdata/buffer/buffer.c489
-rw-r--r--libnetdata/buffer/buffer.h784
-rw-r--r--libnetdata/dictionary/dictionary.h2
-rw-r--r--libnetdata/inlined.h338
-rw-r--r--libnetdata/storage_number/storage_number.c142
-rw-r--r--libnetdata/storage_number/storage_number.h91
-rw-r--r--ml/Config.cc3
-rw-r--r--ml/Config.h2
-rw-r--r--ml/Host.cc34
-rw-r--r--ml/Host.h2
-rw-r--r--ml/ml-dummy.c4
-rw-r--r--ml/ml.cc10
-rw-r--r--ml/ml.h2
-rw-r--r--registry/registry.c4
-rw-r--r--streaming/receiver.c3
-rw-r--r--streaming/replication.c99
-rw-r--r--streaming/rrdpush.c37
-rw-r--r--streaming/rrdpush.h10
-rw-r--r--streaming/sender.c4
-rw-r--r--web/api/badges/web_buffer_svg.c4
-rw-r--r--web/api/exporters/allmetrics.c10
-rw-r--r--web/api/formatters/charts2json.c52
-rw-r--r--web/api/formatters/charts2json.h1
-rw-r--r--web/api/formatters/csv/csv.c19
-rw-r--r--web/api/formatters/json/json.c26
-rw-r--r--web/api/formatters/json_wrapper.c668
-rw-r--r--web/api/formatters/json_wrapper.h2
-rw-r--r--web/api/formatters/rrd2json.c70
-rw-r--r--web/api/formatters/rrd2json.h13
-rw-r--r--web/api/formatters/rrdset2json.c8
-rw-r--r--web/api/formatters/ssv/ssv.c2
-rw-r--r--web/api/formatters/value/value.c11
-rw-r--r--web/api/formatters/value/value.h2
-rw-r--r--web/api/health/health_cmdapi.c4
-rw-r--r--web/api/queries/query.c26
-rw-r--r--web/api/queries/query.h27
-rw-r--r--web/api/queries/rrdr.h2
-rw-r--r--web/api/queries/weights.c235
-rw-r--r--web/api/queries/weights.h8
-rw-r--r--web/api/web_api_v1.c414
-rw-r--r--web/api/web_api_v1.h3
-rw-r--r--web/server/web_client.c38
92 files changed, 3006 insertions, 2269 deletions
diff --git a/aclk/aclk_query.c b/aclk/aclk_query.c
index 9eced08111..7d21a859cb 100644
--- a/aclk/aclk_query.c
+++ b/aclk/aclk_query.c
@@ -192,7 +192,7 @@ static int http_api_v2(struct aclk_query_thread *query_thr, aclk_query_t query)
w->response.data->date = w->tv_ready.tv_sec;
web_client_build_http_header(w);
local_buffer = buffer_create(NETDATA_WEB_RESPONSE_INITIAL_SIZE, &netdata_buffers_statistics.buffers_aclk);
- local_buffer->contenttype = CT_APPLICATION_JSON;
+ local_buffer->content_type = CT_APPLICATION_JSON;
buffer_strcat(local_buffer, w->response.header_output->buffer);
diff --git a/collectors/apps.plugin/apps_plugin.c b/collectors/apps.plugin/apps_plugin.c
index b432abb6e7..8f4f054dc1 100644
--- a/collectors/apps.plugin/apps_plugin.c
+++ b/collectors/apps.plugin/apps_plugin.c
@@ -638,9 +638,9 @@ int read_user_or_group_ids(struct user_or_group_ids *ids, struct timespec *last_
struct user_or_group_id *user_or_group_id = callocz(1, sizeof(struct user_or_group_id));
if(ids->type == USER_ID)
- user_or_group_id->id.uid = (uid_t)str2ull(id_string);
+ user_or_group_id->id.uid = (uid_t) str2ull(id_string, NULL);
else
- user_or_group_id->id.gid = (uid_t)str2ull(id_string);
+ user_or_group_id->id.gid = (uid_t) str2ull(id_string, NULL);
user_or_group_id->name = strdupz(name);
user_or_group_id->updated = 1;
@@ -1452,7 +1452,7 @@ static inline int read_proc_pid_stat(struct pid_stat *p, void *ptr) {
pid_incremental_rate(stat, p->cstime, str2kernel_uint_t(procfile_lineword(ff, 0, 16)));
// p->priority = str2kernel_uint_t(procfile_lineword(ff, 0, 17));
// p->nice = str2kernel_uint_t(procfile_lineword(ff, 0, 18));
- p->num_threads = (int32_t)str2uint32_t(procfile_lineword(ff, 0, 19));
+ p->num_threads = (int32_t) str2uint32_t(procfile_lineword(ff, 0, 19), NULL);
// p->itrealvalue = str2kernel_uint_t(procfile_lineword(ff, 0, 20));
p->collected_starttime = str2kernel_uint_t(procfile_lineword(ff, 0, 21)) / system_hz;
p->uptime = (global_uptime > p->collected_starttime)?(global_uptime - p->collected_starttime):0;
@@ -4234,7 +4234,7 @@ static void get_MemTotal(void) {
for(line = 0; line < lines ;line++) {
size_t words = procfile_linewords(ff, line);
if(words == 3 && strcmp(procfile_lineword(ff, line, 0), "MemTotal") == 0 && strcmp(procfile_lineword(ff, line, 2), "kB") == 0) {
- kernel_uint_t n = str2ull(procfile_lineword(ff, line, 1));
+ kernel_uint_t n = str2ull(procfile_lineword(ff, line, 1), NULL);
if(n) MemTotal = n;
break;
}
@@ -4289,47 +4289,41 @@ static void apps_plugin_function_processes_help(const char *transaction) {
}
#define add_table_field(wb, key, name, visible, type, visualization, transform, decimal_points, units, max, sort, sortable, sticky, unique_key, pointer_to, summary, range) do { \
- if(fields_added) buffer_strcat(wb, ","); \
- buffer_sprintf(wb, "\n \"%s\": {", key); \
- buffer_sprintf(wb, "\n \"index\":%d,", fields_added); \
- buffer_sprintf(wb, "\n \"unique_key\":%s,", (unique_key)?"true":"false"); \
- buffer_sprintf(wb, "\n \"name\":\"%s\",", name); \
- buffer_sprintf(wb, "\n \"visible\":%s,", (visible)?"true":"false"); \
- buffer_sprintf(wb, "\n \"type\":\"%s\",", type); \
- if(units) \
- buffer_sprintf(wb, "\n \"units\":\"%s\",", (char*)(units)); \
- buffer_sprintf(wb, "\n \"visualization\":\"%s\",", visualization); \
- buffer_sprintf(wb, "\n \"value_options\":{"); \
- if(units) \
- buffer_sprintf(wb, "\n \"units\":\"%s\",", (char*)(units)); \
- buffer_sprintf(wb, "\n \"transform\":\"%s\",", transform); \
- buffer_sprintf(wb, "\n \"decimal_points\":%d", decimal_points); \
- buffer_sprintf(wb, "\n },"); \
+ buffer_json_member_add_object(wb, key); \
+ buffer_json_member_add_uint64(wb, "index", fields_added); \
+ buffer_json_member_add_boolean(wb, "unique_key", unique_key); \
+ buffer_json_member_add_string(wb, "name", name); \
+ buffer_json_member_add_boolean(wb, "visible", visible); \
+ buffer_json_member_add_string(wb, "type", type); \
+ buffer_json_member_add_string_or_omit(wb, "units", (char*)(units)); \
+ buffer_json_member_add_string(wb, "visualization", visualization); \
+ buffer_json_member_add_object(wb, "value_options"); \
+ buffer_json_member_add_string_or_omit(wb, "units", (char*)(units)); \
+ buffer_json_member_add_string(wb, "transform", transform); \
+ buffer_json_member_add_uint64(wb, "decimal_points", decimal_points); \
+ buffer_json_object_close(wb); \
if(!isnan((NETDATA_DOUBLE)(max))) \
- buffer_sprintf(wb, "\n \"max\":%f,", (NETDATA_DOUBLE)(max)); \
- if(pointer_to) \
- buffer_sprintf(wb, "\n \"pointer_to\":\"%s\",", (char *)(pointer_to)); \
- buffer_sprintf(wb, "\n \"sort\":\"%s\",", sort); \
- buffer_sprintf(wb, "\n \"sortable\":%s,", (sortable)?"true":"false"); \
- buffer_sprintf(wb, "\n \"sticky\":%s,", (sticky)?"true":"false"); \
- buffer_sprintf(wb, "\n \"summary\":\"%s\",", summary); \
- buffer_sprintf(wb, "\n \"filter\":\"%s\"", (range)?"range":"multiselect"); \
- buffer_sprintf(wb, "\n }"); \
+ buffer_json_member_add_double(wb, "max", (NETDATA_DOUBLE)(max)); \
+ buffer_json_member_add_string_or_omit(wb, "pointer_to", (char *)(pointer_to)); \
+ buffer_json_member_add_string(wb, "sort", sort); \
+ buffer_json_member_add_boolean(wb, "sortable", sortable); \
+ buffer_json_member_add_boolean(wb, "sticky", sticky); \
+ buffer_json_member_add_string(wb, "summary", summary); \
+ buffer_json_member_add_string(wb, "filter", (range)?"range":"multiselect"); \
+ buffer_json_object_close(wb); \
fields_added++; \
} while(0)
#define add_value_field_llu_with_max(wb, key, value) do { \
unsigned long long _tmp = (value); \
key ## _max = (rows == 0) ? (_tmp) : MAX(key ## _max, _tmp); \
- buffer_fast_strcat(wb, ",", 1); \
- buffer_print_llu(wb, _tmp); \
+ buffer_json_add_array_item_uint64(wb, _tmp); \
} while(0)
#define add_value_field_ndd_with_max(wb, key, value) do { \
NETDATA_DOUBLE _tmp = (value); \
key ## _max = (rows == 0) ? (_tmp) : MAX(key ## _max, _tmp); \
- buffer_fast_strcat(wb, ",", 1); \
- buffer_rrd_value(wb, _tmp); \
+ buffer_json_add_array_item_double(wb, _tmp); \
} while(0)
static void apps_plugin_function_processes(const char *transaction, char *function __maybe_unused, char *line_buffer __maybe_unused, int line_max __maybe_unused, int timeout __maybe_unused) {
@@ -4406,18 +4400,12 @@ static void apps_plugin_function_processes(const char *transaction, char *functi
unsigned int io_divisor = 1024 * RATES_DETAIL;
BUFFER *wb = buffer_create(PLUGINSD_LINE_MAX, NULL);
- buffer_sprintf(wb,
- "{"
- "\n \"status\":%d"
- ",\n \"type\":\"table\""
- ",\n \"update_every\":%d"
- ",\n \"help\":\"%s\""
- ",\n \"data\":["
- "\n"
- , HTTP_RESP_OK
- , update_every
- , APPS_PLUGIN_PROCESSES_FUNCTION_DESCRIPTION
- );
+ buffer_json_initialize(wb, "\"", "\"", 0, true);
+ buffer_json_member_add_uint64(wb, "status", HTTP_RESP_OK);
+ buffer_json_member_add_string(wb, "type", "table");
+ buffer_json_member_add_time_t(wb, "update_every", update_every);
+ buffer_json_member_add_string(wb, "help", APPS_PLUGIN_PROCESSES_FUNCTION_DESCRIPTION);
+ buffer_json_member_add_array(wb, "data");
NETDATA_DOUBLE
UserCPU_max = 0.0
@@ -4493,52 +4481,41 @@ static void apps_plugin_function_processes(const char *transaction, char *functi
if(filter_gid && p->gid != gid)
continue;
- if(rows) buffer_fast_strcat(wb, ",\n", 2);
rows++;
- buffer_strcat(wb, " [");
+ buffer_json_add_array_item_array(wb);
// IMPORTANT!
// THE ORDER SHOULD BE THE SAME WITH THE FIELDS!
// pid
- buffer_print_llu(wb, p->pid);
+ buffer_json_add_array_item_uint64(wb, p->pid);
// cmd
- buffer_fast_strcat(wb, ",\"", 2);
- buffer_strcat_jsonescape(wb, p->comm);
- buffer_fast_strcat(wb, "\"", 1);
+ buffer_json_add_array_item_string(wb, p->comm);
#ifdef NETDATA_DEV_MODE
// cmdline
- buffer_fast_strcat(wb, ",\"", 2);
- buffer_strcat_jsonescape(wb, (p->cmdline && *p->cmdline) ? p->cmdline : p->comm);
- buffer_fast_strcat(wb, "\"", 1);
+ buffer_json_add_array_item_string(wb, (p->cmdline && *p->cmdline) ? p->cmdline : p->comm);
#endif
// ppid
- buffer_fast_strcat(wb, ",", 1); buffer_print_llu(wb, p->ppid);
+ buffer_json_add_array_item_uint64(wb, p->ppid);
// category
- buffer_fast_strcat(wb, ",\"", 2);
- buffer_strcat_jsonescape(wb, p->target ? p->target->name : "-");
- buffer_fast_strcat(wb, "\"", 1);
+ buffer_json_add_array_item_string(wb, p->target ? p->target->name : "-");
// user
- buffer_fast_strcat(wb, ",\"", 2);
- buffer_strcat_jsonescape(wb, p->user_target ? p->user_target->name : "-");
- buffer_fast_strcat(wb, "\"", 1);
+ buffer_json_add_array_item_string(wb, p->user_target ? p->user_target->name : "-");
// uid
- buffer_fast_strcat(wb, ",", 1); buffer_print_llu(wb, p->uid);
+ buffer_json_add_array_item_uint64(wb, p->uid);
// group
- buffer_fast_strcat(wb, ",\"", 2);
- buffer_strcat_jsonescape(wb, p->group_target ? p->group_target->name : "-");
- buffer_fast_strcat(wb, "\"", 1);
+ buffer_json_add_array_item_string(wb, p->group_target ? p->group_target->name : "-");
// gid