-static int mic_read_cpu(int mic)
-{
- U32 ret;
- U32 buffer_size;
- int j;
- MicCoreUtil core_util;
- MicCoreJiff core_jiffs[MAX_CORES];
-
- buffer_size=MAX_CORES*sizeof(MicCoreJiff);
- ret = MicGetCoreUtilization(mic_handle,&core_util,core_jiffs,&buffer_size);
- if (ret != MIC_ACCESS_API_SUCCESS) {
- ERROR("Problem getting CPU utilization: %s",MicGetErrorString(ret));
- return(0);
- }
- if (show_total_cpu) {
- mic_submit_cpu(mic,"user",-1,core_util.sum.user);
- mic_submit_cpu(mic,"sys",-1,core_util.sum.sys);
- mic_submit_cpu(mic,"nice",-1,core_util.sum.nice);
- mic_submit_cpu(mic,"idle",-1,core_util.sum.idle);
- }
- if (show_per_cpu) {
- for (j=0;j<core_util.core;j++) {
- mic_submit_cpu(mic,"user",j,core_jiffs[j].user);
- mic_submit_cpu(mic,"sys",j,core_jiffs[j].sys);
- mic_submit_cpu(mic,"nice",j,core_jiffs[j].nice);
- mic_submit_cpu(mic,"idle",j,core_jiffs[j].idle);
- }
- }
- return (0);
+static int mic_read_cpu(int mic) {
+ MicCoreUtil core_util;
+ MicCoreJiff core_jiffs[MAX_CORES];
+ U32 core_jiffs_size;
+ U32 status;
+
+ core_jiffs_size = MAX_CORES * sizeof(MicCoreJiff);
+ status = MicGetCoreUtilization(mic_handle, &core_util, core_jiffs,
+ &core_jiffs_size);
+ if (status != MIC_ACCESS_API_SUCCESS) {
+ ERROR("mic plugin: Problem getting CPU utilization: %s",
+ MicGetErrorString(status));
+ return (-1);
+ }
+
+ if (show_cpu) {
+ mic_submit_cpu(mic, "user", -1, core_util.sum.user);
+ mic_submit_cpu(mic, "sys", -1, core_util.sum.sys);
+ mic_submit_cpu(mic, "nice", -1, core_util.sum.nice);
+ mic_submit_cpu(mic, "idle", -1, core_util.sum.idle);
+ }
+
+ if (show_cpu_cores) {
+ for (int j = 0; j < core_util.core; j++) {
+ mic_submit_cpu(mic, "user", j, core_jiffs[j].user);
+ mic_submit_cpu(mic, "sys", j, core_jiffs[j].sys);
+ mic_submit_cpu(mic, "nice", j, core_jiffs[j].nice);
+ mic_submit_cpu(mic, "idle", j, core_jiffs[j].idle);
+ }
+ }
+ return (0);
+}
+
+static void mic_submit_power(int micnumber, const char *type,
+ const char *type_instance, gauge_t value) {
+ value_list_t vl = VALUE_LIST_INIT;
+
+ vl.values = &(value_t){.gauge = value};
+ vl.values_len = 1;
+
+ strncpy(vl.host, hostname_g, sizeof(vl.host));
+ strncpy(vl.plugin, "mic", sizeof(vl.plugin));
+ ssnprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%i", micnumber);
+ strncpy(vl.type, type, sizeof(vl.type));
+ strncpy(vl.type_instance, type_instance, sizeof(vl.type_instance));
+
+ plugin_dispatch_values(&vl);
+}
+
+/* Gather Power Information */
+static int mic_read_power(int mic) {
+ U32 ret;
+ MicPwrUsage power_use;
+
+ ret = MicGetPowerUsage(mic_handle, &power_use);
+ if (ret != MIC_ACCESS_API_SUCCESS) {
+ ERROR("mic plugin: Problem getting Power Usage: %s",
+ MicGetErrorString(ret));
+ return (1);
+ }
+
+/* power is in uWatts, current in mA, voltage in uVolts.. convert to
+ * base unit */
+#define SUB_POWER(name) \
+ do { \
+ if (ignorelist_match(power_ignore, #name) == 0) \
+ mic_submit_power(mic, "power", #name, \
+ (gauge_t)power_use.name.prr * 0.000001); \
+ } while (0)
+#define SUB_VOLTS(name) \
+ do { \
+ if (ignorelist_match(power_ignore, #name) == 0) { \
+ mic_submit_power(mic, "power", #name, \
+ (gauge_t)(power_use.name.pwr * 0.000001)); \
+ mic_submit_power(mic, "current", #name, \
+ (gauge_t)(power_use.name.cur * 0.001)); \
+ mic_submit_power(mic, "voltage", #name, \
+ (gauge_t)(power_use.name.volt * 0.000001)); \
+ } \
+ } while (0)
+
+ SUB_POWER(total0);
+ SUB_POWER(total1);
+ SUB_POWER(inst);
+ SUB_POWER(imax);
+ SUB_POWER(pcie);
+ SUB_POWER(c2x3);
+ SUB_POWER(c2x4);
+ SUB_VOLTS(vccp);
+ SUB_VOLTS(vddg);
+ SUB_VOLTS(vddq);
+
+ return (0);