- /* Gather memory Utilization */
- ret = MicGetMemoryUtilization(micHandle,&mem_total,&mem_used,&mem_bufs);
- if (ret != MIC_ACCESS_API_SUCCESS) {
- ERROR("Problem getting Memory Utilization: %s",MicGetErrorString(ret));
- error=3;
- break;
- }
- /* API reprots KB's of memory, adjust for this */
- mic_submit_memory_use(i,"total",mem_total*1024);
- mic_submit_memory_use(i,"used",mem_used*1024);
- mic_submit_memory_use(i,"bufs",mem_bufs*1024);
- /*INFO("Memory Read: %u %u %u",mem_total,mem_used,mem_bufs);*/
-
- /* Gather Temperature Information */
- bufferSize = sizeof(U32);
- tempBuffer = malloc(bufferSize);
- for (j=0;j<NUM_THERMS;j++) {
- ret = MicGetTemperature(micHandle,therms[j],tempBuffer,&bufferSize);
- if (ret != MIC_ACCESS_API_SUCCESS) {
- ERROR("Problem getting Temperature(%d) %s",j,MicGetErrorString(ret));
- error=4;
- break;
- }
- /*INFO("Temp Read: %u: %u %s",j,tempBuffer[0],thermNames[j]);*/
- mic_submit_temp(i,thermNames[j],tempBuffer[0]);
- }
- if (error)
- break;
-
- ret = MicCloseAdapter(micHandle);
+static void mic_submit_cpu(int micnumber, const char *type_instance,
+ int core, derive_t value)
+{
+ value_list_t vl = VALUE_LIST_INIT;
+
+ vl.values = &(value_t) { .derive = value };
+ vl.values_len = 1;
+
+ strncpy (vl.host, hostname_g, sizeof (vl.host));
+ strncpy (vl.plugin, "mic", sizeof (vl.plugin));
+ if (core < 0) /* global aggregation */
+ ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance),
+ "%i", micnumber);
+ else /* per-core statistics */
+ ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance),
+ "%i-cpu-%i", micnumber, core);
+ strncpy (vl.type, "cpu", sizeof (vl.type));
+ strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
+
+ plugin_dispatch_values (&vl);
+}
+
+/*Gather CPU Utilization Information */
+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);