]> granicus.if.org Git - sysstat/commitdiff
sadf: Add new output format: raw (part 4)
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 1 Jan 2017 09:44:29 +0000 (10:44 +0100)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 1 Jan 2017 09:44:29 +0000 (10:44 +0100)
Implement raw output format for additional activities.

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

index b26ca94affae67bb6d616873e75719eea2a078b6..a41a0d37dfe16ffd86e8574b8624d02c82cdffcf 100644 (file)
@@ -354,6 +354,7 @@ struct activity ktables_act = {
        .f_xml_print    = xml_print_ktables_stats,
        .f_json_print   = json_print_ktables_stats,
        .f_svg_print    = svg_print_ktables_stats,
+       .f_raw_print    = raw_print_ktables_stats,
        .name           = "A_KTABLES",
        .g_nr           = 2,
 #endif
@@ -390,6 +391,7 @@ struct activity queue_act = {
        .f_xml_print    = xml_print_queue_stats,
        .f_json_print   = json_print_queue_stats,
        .f_svg_print    = svg_print_queue_stats,
+       .f_raw_print    = raw_print_queue_stats,
        .name           = "A_QUEUE",
        .g_nr           = 3,
 #endif
@@ -425,6 +427,7 @@ struct activity serial_act = {
        .f_render       = render_serial_stats,
        .f_xml_print    = xml_print_serial_stats,
        .f_json_print   = json_print_serial_stats,
+       .f_raw_print    = raw_print_serial_stats,
        .name           = "A_SERIAL",
        .g_nr           = 0,
 #endif
@@ -461,6 +464,7 @@ struct activity disk_act = {
        .f_xml_print    = xml_print_disk_stats,
        .f_json_print   = json_print_disk_stats,
        .f_svg_print    = svg_print_disk_stats,
+       .f_raw_print    = raw_print_disk_stats,
        .name           = "A_DISK",
        .g_nr           = 5,
 #endif
@@ -497,6 +501,7 @@ struct activity net_dev_act = {
        .f_xml_print    = xml_print_net_dev_stats,
        .f_json_print   = json_print_net_dev_stats,
        .f_svg_print    = svg_print_net_dev_stats,
+       .f_raw_print    = raw_print_net_dev_stats,
        .name           = "A_NET_DEV",
        .g_nr           = 4,
 #endif
@@ -534,6 +539,7 @@ struct activity net_edev_act = {
        .f_xml_print    = xml_print_net_edev_stats,
        .f_json_print   = json_print_net_edev_stats,
        .f_svg_print    = svg_print_net_edev_stats,
+       .f_raw_print    = raw_print_net_edev_stats,
        .name           = "A_NET_EDEV",
        .g_nr           = 4,
 #endif
index cf556eb022ad94f5c228d6bba1b01edfb8ba2047..539ade884fbace9d8b64a9846f62d20066cffa2d 100644 (file)
@@ -29,7 +29,7 @@
 #include "raw_stats.h"
 
 extern unsigned int flags;
-
+extern unsigned int dm_major;
 
 /*
  ***************************************************************************
@@ -392,3 +392,299 @@ __print_funct_t raw_print_memory_stats(struct activity *a, char *timestr, int cu
                printf("\n");
        }
 }
+
+/*
+ ***************************************************************************
+ * Display kernel tables statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_ktables_stats(struct activity *a, char *timestr, int curr)
+{
+       struct stats_ktables
+               *skc = (struct stats_ktables *) a->buf[curr];
+
+       printf("%s %s:%u", timestr, pfield(a->hdr_line, FIRST), skc->dentry_stat);
+       printf(" %s:%u", pfield(NULL, 0), skc->file_used);
+       printf(" %s:%u", pfield(NULL, 0), skc->inode_used);
+       printf(" %s:%u", pfield(NULL, 0), skc->pty_nr);
+       printf("\n");
+}
+
+/*
+ ***************************************************************************
+ * Display queue and load statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_queue_stats(struct activity *a, char *timestr, int curr)
+{
+       struct stats_queue
+               *sqc = (struct stats_queue *) a->buf[curr];
+
+       printf("%s %s:%lu", timestr, pfield(a->hdr_line, FIRST), sqc->nr_running);
+       printf(" %s:%u", pfield(NULL, 0), sqc->nr_threads);
+       printf(" %s:%u", pfield(NULL, 0), sqc->load_avg_1);
+       printf(" %s:%u", pfield(NULL, 0), sqc->load_avg_5);
+       printf(" %s:%u", pfield(NULL, 0), sqc->load_avg_15);
+       printf(" %s:%lu", pfield(NULL, 0), sqc->procs_blocked);
+       printf("\n");
+}
+
+/*
+ ***************************************************************************
+ * Display serial lines statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_serial_stats(struct activity *a, char *timestr, int curr)
+{
+       int i;
+       struct stats_serial *ssc, *ssp;
+
+       for (i = 0; i < a->nr; i++) {
+
+               ssc = (struct stats_serial *) ((char *) a->buf[curr]  + i * a->msize);
+               ssp = (struct stats_serial *) ((char *) a->buf[!curr] + i * a->msize);
+
+               printf("%s %s:", timestr, pfield(a->hdr_line, FIRST));
+               pval(ssp->line, ssc->line);
+
+               if (ssc->line == 0) {
+                       if (DISPLAY_HINTS(flags)) {
+                               printf(" [SKP]");
+                       }
+                       printf("\n");
+                       continue;
+               }
+
+               if (ssc->line == ssp->line) {
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->rx, ssc->rx);
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->tx, ssc->tx);
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->frame, ssc->frame);
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->parity, ssc->parity);
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->brk, ssc->brk);
+                       printf(" %s:", pfield(NULL, 0));
+                       pval(ssp->overrun, ssc->overrun);
+               }
+               else if (DISPLAY_HINTS(flags)) {
+                       printf(" [NEW]");
+               }
+
+               printf("\n");
+       }
+}
+
+/*
+ ***************************************************************************
+ * Display disks statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_disk_stats(struct activity *a, char *timestr, int curr)
+{
+       int i, j;
+       struct stats_disk *sdc, *sdp, sdpzero;
+       char *dev_name, *persist_dev_name;
+
+       memset(&sdpzero, 0, STATS_DISK_SIZE);
+
+       for (i = 0; i < a->nr; i++) {
+
+               sdc = (struct stats_disk *) ((char *) a->buf[curr] + i * a->msize);
+
+               printf("%s major:%u minor:%u", timestr, sdc->major, sdc->minor);
+
+               if (!(sdc->major + sdc->minor)) {
+                       if (DISPLAY_HINTS(flags)) {
+                               printf(" [SKP]");
+                       }
+                       printf("\n");
+                       continue;
+               }
+
+               j = check_disk_reg(a, curr, !curr, i);
+               if (j < 0) {
+                       /* This is a newly registered interface. Previous stats are zero */
+                       sdp = &sdpzero;
+                       if (DISPLAY_HINTS(flags)) {
+                               printf(" [NEW]");
+                       }
+               }
+               else {
+                       sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+               }
+
+               dev_name = NULL;
+               persist_dev_name = NULL;
+
+               if (DISPLAY_PERSIST_NAME_S(flags)) {
+                       persist_dev_name = get_persistent_name_from_pretty(get_devname(sdc->major, sdc->minor, TRUE));
+               }
+
+               if (persist_dev_name) {
+                       dev_name = persist_dev_name;
+               }
+               else {
+                       /* Always use pretty option (-p) */
+                       if (sdc->major == dm_major) {
+                               dev_name = transform_devmapname(sdc->major, sdc->minor);
+                       }
+
+                       if (!dev_name) {
+                               dev_name = get_devname(sdc->major, sdc->minor, TRUE);
+                       }
+               }
+
+               printf(" %s:%s", pfield(a->hdr_line, FIRST), dev_name);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sdp->nr_ios, sdc->nr_ios);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sdp->rd_sect, sdc->rd_sect);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sdp->wr_sect, sdc->wr_sect);
+               printf(" tot_ticks:");
+               pval(sdp->tot_ticks, sdc->tot_ticks);
+               pfield(NULL, 0); /* Skip avgrq-sz */
+               printf(" %s:", pfield(NULL, 0));
+               pval(sdp->rq_ticks, sdc->rq_ticks);
+               printf("\n");
+       }
+}
+
+/*
+ ***************************************************************************
+ * Display network interfaces statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_net_dev_stats(struct activity *a, char *timestr, int curr)
+{
+       int i, j;
+       struct stats_net_dev *sndc, *sndp, sndzero;
+
+       memset(&sndzero, 0, STATS_NET_DEV_SIZE);
+
+       for (i = 0; i < a->nr; i++) {
+
+               sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
+
+               if (!strcmp(sndc->interface, ""))
+                       break;
+
+               printf("%s %s:%s", timestr, pfield(a->hdr_line, FIRST), sndc->interface);
+
+               j = check_net_dev_reg(a, curr, !curr, i);
+               if (j < 0) {
+                       /* This is a newly registered interface. Previous stats are zero */
+                       sndp = &sndzero;
+                       if (DISPLAY_HINTS(flags)) {
+                               printf(" [NEW]");
+                       }
+               }
+               else {
+                       sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+               }
+
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->rx_packets, sndc->rx_packets);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->tx_packets, sndc->tx_packets);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->rx_bytes, sndc->rx_bytes);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->tx_bytes, sndc->tx_bytes);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->rx_compressed, sndc->rx_compressed);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->tx_compressed, sndc->tx_compressed);
+               printf(" %s:", pfield(NULL, 0));
+               pval(sndp->multicast, sndc->multicast);
+               printf(" speed:%u duplex:%u\n", sndc->speed, sndc->duplex);
+       }
+}
+
+/*
+ ***************************************************************************
+ * Display network interfaces errors statistics in raw format.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @timestr    Time for current statistics sample.
+ * @curr       Index in array for current sample statistics.
+ ***************************************************************************
+ */
+__print_funct_t raw_print_net_edev_stats(struct activity *a, char *timestr, int curr)
+{
+       int i, j;
+       struct stats_net_edev *snedc, *snedp, snedzero;
+
+       memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
+
+       for (i = 0; i < a->nr; i++) {
+
+               snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
+
+               if (!strcmp(snedc->interface, ""))
+                       break;
+
+               printf("%s %s:%s", timestr, pfield(a->hdr_line, FIRST), snedc->interface);
+
+               j = check_net_edev_reg(a, curr, !curr, i);
+               if (j < 0) {
+                       /* This is a newly registered interface. Previous stats are zero */
+                       snedp = &snedzero;
+                       if (DISPLAY_HINTS(flags)) {
+                               printf(" [NEW]");
+                       }
+               }
+               else {
+                       snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+               }
+
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->rx_errors, snedc->rx_errors);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->tx_errors, snedc->tx_errors);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->collisions, snedc->collisions);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->rx_dropped, snedc->rx_dropped);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->tx_dropped, snedc->tx_dropped);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->tx_carrier_errors, snedc->tx_carrier_errors);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->rx_frame_errors, snedc->rx_frame_errors);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->rx_fifo_errors, snedc->rx_fifo_errors);
+               printf(" %s:", pfield(NULL, 0));
+               pval(snedp->tx_fifo_errors, snedc->tx_fifo_errors);
+               printf("\n");
+       }
+}
index edf9fbcf02a3672e593c92b9b2dc21a5b16dff8e..0109be17121a525a7e9aca605aac2c429ab55228 100644 (file)
@@ -28,5 +28,17 @@ __print_funct_t raw_print_io_stats
        (struct activity *, char *, int);
 __print_funct_t raw_print_memory_stats
        (struct activity *, char *, int);
+__print_funct_t raw_print_ktables_stats
+       (struct activity *, char *, int);
+__print_funct_t raw_print_queue_stats
+       (struct activity *, char *, int);
+__print_funct_t raw_print_serial_stats
+       (struct activity *, char *, int);
+__print_funct_t raw_print_disk_stats
+       (struct activity *, char *, int);
+__print_funct_t raw_print_net_dev_stats
+       (struct activity *, char *, int);
+__print_funct_t raw_print_net_edev_stats
+       (struct activity *, char *, int);
 
 #endif /* _RAW_STATS_H */