X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=src%2Fplugin_proc.c;fp=src%2Fplugin_proc.c;h=9b66b7c28cb92c97cb61248668272da2ed5658e5;hb=61b0832e4bc7ea2867245bfd2ebf006f02da6dd7;hp=bf0e6fb0df75d62e047009f37ac0c2fa735cd250;hpb=cb3a27038b8a6e332d76b9c9b30f1b752d998ab6;p=netdata.git diff --git a/src/plugin_proc.c b/src/plugin_proc.c index bf0e6fb0..9b66b7c2 100644 --- a/src/plugin_proc.c +++ b/src/plugin_proc.c @@ -29,6 +29,7 @@ static struct proc_module { { .name = "/proc/meminfo", .dim = "meminfo", .func = do_proc_meminfo }, { .name = "/sys/kernel/mm/ksm", .dim = "ksm", .func = do_sys_kernel_mm_ksm }, { .name = "/sys/devices/system/edac/mc", .dim = "ecc", .func = do_proc_sys_devices_system_edac_mc }, + { .name = "/sys/devices/system/node", .dim = "numa", .func = do_proc_sys_devices_system_node }, // network metrics { .name = "/proc/net/dev", .dim = "netdev", .func = do_proc_net_dev }, @@ -151,3 +152,37 @@ void *proc_main(void *ptr) { pthread_exit(NULL); return NULL; } + +int get_numa_node_count(void) +{ + static int numa_node_count = -1; + + if (numa_node_count != -1) + return numa_node_count; + + numa_node_count = 0; + + char name[FILENAME_MAX + 1]; + snprintfz(name, FILENAME_MAX, "%s%s", global_host_prefix, "/sys/devices/system/node"); + char *dirname = config_get("plugin:proc:/sys/devices/system/node", "directory to monitor", name); + + DIR *dir = opendir(dirname); + if(dir) { + struct dirent *de = NULL; + while((de = readdir(dir))) { + if(de->d_type != DT_DIR) + continue; + + if(strncmp(de->d_name, "node", 4) != 0) + continue; + + if(!isdigit(de->d_name[4])) + continue; + + numa_node_count++; + } + closedir(dir); + } + + return numa_node_count; +}