# endif
#endif /* HAVE_SYSCTLBYNAME */
+#ifdef __OpenBSD__
+# ifdef HAVE_SYS_SYSCTL_H
+# include <sys/sysctl.h>
+# endif
+
+# ifdef HAVE_SYS_DKSTAT_H
+# include <sys/dkstat.h>
+# endif
+#endif /* __OpenBSD__ */
+
#if HAVE_STATGRAB_H
# include <statgrab.h>
#endif
#if !PROCESSOR_CPU_LOAD_INFO && !KERNEL_LINUX && !HAVE_LIBKSTAT \
- && !HAVE_SYSCTLBYNAME && !HAVE_LIBSTATGRAB
+ && !HAVE_SYSCTLBYNAME && !HAVE_LIBSTATGRAB && !__OpenBSD__
# error "No applicable input method."
#endif
static int numcpu;
/* #endif HAVE_LIBKSTAT */
-#elif defined(HAVE_SYSCTLBYNAME)
+#elif defined(HAVE_SYSCTLBYNAME) || __OpenBSD__
static int numcpu;
/* #endif HAVE_SYSCTLBYNAME */
NOTICE ("cpu: Only one processor supported when using `sysctlbyname' (found %i)", numcpu);
/* #endif HAVE_SYSCTLBYNAME */
+#elif defined __OpenBSD__
+ size_t numcpu_size;
+ int mib[2] = {CTL_HW, HW_NCPU};
+
+ numcpu_size = sizeof (numcpu);
+
+ if (sysctl (mib, 2, &numcpu, &numcpu_size, NULL, 0) < 0)
+ {
+ char errbuf[1024];
+ WARNING ("cpu plugin: sysctl: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+/* #endif __OpenBSD__ */
+
#elif defined(HAVE_LIBSTATGRAB)
/* nothing to initialize */
#endif /* HAVE_LIBSTATGRAB */
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)
}
/* #endif defined(HAVE_LIBKSTAT) */
+#elif defined __OpenBSD__
+ int64_t cpuinfo[numcpu][CPUSTATES];
+ size_t cpuinfo_size;
+ int i;
+
+ if (numcpu > 1) {
+ cpuinfo_size = CPUSTATES * sizeof(int64_t);
+
+ for (i = 0; i < numcpu; i++) {
+ int mib[] = {CTL_KERN, KERN_CPTIME2, i};
+
+ if (sysctl(mib, 3, cpuinfo[i], &cpuinfo_size, NULL, 0) < 0) {
+ char errbuf[1024];
+ ERROR ("cpu plugin: sysctl failed: %s.",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+ }
+ } else {
+ int mib[] = {CTL_KERN, KERN_CPTIME};
+ long cpuinfo_tmp[CPUSTATES];
+
+ cpuinfo_size = sizeof(cpuinfo_tmp);
+
+ if (sysctl(mib, 2, &cpuinfo_tmp, &cpuinfo_size, NULL, 0) < 0)
+ {
+ char errbuf[1024];
+ ERROR ("cpu plugin: sysctl failed: %s.",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+ for(i = 0; i < CPUSTATES; i++) {
+ cpuinfo[0][i] = cpuinfo_tmp[i];
+ }
+ }
+
+ for (i = 0; i < numcpu; i++) {
+ submit (i, "user", cpuinfo[i][CP_USER]);
+ submit (i, "nice", cpuinfo[i][CP_NICE]);
+ submit (i, "system", cpuinfo[i][CP_SYS]);
+ submit (i, "idle", cpuinfo[i][CP_IDLE]);
+ submit (i, "interrupt", cpuinfo[i][CP_INTR]);
+ }
+/* #endif __OpenBSD__ */
+
#elif defined(HAVE_SYSCTLBYNAME)
long cpuinfo[CPUSTATES];
size_t cpuinfo_size;
return (-1);
}
- 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]);
+ submit (0, "interrupt", cpuinfo[CP_INTR]);
/* #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);
+ 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);