proc_sys_kernel_random_entropy_avail.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "plugin_proc.h"
  3. int do_proc_sys_kernel_random_entropy_avail(int update_every, usec_t dt) {
  4. (void)dt;
  5. static procfile *ff = NULL;
  6. if(unlikely(!ff)) {
  7. char filename[FILENAME_MAX + 1];
  8. snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/sys/kernel/random/entropy_avail");
  9. ff = procfile_open(config_get("plugin:proc:/proc/sys/kernel/random/entropy_avail", "filename to monitor", filename), "", PROCFILE_FLAG_DEFAULT);
  10. if(unlikely(!ff)) return 1;
  11. }
  12. ff = procfile_readall(ff);
  13. if(unlikely(!ff)) return 0; // we return 0, so that we will retry to open it next time
  14. unsigned long long entropy = str2ull(procfile_lineword(ff, 0, 0));
  15. static RRDSET *st = NULL;
  16. static RRDDIM *rd = NULL;
  17. if(unlikely(!st)) {
  18. st = rrdset_create_localhost(
  19. "system"
  20. , "entropy"
  21. , NULL
  22. , "entropy"
  23. , NULL
  24. , "Available Entropy"
  25. , "entropy"
  26. , PLUGIN_PROC_NAME
  27. , "/proc/sys/kernel/random/entropy_avail"
  28. , NETDATA_CHART_PRIO_SYSTEM_ENTROPY
  29. , update_every
  30. , RRDSET_TYPE_LINE
  31. );
  32. rd = rrddim_add(st, "entropy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  33. }
  34. else rrdset_next(st);
  35. rrddim_set_by_pointer(st, rd, entropy);
  36. rrdset_done(st);
  37. return 0;
  38. }