X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcpu.c;h=e9ab78320d4523848274f726eb42e2bb87eb030f;hb=074b4980bc75bea6826e6a38dcc6e193a721b2a8;hp=ba0c1b1a2880db85195a77b6bf67c7a82edc5dc6;hpb=e6fc1600ee7bcde75c95db9b1f617caf78fc4c6a;p=collectd.git diff --git a/src/cpu.c b/src/cpu.c index ba0c1b1a..e9ab7832 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -68,7 +68,12 @@ # endif #endif /* HAVE_SYSCTLBYNAME */ -#if !PROCESSOR_CPU_LOAD_INFO && !KERNEL_LINUX && !HAVE_LIBKSTAT && !HAVE_SYSCTLBYNAME +#if HAVE_STATGRAB_H +# include +#endif + +#if !PROCESSOR_CPU_LOAD_INFO && !KERNEL_LINUX && !HAVE_LIBKSTAT \ + && !HAVE_SYSCTLBYNAME && !HAVE_LIBSTATGRAB # error "No applicable input method." #endif @@ -98,7 +103,11 @@ static int numcpu; #elif defined(HAVE_SYSCTLBYNAME) static int numcpu; -#endif /* HAVE_SYSCTLBYNAME */ +/* #endif HAVE_SYSCTLBYNAME */ + +#elif defined(HAVE_LIBSTATGRAB) +/* no variables needed */ +#endif /* HAVE_LIBSTATGRAB */ static int init (void) { @@ -152,7 +161,11 @@ static int init (void) if (numcpu != 1) NOTICE ("cpu: Only one processor supported when using `sysctlbyname' (found %i)", numcpu); -#endif +/* #endif HAVE_SYSCTLBYNAME */ + +#elif defined(HAVE_LIBSTATGRAB) + /* nothing to initialize */ +#endif /* HAVE_LIBSTATGRAB */ return (0); } /* int init */ @@ -167,14 +180,14 @@ static void submit (int cpu_num, const char *type_instance, counter_t value) vl.values = values; vl.values_len = 1; vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "cpu"); - snprintf (vl.plugin_instance, sizeof (vl.type_instance), + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "cpu", sizeof (vl.plugin)); + ssnprintf (vl.plugin_instance, sizeof (vl.type_instance), "%i", cpu_num); - vl.plugin_instance[DATA_MAX_NAME_LEN - 1] = '\0'; - strcpy (vl.type_instance, type_instance); + sstrncpy (vl.type, "cpu", sizeof (vl.type)); + sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); - plugin_dispatch_values ("cpu", &vl); + plugin_dispatch_values (&vl); } static int cpu_read (void) @@ -277,20 +290,14 @@ static int cpu_read (void) char *fields[9]; int numfields; - static complain_t complain_obj; - if ((fh = fopen ("/proc/stat", "r")) == NULL) { char errbuf[1024]; - plugin_complain (LOG_ERR, &complain_obj, "cpu plugin: " - "fopen (/proc/stat) failed: %s", + ERROR ("cpu plugin: fopen (/proc/stat) failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); return (-1); } - plugin_relief (LOG_NOTICE, &complain_obj, "cpu plugin: " - "fopen (/proc/stat) succeeded."); - while (fgets (buf, 1024, fh) != NULL) { if (strncmp (buf, "cpu", 3)) @@ -360,29 +367,41 @@ static int cpu_read (void) long cpuinfo[CPUSTATES]; size_t cpuinfo_size; - static complain_t complain_obj; - cpuinfo_size = sizeof (cpuinfo); if (sysctlbyname("kern.cp_time", &cpuinfo, &cpuinfo_size, NULL, 0) < 0) { char errbuf[1024]; - plugin_complain (LOG_ERR, &complain_obj, "cpu plugin: " - "sysctlbyname failed: %s.", + ERROR ("cpu plugin: sysctlbyname failed: %s.", sstrerror (errno, errbuf, sizeof (errbuf))); return (-1); } - plugin_relief (LOG_NOTICE, &complain_obj, "cpu plugin: " - "sysctlbyname succeeded."); - cpuinfo[CP_SYS] += cpuinfo[CP_INTR]; submit (0, "user", cpuinfo[CP_USER]); submit (0, "nice", cpuinfo[CP_NICE]); submit (0, "system", cpuinfo[CP_SYS]); submit (0, "idle", cpuinfo[CP_IDLE]); -#endif +/* #endif HAVE_SYSCTLBYNAME */ + +#elif defined(HAVE_LIBSTATGRAB) + sg_cpu_stats *cs; + cs = sg_get_cpu_stats (); + + if (cs == NULL) + { + ERROR ("cpu plugin: sg_get_cpu_stats failed."); + return (-1); + } + + submit (0, "idle", (counter_t) cs->idle); + submit (0, "nice", (counter_t) cs->nice); + submit (0, "swap", (counter_t) cs->swap); + submit (0, "system", (counter_t) cs->kernel); + submit (0, "user", (counter_t) cs->user); + submit (0, "wait", (counter_t) cs->iowait); +#endif /* HAVE_LIBSTATGRAB */ return (0); }