+static void submit (int cpu_num, derive_t *derives)
+{
+
+ int i = 0;
+ derive_t cpu_active = 0;
+ derive_t cpu_total = 0;
+ static int numcpu = 0;
+ static gauge_t percents[CPU_SUBMIT_MAX] = {
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
+ };
+ gauge_t gauges[CPU_SUBMIT_MAX] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+ };
+
+ if (cpu_num == CPU_SUBMIT_FLUSH)
+ {
+ if (report_by_cpu)
+ return;
+ for (i = 1; i < CPU_SUBMIT_MAX; i++) {
+ if (percents[i] == -1)
+ continue;
+ submit_value (-1, i, 0, percents[i] / numcpu);
+ }
+ numcpu = 0;
+ memset(percents, 0, sizeof(percents));
+ return;
+ }
+
+ if (!report_percent && report_by_cpu) {
+
+ for (i = 1; i < CPU_SUBMIT_ACTIVE; i++)
+ {
+ if (derives[i] == -1)
+ continue;
+
+ if (i != CPU_SUBMIT_IDLE)
+ cpu_active += derives[i];
+
+ submit_value(cpu_num, i, derives[i], 0);
+ }
+ submit_value(cpu_num, CPU_SUBMIT_ACTIVE, cpu_active, 0);
+ }
+ else /* we are reporting percents */
+ {
+ for (i = 1; i < CPU_SUBMIT_ACTIVE; i++) {
+ if (derives[i] == -1)
+ continue;
+ cpu_total += derives[i];
+ if (i != CPU_SUBMIT_IDLE)
+ cpu_active += derives[i];
+ }
+ derives[CPU_SUBMIT_ACTIVE] = cpu_active;
+
+ numcpu++;
+ for (i = 1; i < CPU_SUBMIT_MAX; i++) {
+ if (derives[i] == -1) {
+ percents[i] = -1;
+ continue;
+ }
+ gauges[i] = ((gauge_t)derives[i] / (gauge_t)cpu_total) * 100.0;
+
+ if (report_by_cpu)
+ {
+ submit_value (cpu_num, i, 0, gauges[i]);
+ } else if (gauges[i] != -1) {
+ percents[i] += gauges[i];
+ }
+ }
+ }
+}
+