From 1e6c93250172946eeb38e94a92a1fd12c9d3011e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 7 Nov 2018 13:22:44 +0100 Subject: Merging upstream version 1.11.0+dfsg. Signed-off-by: Daniel Baumann --- src/sys_devices_system_edac_mc.c | 204 --------------------------------------- 1 file changed, 204 deletions(-) delete mode 100644 src/sys_devices_system_edac_mc.c (limited to 'src/sys_devices_system_edac_mc.c') diff --git a/src/sys_devices_system_edac_mc.c b/src/sys_devices_system_edac_mc.c deleted file mode 100644 index caa16192e..000000000 --- a/src/sys_devices_system_edac_mc.c +++ /dev/null @@ -1,204 +0,0 @@ -#include "common.h" - -struct mc { - char *name; - char ce_updated; - char ue_updated; - - char *ce_count_filename; - char *ue_count_filename; - - procfile *ce_ff; - procfile *ue_ff; - - collected_number ce_count; - collected_number ue_count; - - RRDDIM *ce_rd; - RRDDIM *ue_rd; - - struct mc *next; -}; -static struct mc *mc_root = NULL; - -static void find_all_mc() { - char name[FILENAME_MAX + 1]; - snprintfz(name, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/sys/devices/system/edac/mc"); - char *dirname = config_get("plugin:proc:/sys/devices/system/edac/mc", "directory to monitor", name); - - DIR *dir = opendir(dirname); - if(unlikely(!dir)) { - error("Cannot read ECC memory errors directory '%s'", dirname); - return; - } - - struct dirent *de = NULL; - while((de = readdir(dir))) { - if(de->d_type == DT_DIR && de->d_name[0] == 'm' && de->d_name[1] == 'c' && isdigit(de->d_name[2])) { - struct mc *m = callocz(1, sizeof(struct mc)); - m->name = strdupz(de->d_name); - - struct stat st; - - snprintfz(name, FILENAME_MAX, "%s/%s/ce_count", dirname, de->d_name); - if(stat(name, &st) != -1) - m->ce_count_filename = strdupz(name); - - snprintfz(name, FILENAME_MAX, "%s/%s/ue_count", dirname, de->d_name); - if(stat(name, &st) != -1) - m->ue_count_filename = strdupz(name); - - if(!m->ce_count_filename && !m->ue_count_filename) { - freez(m->name); - freez(m); - } - else { - m->next = mc_root; - mc_root = m; - } - } - } - - closedir(dir); -} - -int do_proc_sys_devices_system_edac_mc(int update_every, usec_t dt) { - (void)dt; - - if(unlikely(mc_root == NULL)) { - find_all_mc(); - if(unlikely(mc_root == NULL)) - return 1; - } - - static int do_ce = -1, do_ue = -1; - calculated_number ce_sum = 0, ue_sum = 0; - struct mc *m; - - if(unlikely(do_ce == -1)) { - do_ce = config_get_boolean_ondemand("plugin:proc:/sys/devices/system/edac/mc", "enable ECC memory correctable errors", CONFIG_BOOLEAN_AUTO); - do_ue = config_get_boolean_ondemand("plugin:proc:/sys/devices/system/edac/mc", "enable ECC memory uncorrectable errors", CONFIG_BOOLEAN_AUTO); - } - - if(do_ce != CONFIG_BOOLEAN_NO) { - for(m = mc_root; m; m = m->next) { - if(m->ce_count_filename) { - m->ce_updated = 0; - - if(unlikely(!m->ce_ff)) { - m->ce_ff = procfile_open(m->ce_count_filename, " \t", PROCFILE_FLAG_DEFAULT); - if(unlikely(!m->ce_ff)) - continue; - } - - m->ce_ff = procfile_readall(m->ce_ff); - if(unlikely(!m->ce_ff || procfile_lines(m->ce_ff) < 1 || procfile_linewords(m->ce_ff, 0) < 1)) - continue; - - m->ce_count = str2ull(procfile_lineword(m->ce_ff, 0, 0)); - ce_sum += m->ce_count; - m->ce_updated = 1; - } - } - } - - if(do_ue != CONFIG_BOOLEAN_NO) { - for(m = mc_root; m; m = m->next) { - if(m->ue_count_filename) { - m->ue_updated = 0; - - if(unlikely(!m->ue_ff)) { - m->ue_ff = procfile_open(m->ue_count_filename, " \t", PROCFILE_FLAG_DEFAULT); - if(unlikely(!m->ue_ff)) - continue; - } - - m->ue_ff = procfile_readall(m->ue_ff); - if(unlikely(!m->ue_ff || procfile_lines(m->ue_ff) < 1 || procfile_linewords(m->ue_ff, 0) < 1)) - continue; - - m->ue_count = str2ull(procfile_lineword(m->ue_ff, 0, 0)); - ue_sum += m->ue_count; - m->ue_updated = 1; - } - } - } - - // -------------------------------------------------------------------- - - if(do_ce == CONFIG_BOOLEAN_YES || (do_ce == CONFIG_BOOLEAN_AUTO && ce_sum > 0)) { - do_ce = CONFIG_BOOLEAN_YES; - - static RRDSET *ce_st = NULL; - - if(unlikely(!ce_st)) { - ce_st = rrdset_create_localhost( - "mem" - , "ecc_ce" - , NULL - , "ecc" - , NULL - , "ECC Memory Correctable Errors" - , "errors" - , "proc" - , "/sys/devices/system/edac/mc" - , NETDATA_CHART_PRIO_MEM_HW + 50 - , update_every - , RRDSET_TYPE_LINE - ); - } - else - rrdset_next(ce_st); - - for(m = mc_root; m; m = m->next) { - if (m->ce_count_filename && m->ce_updated) { - if(unlikely(!m->ce_rd)) - m->ce_rd = rrddim_add(ce_st, m->name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - - rrddim_set_by_pointer(ce_st, m->ce_rd, m->ce_count); - } - } - - rrdset_done(ce_st); - } - - // -------------------------------------------------------------------- - - if(do_ue == CONFIG_BOOLEAN_YES || (do_ue == CONFIG_BOOLEAN_AUTO && ue_sum > 0)) { - do_ue = CONFIG_BOOLEAN_YES; - - static RRDSET *ue_st = NULL; - - if(unlikely(!ue_st)) { - ue_st = rrdset_create_localhost( - "mem" - , "ecc_ue" - , NULL - , "ecc" - , NULL - , "ECC Memory Uncorrectable Errors" - , "errors" - , "proc" - , "/sys/devices/system/edac/mc" - , NETDATA_CHART_PRIO_MEM_HW + 60 - , update_every - , RRDSET_TYPE_LINE - ); - } - else - rrdset_next(ue_st); - - for(m = mc_root; m; m = m->next) { - if (m->ue_count_filename && m->ue_updated) { - if(unlikely(!m->ue_rd)) - m->ue_rd = rrddim_add(ue_st, m->name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - - rrddim_set_by_pointer(ue_st, m->ue_rd, m->ue_count); - } - } - - rrdset_done(ue_st); - } - - return 0; -} -- cgit v1.2.3