Add metrics displayed by "sar -m USB" (USB devices) to PCP archive.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
.f_json_print = json_print_pwr_usb_stats,
.f_svg_print = NULL,
.f_raw_print = raw_print_pwr_usb_stats,
+ .f_pcp_print = pcp_print_pwr_usb_stats,
.f_count_new = NULL,
.item_list = NULL,
.desc = "USB devices",
#endif /* HAVE_PCP */
}
+/*
+ ***************************************************************************
+ * Define PCP metrics for USB devices statistics.
+ *
+ * IN:
+ * @a Activity structure with statistics.
+ ***************************************************************************
+ */
+void pcp_def_pwr_usb_metrics(struct activity *a)
+{
+#ifdef HAVE_PCP
+ int inst = 0;
+ static pmInDom indom = PM_INDOM_NULL;
+ char buf[16];
+
+ if (indom == PM_INDOM_NULL) {
+ /* Create domain */
+ indom = pmInDom_build(0, PM_INDOM_USB);
+
+ for (inst = 0; inst < a->item_list_sz; inst++) {
+ sprintf(buf, "usb%d", inst);
+ pmiAddInstance(indom,buf, inst);
+ }
+ }
+
+ pmiAddMetric("power.usb.bus",
+ PM_IN_NULL, PM_TYPE_U32, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+
+ pmiAddMetric("power.usb.vendorId",
+ PM_IN_NULL, PM_TYPE_STRING, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+
+ pmiAddMetric("power.usb.productId",
+ PM_IN_NULL, PM_TYPE_STRING, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+
+ pmiAddMetric("power.usb.maxpower",
+ PM_IN_NULL, PM_TYPE_U32, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+
+ pmiAddMetric("power.usb.manufacturer",
+ PM_IN_NULL, PM_TYPE_STRING, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+
+ pmiAddMetric("power.usb.productName",
+ PM_IN_NULL, PM_TYPE_STRING, indom, PM_SEM_DISCRETE,
+ pmiUnits(0, 0, 0, 0, 0, 0));
+#endif /* HAVE_PCP */
+}
+
/*
***************************************************************************
* Define PCP metrics for filesystem statistics.
void pcp_def_net_eicmp6_metrics(void);
void pcp_def_net_udp6_metrics(void);
void pcp_def_huge_metrics(void);
+void pcp_def_pwr_usb_metrics(struct activity *);
void pcp_def_filesystem_metrics(struct activity *);
void pcp_def_fchost_metrics(struct activity *);
#define PM_INDOM_INT 4
#define PM_INDOM_FILESYSTEM 5
#define PM_INDOM_FCHOST 6
+#define PM_INDOM_USB 7
#endif /* _PCP_DEF_METRICS_H */
#endif /* HAVE_PCP */
}
+/*
+ ***************************************************************************
+ * Display USB devices in PCP format.
+ *
+ * IN:
+ * @a Activity structure with statistics.
+ * @curr Index in array for current sample statistics.
+ * @itv Interval of time in 1/100th of a second.
+ * @record_hdr Record header for current sample.
+ ***************************************************************************
+ */
+__print_funct_t pcp_print_pwr_usb_stats(struct activity *a, int curr, unsigned long long itv,
+ struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+ int i;
+ struct stats_pwr_usb *suc;
+ char buf[64], instance[32];
+
+ for (i = 0; i < a->nr[curr]; i++) {
+
+ suc = (struct stats_pwr_usb *) ((char *) a->buf[curr] + i * a->msize);
+ sprintf(instance, "usb%d", i);
+
+ snprintf(buf, sizeof(buf), "%d", suc->bus_nr);
+ pmiPutValue("power.usb.bus", instance, buf);
+
+ snprintf(buf, sizeof(buf), "%x", suc->vendor_id);
+ pmiPutValue("power.usb.vendorId", instance, buf);
+
+ snprintf(buf, sizeof(buf), "%x", suc->product_id);
+ pmiPutValue("power.usb.productId", instance, buf);
+
+ snprintf(buf, sizeof(buf), "%u", suc->bmaxpower << 1);
+ pmiPutValue("power.usb.maxpower", instance, buf);
+
+ snprintf(buf, sizeof(buf), "%s", suc->manufacturer);
+ pmiPutValue("power.usb.manufacturer", instance, buf);
+
+ snprintf(buf, sizeof(buf), "%s", suc->product);
+ pmiPutValue("power.usb.productName", instance, buf);
+ }
+#endif /* HAVE_PCP */
+}
+
/*
***************************************************************************
* Display filesystem statistics in PCP format.
(struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_huge_stats
(struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_pwr_usb_stats
+ (struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_filesystem_stats
(struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_fchost_stats
pcp_def_huge_metrics();
break;
+ case A_PWR_USB:
+ pcp_def_pwr_usb_metrics(act[p]);
+ break;
+
case A_FS:
pcp_def_filesystem_metrics(act[p]);
break;