]> granicus.if.org Git - sysstat/commitdiff
sadf: PCP: Add support for A_NET_UDP activity
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 31 Mar 2019 16:20:58 +0000 (18:20 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 31 Mar 2019 16:20:58 +0000 (18:20 +0200)
Add metrics displayed by "sar -n UDP" (UDP network statistics) to PCP
archive.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
activity.c
pcp_def_metrics.c
pcp_def_metrics.h
pcp_stats.c
pcp_stats.h
sadf_misc.c

index c1d6df9cdae4ae9f737e4309b4548c3ce1143443..4c95a069442ff9ad3e4184cd81223fda3dbc0805 100644 (file)
@@ -1109,6 +1109,7 @@ struct activity net_udp_act = {
        .f_json_print   = json_print_net_udp_stats,
        .f_svg_print    = svg_print_net_udp_stats,
        .f_raw_print    = raw_print_net_udp_stats,
+       .f_pcp_print    = pcp_print_net_udp_stats,
        .f_count_new    = NULL,
        .item_list      = NULL,
        .desc           = "UDPv4 traffic statistics",
index ea94b9f48eb75946d5969d7641daf0255e16932d..59b964229f306d54d5b40861927e7b0512b5de31 100644 (file)
@@ -950,3 +950,29 @@ void pcp_def_net_etcp_metrics(void)
                     pmiUnits(0, -1, 1, 0, PM_TIME_SEC, PM_COUNT_ONE));
 #endif /* HAVE_PCP */
 }
+
+/*
+ ***************************************************************************
+ * Define PCP metrics for UDP network statistics.
+ ***************************************************************************
+ */
+void pcp_def_net_udp_metrics(void)
+{
+#ifdef HAVE_PCP
+       pmiAddMetric("network.snmp.udp.udpInDatagrams",
+                    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.snmp.udp.udpOutDatagrams",
+                    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.snmp.udp.udpNoPorts",
+                    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.snmp.udp.udpInErrors",
+                    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 */
+}
index f65aed9707bb4949d513c45da94358b8292b6642..84f588211a63221ce6608557b59f7dfafc858a85 100644 (file)
@@ -31,6 +31,7 @@ void pcp_def_net_icmp_metrics(void);
 void pcp_def_net_eicmp_metrics(void);
 void pcp_def_net_tcp_metrics(void);
 void pcp_def_net_etcp_metrics(void);
+void pcp_def_net_udp_metrics(void);
 
 /* Define domains number */
 #define PM_INDOM_CPU           0
index a559455b0abf963e9185847cd3639c125b001b9b..f88294667439808b53ceab5dc64de04ac6471399 100644 (file)
@@ -1241,3 +1241,41 @@ __print_funct_t pcp_print_net_etcp_stats(struct activity *a, int curr, unsigned
        pmiPutValue("network.snmp.tcp.tcpOutRsts", NULL, buf);
 #endif /* HAVE_PCP */
 }
+
+/*
+ ***************************************************************************
+ * Display UDP network 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_udp_stats(struct activity *a, int curr, unsigned long long itv,
+                                       struct record_header *record_hdr)
+{
+#ifdef HAVE_PCP
+       char buf[64];
+       struct stats_net_udp
+               *snuc = (struct stats_net_udp *) a->buf[curr],
+               *snup = (struct stats_net_udp *) a->buf[!curr];
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snup->InDatagrams, snuc->InDatagrams, itv));
+       pmiPutValue("network.snmp.udp.udpInDatagrams", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snup->OutDatagrams, snuc->OutDatagrams, itv));
+       pmiPutValue("network.snmp.udp.udpOutDatagrams", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snup->NoPorts, snuc->NoPorts, itv));
+       pmiPutValue("network.snmp.udp.udpNoPorts", NULL, buf);
+
+       snprintf(buf, sizeof(buf), "%f",
+               S_VALUE(snup->InErrors, snuc->InErrors, itv));
+       pmiPutValue("network.snmp.udp.udpInErrors", NULL, buf);
+#endif /* HAVE_PCP */
+}
index 4938dcc4621806c07c51d8c783df0c836e7af93e..6e686f1330085ffc143a248aa804301ecae2ef0a 100644 (file)
@@ -53,5 +53,7 @@ __print_funct_t pcp_print_net_tcp_stats
        (struct activity *, int, unsigned long long, struct record_header *);
 __print_funct_t pcp_print_net_etcp_stats
        (struct activity *, int, unsigned long long, struct record_header *);
+__print_funct_t pcp_print_net_udp_stats
+       (struct activity *, int, unsigned long long, struct record_header *);
 
 #endif /* _PCP_STATS_H */
index f0d1c333f5e633e89e5c8fc1b957fe43e5b0ef94..dad46490193f5d5847bf75eaff7c232c4b3fecf4 100644 (file)
@@ -576,6 +576,10 @@ __printf_funct_t print_pcp_statistics(int *tab, int action, struct activity *act
                                case A_NET_ETCP:
                                        pcp_def_net_etcp_metrics();
                                        break;
+
+                               case A_NET_UDP:
+                                       pcp_def_net_udp_metrics();
+                                       break;
                        }
                }
        }