.f_json_print = json_print_net_nfs_stats,
.f_svg_print = svg_print_net_nfs_stats,
.f_raw_print = raw_print_net_nfs_stats,
+ .f_pcp_print = pcp_print_net_nfs_stats,
.f_count_new = NULL,
.item_list = NULL,
.desc = "NFS client statistics",
}
#endif /* HAVE_PCP */
}
+
+/*
+ ***************************************************************************
+ * Define PCP metrics for NFS client statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_nfs_metrics(void)
+{
+#ifdef HAVE_PCP
+ pmiAddMetric("network.fs.client.call",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("network.fs.client.retrans",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("network.fs.client.read",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("network.fs.client.write",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("network.fs.client.access",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+
+ pmiAddMetric("network.fs.client.getatt",
+ PM_IN_NULL, PM_TYPE_FLOAT, PM_INDOM_NULL, PM_SEM_INSTANT,
+ pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
+#endif /* HAVE_PCP */
+}
void pcp_def_queue_metrics(void);
void pcp_def_serial_metrics(struct activity *);
void pcp_def_net_dev_metrics(struct activity *);
+void pcp_def_net_nfs_metrics(void);
/* Define domains number */
#define PM_INDOM_CPU 0
}
#endif /* HAVE_PCP */
}
+
+/*
+ ***************************************************************************
+ * Display NFS client statistics 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_net_nfs_stats(struct activity *a, int curr, unsigned long long itv,
+ struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+ char buf[64];
+ struct stats_net_nfs
+ *snnc = (struct stats_net_nfs *) a->buf[curr],
+ *snnp = (struct stats_net_nfs *) a->buf[!curr];
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_rpccnt, snnc->nfs_rpccnt, itv));
+ pmiPutValue("network.fs.client.call", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_rpcretrans, snnc->nfs_rpcretrans, itv));
+ pmiPutValue("network.fs.client.retrans", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_readcnt, snnc->nfs_readcnt, itv));
+ pmiPutValue("network.fs.client.read", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_writecnt, snnc->nfs_writecnt, itv));
+ pmiPutValue("network.fs.client.write", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_accesscnt, snnc->nfs_accesscnt, itv));
+ pmiPutValue("network.fs.client.access", NULL, buf);
+
+ snprintf(buf, sizeof(buf), "%f",
+ S_VALUE(snnp->nfs_getattcnt, snnc->nfs_getattcnt, itv));
+ pmiPutValue("network.fs.client.getatt", NULL, buf);
+#endif /* HAVE_PCP */
+}
(struct activity *, int, unsigned long long, struct record_header *);
__print_funct_t pcp_print_net_edev_stats
(struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_net_nfs_stats
+ (struct activity *, int, unsigned long long, struct record_header *);
#endif /* _PCP_STATS_H */
case A_NET_EDEV:
pcp_def_net_dev_metrics(act[p]);
break;
+
+ case A_NET_NFS:
+ pcp_def_net_nfs_metrics();
+ break;
}
}
}