| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #include "plugin_proc.h" |
| 4 | |
| 5 | int do_proc_sys_fs_file_nr(int update_every, usec_t dt) { |
| 6 | (void)dt; |
| 7 | |
| 8 | static procfile *ff = NULL; |
| 9 | |
| 10 | if(unlikely(!ff)) { |
| 11 | char filename[FILENAME_MAX + 1]; |
| 12 | snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/sys/fs/file-nr"); |
| 13 | ff = procfile_open(inicfg_get(&netdata_config, "plugin:proc:/proc/sys/fs/file-nr", "filename to monitor", filename), "", PROCFILE_FLAG_DEFAULT); |
| 14 | if(unlikely(!ff)) return 1; |
| 15 | } |
| 16 | |
| 17 | ff = procfile_readall(ff); |
| 18 | if(unlikely(!ff)) return 0; // we return 0, so that we will retry to open it next time |
| 19 | |
| 20 | uint64_t allocated = str2ull(procfile_lineword(ff, 0, 0), NULL); |
| 21 | uint64_t unused = str2ull(procfile_lineword(ff, 0, 1), NULL); |
| 22 | uint64_t max = str2ull(procfile_lineword(ff, 0, 2), NULL); |
| 23 | |
| 24 | uint64_t used = allocated - unused; |
| 25 | |
| 26 | static RRDSET *st_files = NULL; |
| 27 | static RRDDIM *rd_used = NULL; |
| 28 | |
| 29 | if(unlikely(!st_files)) { |
| 30 | st_files = rrdset_create_localhost( |
| 31 | "system" |
| 32 | , "file_nr_used" |
| 33 | , NULL |
| 34 | , "files" |
| 35 | , NULL |
| 36 | , "File Descriptors" |
| 37 | , "files" |
| 38 | , PLUGIN_PROC_NAME |
| 39 | , "/proc/sys/fs/file-nr" |
| 40 | , NETDATA_CHART_PRIO_SYSTEM_FILES_NR |
| 41 | , update_every |
| 42 | , RRDSET_TYPE_LINE |
| 43 | ); |
| 44 | |
| 45 | rd_used = rrddim_add(st_files, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); |
| 46 | } |
| 47 | |
| 48 | rrddim_set_by_pointer(st_files, rd_used, (collected_number )used); |
| 49 | rrdset_done(st_files); |
| 50 | |
| 51 | static RRDSET *st_files_utilization = NULL; |
| 52 | static RRDDIM *rd_utilization = NULL; |
| 53 | |
| 54 | if(unlikely(!st_files_utilization)) { |
| 55 | st_files_utilization = rrdset_create_localhost( |
| 56 | "system" |
| 57 | , "file_nr_utilization" |
| 58 | , NULL |
| 59 | , "files" |
| 60 | , NULL |
| 61 | , "File Descriptors Utilization" |
| 62 | , "percentage" |
| 63 | , PLUGIN_PROC_NAME |
| 64 | , "/proc/sys/fs/file-nr" |
| 65 | , NETDATA_CHART_PRIO_SYSTEM_FILES_NR + 1 |
| 66 | , update_every |
| 67 | , RRDSET_TYPE_LINE |
| 68 | ); |
| 69 | |
| 70 | rd_utilization = rrddim_add(st_files_utilization, "utilization", NULL, 1, 10000, RRD_ALGORITHM_ABSOLUTE); |
| 71 | } |
| 72 | |
| 73 | NETDATA_DOUBLE d_used = (NETDATA_DOUBLE)used; |
| 74 | NETDATA_DOUBLE d_max = (NETDATA_DOUBLE)max; |
| 75 | NETDATA_DOUBLE percent = d_used * 100.0 / d_max; |
| 76 | |
| 77 | rrddim_set_by_pointer(st_files_utilization, rd_utilization, (collected_number)(percent * 10000)); |
| 78 | rrdset_done(st_files_utilization); |
| 79 | |
| 80 | return 0; |
| 81 | } |