4 #define MODULE_NAME "load"
9 #ifdef HAVE_SYS_LOADAVG_H
10 #include <sys/loadavg.h>
13 #ifdef HAVE_GETLOADAVG
14 #if !defined(LOADAVG_1MIN) || !defined(LOADAVG_5MIN) || !defined(LOADAVG_15MIN)
15 #define LOADAVG_1MIN 0
16 #define LOADAVG_5MIN 1
17 #define LOADAVG_15MIN 2
19 #endif /* defined(HAVE_GETLOADAVG) */
21 static char *load_file = "load.rrd";
23 static char *ds_def[] =
25 "DS:shortterm:GAUGE:25:0:100",
26 "DS:midterm:GAUGE:25:0:100",
27 "DS:longterm:GAUGE:25:0:100",
30 static int ds_num = 3;
32 extern time_t curtime;
39 void load_write (char *host, char *inst, char *val)
41 rrd_update_file (host, load_file, val, ds_def, ds_num);
45 void load_submit (double snum, double mnum, double lnum)
49 if (snprintf (buf, BUFSIZE, "%u:%.2f:%.2f:%.2f", (unsigned int) curtime,
50 snum, mnum, lnum) >= BUFSIZE)
53 plugin_submit (MODULE_NAME, "-", buf);
59 #if defined(HAVE_GETLOADAVG)
62 if (getloadavg (load, 3) == 3)
63 load_submit (load[LOADAVG_1MIN], load[LOADAVG_5MIN], load[LOADAVG_15MIN]);
65 syslog (LOG_WARNING, "load: getloadavg failed: %s", strerror (errno));
66 /* #endif HAVE_GETLOADAVG */
68 #elif defined(KERNEL_LINUX)
69 double snum, mnum, lnum;
76 if ((loadavg = fopen ("/proc/loadavg", "r")) == NULL)
78 syslog (LOG_WARNING, "load: fopen: %s", strerror (errno));
82 if (fgets (buffer, 16, loadavg) == NULL)
84 syslog (LOG_WARNING, "load: fgets: %s", strerror (errno));
89 syslog (LOG_WARNING, "load: fclose: %s", strerror (errno));
91 numfields = strsplit (buffer, fields, 8);
96 snum = atof (fields[0]);
97 mnum = atof (fields[1]);
98 lnum = atof (fields[2]);
100 load_submit (snum, mnum, lnum);
101 /* #endif KERNEL_LINUX */
103 #elif defined(HAVE_LIBSTATGRAB)
104 double snum, mnum, lnum;
107 if ((ls = sg_get_load_stats ()) == NULL)
114 load_submit (snum, mnum, lnum);
115 #endif /* HAVE_LIBSTATGRAB */
118 void module_register (void)
120 plugin_register (MODULE_NAME, load_init, load_read, load_write);
124 #endif /* COLLECT_LOAD */