]> granicus.if.org Git - sysstat/blob - activity.c
sadf: Add new output format: raw (part 8)
[sysstat] / activity.c
1 /*
2  * activity.c: Define system activities available for sar/sadc.
3  * (C) 1999-2016 by Sebastien GODARD (sysstat <at> orange.fr)
4  *
5  ***************************************************************************
6  * This program is free software; you can redistribute it and/or modify it *
7  * under the terms of the GNU General Public License as published  by  the *
8  * Free Software Foundation; either version 2 of the License, or (at  your *
9  * option) any later version.                                              *
10  *                                                                         *
11  * This program is distributed in the hope that it  will  be  useful,  but *
12  * WITHOUT ANY WARRANTY; without the implied warranty  of  MERCHANTABILITY *
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
14  * for more details.                                                       *
15  *                                                                         *
16  * You should have received a copy of the GNU General Public License along *
17  * with this program; if not, write to the Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA              *
19  ***************************************************************************
20  */
21
22 #include "sa.h"
23
24 #ifdef SOURCE_SADC
25 #include "rd_stats.h"
26 #include "rd_sensors.h"
27 #endif
28
29 #ifdef SOURCE_SAR
30 #include "pr_stats.h"
31 #endif
32
33 #ifdef SOURCE_SADF
34 #include "rndr_stats.h"
35 #include "xml_stats.h"
36 #include "json_stats.h"
37 #include "svg_stats.h"
38 #include "raw_stats.h"
39 #endif
40
41 /*
42  ***************************************************************************
43  * Definitions of system activities.
44  * See sa.h file for activity structure definition.
45  * Activity structure doesn't matter for daily data files.
46  ***************************************************************************
47  */
48
49 /*
50  * Bitmaps needed by activities.
51  * Remember to allocate them before use!
52  */
53
54 /* CPU bitmap */
55 struct act_bitmap cpu_bitmap = {
56         .b_array        = NULL,
57         .b_size         = NR_CPUS
58 };
59
60 /* Interrupts bitmap */
61 struct act_bitmap irq_bitmap = {
62         .b_array        = NULL,
63         .b_size         = NR_IRQS
64 };
65
66
67 /*
68  * CPU statistics.
69  * This is the only activity which *must* be collected by sadc
70  * so that uptime can be filled.
71  */
72 struct activity cpu_act = {
73         .id             = A_CPU,
74         .options        = AO_COLLECTED + AO_VOLATILE + AO_GLOBAL_ITV + AO_MULTIPLE_OUTPUTS +
75                           AO_GRAPH_PER_ITEM,
76         .magic          = ACTIVITY_MAGIC_BASE,
77         .group          = G_DEFAULT,
78 #ifdef SOURCE_SADC
79         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
80         .f_count2       = NULL,
81         .f_read         = wrap_read_stat_cpu,
82 #endif
83 #ifdef SOURCE_SAR
84         .f_print        = print_cpu_stats,
85         .f_print_avg    = print_cpu_stats,
86 #endif
87 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
88         .hdr_line       = "CPU;%user;%nice;%system;%iowait;%steal;%idle|"
89                           "CPU;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%gnice;%idle",
90 #endif
91 #ifdef SOURCE_SADF
92         .f_render       = render_cpu_stats,
93         .f_xml_print    = xml_print_cpu_stats,
94         .f_json_print   = json_print_cpu_stats,
95         .f_svg_print    = svg_print_cpu_stats,
96         .f_raw_print    = raw_print_cpu_stats,
97         .name           = "A_CPU",
98         .g_nr           = 1,
99 #endif
100         .nr             = -1,
101         .nr2            = 1,
102         .nr_max         = NR_CPUS + 1,
103         .fsize          = STATS_CPU_SIZE,
104         .msize          = STATS_CPU_SIZE,
105         .opt_flags      = AO_F_CPU_DEF,
106         .buf            = {NULL, NULL, NULL},
107         .bitmap         = &cpu_bitmap
108 };
109
110 /* Process (task) creation and context switch activity */
111 struct activity pcsw_act = {
112         .id             = A_PCSW,
113         .options        = AO_COLLECTED,
114         .magic          = ACTIVITY_MAGIC_BASE,
115         .group          = G_DEFAULT,
116 #ifdef SOURCE_SADC
117         .f_count_index  = -1,
118         .f_count2       = NULL,
119         .f_read         = wrap_read_stat_pcsw,
120 #endif
121 #ifdef SOURCE_SAR
122         .f_print        = print_pcsw_stats,
123         .f_print_avg    = print_pcsw_stats,
124 #endif
125 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
126         .hdr_line       = "proc/s;cswch/s",
127 #endif
128 #ifdef SOURCE_SADF
129         .f_render       = render_pcsw_stats,
130         .f_xml_print    = xml_print_pcsw_stats,
131         .f_json_print   = json_print_pcsw_stats,
132         .f_svg_print    = svg_print_pcsw_stats,
133         .f_raw_print    = raw_print_pcsw_stats,
134         .name           = "A_PCSW",
135         .g_nr           = 2,
136 #endif
137         .nr             = 1,
138         .nr2            = 1,
139         .nr_max         = 1,
140         .fsize          = STATS_PCSW_SIZE,
141         .msize          = STATS_PCSW_SIZE,
142         .opt_flags      = 0,
143         .buf            = {NULL, NULL, NULL},
144         .bitmap         = NULL
145 };
146
147 /* Interrupts statistics */
148 struct activity irq_act = {
149         .id             = A_IRQ,
150         .options        = AO_NULL,
151         .magic          = ACTIVITY_MAGIC_BASE,
152         .group          = G_INT,
153 #ifdef SOURCE_SADC
154         .f_count_index  = 1,    /* wrap_get_irq_nr() */
155         .f_count2       = NULL,
156         .f_read         = wrap_read_stat_irq,
157 #endif
158 #ifdef SOURCE_SAR
159         .f_print        = print_irq_stats,
160         .f_print_avg    = print_irq_stats,
161 #endif
162 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
163         .hdr_line       = "INTR;intr/s",
164 #endif
165 #ifdef SOURCE_SADF
166         .f_render       = render_irq_stats,
167         .f_xml_print    = xml_print_irq_stats,
168         .f_json_print   = json_print_irq_stats,
169         .f_raw_print    = raw_print_irq_stats,
170         .name           = "A_IRQ",
171         .g_nr           = 0,
172 #endif
173         .nr             = -1,
174         .nr2            = 1,
175         .nr_max         = NR_IRQS + 1,
176         .fsize          = STATS_IRQ_SIZE,
177         .msize          = STATS_IRQ_SIZE,
178         .opt_flags      = 0,
179         .buf            = {NULL, NULL, NULL},
180         .bitmap         = &irq_bitmap
181 };
182
183 /* Swapping activity */
184 struct activity swap_act = {
185         .id             = A_SWAP,
186         .options        = AO_COLLECTED,
187         .magic          = ACTIVITY_MAGIC_BASE,
188         .group          = G_DEFAULT,
189 #ifdef SOURCE_SADC
190         .f_count_index  = -1,
191         .f_count2       = NULL,
192         .f_read         = wrap_read_swap,
193 #endif
194 #ifdef SOURCE_SAR
195         .f_print        = print_swap_stats,
196         .f_print_avg    = print_swap_stats,
197 #endif
198 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
199         .hdr_line       = "pswpin/s;pswpout/s",
200 #endif
201 #ifdef SOURCE_SADF
202         .f_render       = render_swap_stats,
203         .f_xml_print    = xml_print_swap_stats,
204         .f_json_print   = json_print_swap_stats,
205         .f_svg_print    = svg_print_swap_stats,
206         .f_raw_print    = raw_print_swap_stats,
207         .name           = "A_SWAP",
208         .g_nr           = 1,
209 #endif
210         .nr             = 1,
211         .nr2            = 1,
212         .nr_max         = 1,
213         .fsize          = STATS_SWAP_SIZE,
214         .msize          = STATS_SWAP_SIZE,
215         .opt_flags      = 0,
216         .buf            = {NULL, NULL, NULL},
217         .bitmap         = NULL
218 };
219
220 /* Paging activity */
221 struct activity paging_act = {
222         .id             = A_PAGE,
223         .options        = AO_COLLECTED,
224         .magic          = ACTIVITY_MAGIC_BASE,
225         .group          = G_DEFAULT,
226 #ifdef SOURCE_SADC
227         .f_count_index  = -1,
228         .f_count2       = NULL,
229         .f_read         = wrap_read_paging,
230 #endif
231 #ifdef SOURCE_SAR
232         .f_print        = print_paging_stats,
233         .f_print_avg    = print_paging_stats,
234 #endif
235 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
236         .hdr_line       = "pgpgin/s;pgpgout/s;fault/s;majflt/s;"
237                           "pgfree/s;pgscank/s;pgscand/s;pgsteal/s;%vmeff",
238 #endif
239 #ifdef SOURCE_SADF
240         .f_render       = render_paging_stats,
241         .f_xml_print    = xml_print_paging_stats,
242         .f_json_print   = json_print_paging_stats,
243         .f_svg_print    = svg_print_paging_stats,
244         .f_raw_print    = raw_print_paging_stats,
245         .name           = "A_PAGE",
246         .g_nr           = 3,
247 #endif
248         .nr             = 1,
249         .nr2            = 1,
250         .nr_max         = 1,
251         .fsize          = STATS_PAGING_SIZE,
252         .msize          = STATS_PAGING_SIZE,
253         .opt_flags      = 0,
254         .buf            = {NULL, NULL, NULL},
255         .bitmap         = NULL
256 };
257
258 /* I/O and transfer rate activity */
259 struct activity io_act = {
260         .id             = A_IO,
261         .options        = AO_COLLECTED,
262         .magic          = ACTIVITY_MAGIC_BASE + 1,
263         .group          = G_DEFAULT,
264 #ifdef SOURCE_SADC
265         .f_count_index  = -1,
266         .f_count2       = NULL,
267         .f_read         = wrap_read_io,
268 #endif
269 #ifdef SOURCE_SAR
270         .f_print        = print_io_stats,
271         .f_print_avg    = print_io_stats,
272 #endif
273 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
274         .hdr_line       = "tps;rtps;wtps;bread/s;bwrtn/s",
275 #endif
276 #ifdef SOURCE_SADF
277         .f_render       = render_io_stats,
278         .f_xml_print    = xml_print_io_stats,
279         .f_json_print   = json_print_io_stats,
280         .f_svg_print    = svg_print_io_stats,
281         .f_raw_print    = raw_print_io_stats,
282         .name           = "A_IO",
283         .g_nr           = 2,
284 #endif
285         .nr             = 1,
286         .nr2            = 1,
287         .nr_max         = 1,
288         .fsize          = STATS_IO_SIZE,
289         .msize          = STATS_IO_SIZE,
290         .opt_flags      = 0,
291         .buf            = {NULL, NULL, NULL},
292         .bitmap         = NULL
293 };
294
295 /* Memory and swap space utilization activity */
296 struct activity memory_act = {
297         .id             = A_MEMORY,
298         .options        = AO_COLLECTED + AO_MULTIPLE_OUTPUTS,
299         .magic          = ACTIVITY_MAGIC_BASE,
300         .group          = G_DEFAULT,
301 #ifdef SOURCE_SADC
302         .f_count_index  = -1,
303         .f_count2       = NULL,
304         .f_read         = wrap_read_meminfo,
305 #endif
306 #ifdef SOURCE_SAR
307         .f_print        = print_memory_stats,
308         .f_print_avg    = print_avg_memory_stats,
309 #endif
310 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
311         .hdr_line       = "frmpg/s;bufpg/s;campg/s|"
312                           "kbmemfree;kbavail;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit;kbactive;kbinact;kbdirty&kbanonpg;kbslab;kbkstack;kbpgtbl;kbvmused|"
313                           "kbswpfree;kbswpused;%swpused;kbswpcad;%swpcad",
314 #endif
315 #ifdef SOURCE_SADF
316         .f_render       = render_memory_stats,
317         .f_xml_print    = xml_print_memory_stats,
318         .f_json_print   = json_print_memory_stats,
319         .f_svg_print    = svg_print_memory_stats,
320         .f_raw_print    = raw_print_memory_stats,
321         .name           = "A_MEMORY",
322         .g_nr           = 9,
323 #endif
324         .nr             = 1,
325         .nr2            = 1,
326         .nr_max         = 1,
327         .fsize          = STATS_MEMORY_SIZE,
328         .msize          = STATS_MEMORY_SIZE,
329         .opt_flags      = 0,
330         .buf            = {NULL, NULL, NULL},
331         .bitmap         = NULL
332 };
333
334 /* Kernel tables activity */
335 struct activity ktables_act = {
336         .id             = A_KTABLES,
337         .options        = AO_COLLECTED,
338         .magic          = ACTIVITY_MAGIC_BASE,
339         .group          = G_DEFAULT,
340 #ifdef SOURCE_SADC
341         .f_count_index  = -1,
342         .f_count2       = NULL,
343         .f_read         = wrap_read_kernel_tables,
344 #endif
345 #ifdef SOURCE_SAR
346         .f_print        = print_ktables_stats,
347         .f_print_avg    = print_avg_ktables_stats,
348 #endif
349 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
350         .hdr_line       = "dentunusd;file-nr;inode-nr;pty-nr",
351 #endif
352 #ifdef SOURCE_SADF
353         .f_render       = render_ktables_stats,
354         .f_xml_print    = xml_print_ktables_stats,
355         .f_json_print   = json_print_ktables_stats,
356         .f_svg_print    = svg_print_ktables_stats,
357         .f_raw_print    = raw_print_ktables_stats,
358         .name           = "A_KTABLES",
359         .g_nr           = 2,
360 #endif
361         .nr             = 1,
362         .nr2            = 1,
363         .nr_max         = 1,
364         .fsize          = STATS_KTABLES_SIZE,
365         .msize          = STATS_KTABLES_SIZE,
366         .opt_flags      = 0,
367         .buf            = {NULL, NULL, NULL},
368         .bitmap         = NULL
369 };
370
371 /* Queue and load activity */
372 struct activity queue_act = {
373         .id             = A_QUEUE,
374         .options        = AO_COLLECTED,
375         .magic          = ACTIVITY_MAGIC_BASE + 1,
376         .group          = G_DEFAULT,
377 #ifdef SOURCE_SADC
378         .f_count_index  = -1,
379         .f_count2       = NULL,
380         .f_read         = wrap_read_loadavg,
381 #endif
382 #ifdef SOURCE_SAR
383         .f_print        = print_queue_stats,
384         .f_print_avg    = print_avg_queue_stats,
385 #endif
386 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
387         .hdr_line       = "runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15;blocked",
388 #endif
389 #ifdef SOURCE_SADF
390         .f_render       = render_queue_stats,
391         .f_xml_print    = xml_print_queue_stats,
392         .f_json_print   = json_print_queue_stats,
393         .f_svg_print    = svg_print_queue_stats,
394         .f_raw_print    = raw_print_queue_stats,
395         .name           = "A_QUEUE",
396         .g_nr           = 3,
397 #endif
398         .nr             = 1,
399         .nr2            = 1,
400         .nr_max         = 1,
401         .fsize          = STATS_QUEUE_SIZE,
402         .msize          = STATS_QUEUE_SIZE,
403         .opt_flags      = 0,
404         .buf            = {NULL, NULL, NULL},
405         .bitmap         = NULL
406 };
407
408 /* Serial lines activity */
409 struct activity serial_act = {
410         .id             = A_SERIAL,
411         .options        = AO_COLLECTED,
412         .magic          = ACTIVITY_MAGIC_BASE,
413         .group          = G_DEFAULT,
414 #ifdef SOURCE_SADC
415         .f_count_index  = 2,    /* wrap_get_serial_nr() */
416         .f_count2       = NULL,
417         .f_read         = wrap_read_tty_driver_serial,
418 #endif
419 #ifdef SOURCE_SAR
420         .f_print        = print_serial_stats,
421         .f_print_avg    = print_serial_stats,
422 #endif
423 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
424         .hdr_line       = "TTY;rcvin/s;txmtin/s;framerr/s;prtyerr/s;brk/s;ovrun/s",
425 #endif
426 #ifdef SOURCE_SADF
427         .f_render       = render_serial_stats,
428         .f_xml_print    = xml_print_serial_stats,
429         .f_json_print   = json_print_serial_stats,
430         .f_raw_print    = raw_print_serial_stats,
431         .name           = "A_SERIAL",
432         .g_nr           = 0,
433 #endif
434         .nr             = -1,
435         .nr2            = 1,
436         .nr_max         = MAX_NR_SERIAL_LINES,
437         .fsize          = STATS_SERIAL_SIZE,
438         .msize          = STATS_SERIAL_SIZE,
439         .opt_flags      = 0,
440         .buf            = {NULL, NULL, NULL},
441         .bitmap         = NULL
442 };
443
444 /* Block devices activity */
445 struct activity disk_act = {
446         .id             = A_DISK,
447         .options        = AO_GRAPH_PER_ITEM,
448         .magic          = ACTIVITY_MAGIC_BASE + 1,
449         .group          = G_DISK,
450 #ifdef SOURCE_SADC
451         .f_count_index  = 3,    /* wrap_get_disk_nr() */
452         .f_count2       = NULL,
453         .f_read         = wrap_read_disk,
454 #endif
455 #ifdef SOURCE_SAR
456         .f_print        = print_disk_stats,
457         .f_print_avg    = print_disk_stats,
458 #endif
459 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
460         .hdr_line       = "DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util",
461 #endif
462 #ifdef SOURCE_SADF
463         .f_render       = render_disk_stats,
464         .f_xml_print    = xml_print_disk_stats,
465         .f_json_print   = json_print_disk_stats,
466         .f_svg_print    = svg_print_disk_stats,
467         .f_raw_print    = raw_print_disk_stats,
468         .name           = "A_DISK",
469         .g_nr           = 5,
470 #endif
471         .nr             = -1,
472         .nr2            = 1,
473         .nr_max         = MAX_NR_DISKS,
474         .fsize          = STATS_DISK_SIZE,
475         .msize          = STATS_DISK_SIZE,
476         .opt_flags      = 0,
477         .buf            = {NULL, NULL, NULL},
478         .bitmap         = NULL
479 };
480
481 /* Network interfaces activity */
482 struct activity net_dev_act = {
483         .id             = A_NET_DEV,
484         .options        = AO_COLLECTED + AO_GRAPH_PER_ITEM,
485         .magic          = ACTIVITY_MAGIC_BASE + 2,
486         .group          = G_DEFAULT,
487 #ifdef SOURCE_SADC
488         .f_count_index  = 4,    /* wrap_get_iface_nr() */
489         .f_count2       = NULL,
490         .f_read         = wrap_read_net_dev,
491 #endif
492 #ifdef SOURCE_SAR
493         .f_print        = print_net_dev_stats,
494         .f_print_avg    = print_net_dev_stats,
495 #endif
496 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
497         .hdr_line       = "IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s;%ifutil",
498 #endif
499 #ifdef SOURCE_SADF
500         .f_render       = render_net_dev_stats,
501         .f_xml_print    = xml_print_net_dev_stats,
502         .f_json_print   = json_print_net_dev_stats,
503         .f_svg_print    = svg_print_net_dev_stats,
504         .f_raw_print    = raw_print_net_dev_stats,
505         .name           = "A_NET_DEV",
506         .g_nr           = 4,
507 #endif
508         .nr             = -1,
509         .nr2            = 1,
510         .nr_max         = MAX_NR_IFACES,
511         .fsize          = STATS_NET_DEV_SIZE,
512         .msize          = STATS_NET_DEV_SIZE,
513         .opt_flags      = 0,
514         .buf            = {NULL, NULL, NULL},
515         .bitmap         = NULL
516 };
517
518 /* Network interfaces (errors) activity */
519 struct activity net_edev_act = {
520         .id             = A_NET_EDEV,
521         .options        = AO_COLLECTED + AO_GRAPH_PER_ITEM,
522         .magic          = ACTIVITY_MAGIC_BASE + 1,
523         .group          = G_DEFAULT,
524 #ifdef SOURCE_SADC
525         .f_count_index  = 4,    /* wrap_get_iface_nr() */
526         .f_count2       = NULL,
527         .f_read         = wrap_read_net_edev,
528 #endif
529 #ifdef SOURCE_SAR
530         .f_print        = print_net_edev_stats,
531         .f_print_avg    = print_net_edev_stats,
532 #endif
533 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
534         .hdr_line       = "IFACE;rxerr/s;txerr/s;coll/s;rxdrop/s;txdrop/s;"
535                           "txcarr/s;rxfram/s;rxfifo/s;txfifo/s",
536 #endif
537 #ifdef SOURCE_SADF
538         .f_render       = render_net_edev_stats,
539         .f_xml_print    = xml_print_net_edev_stats,
540         .f_json_print   = json_print_net_edev_stats,
541         .f_svg_print    = svg_print_net_edev_stats,
542         .f_raw_print    = raw_print_net_edev_stats,
543         .name           = "A_NET_EDEV",
544         .g_nr           = 4,
545 #endif
546         .nr             = -1,
547         .nr2            = 1,
548         .nr_max         = MAX_NR_IFACES,
549         .fsize          = STATS_NET_EDEV_SIZE,
550         .msize          = STATS_NET_EDEV_SIZE,
551         .opt_flags      = 0,
552         .buf            = {NULL, NULL, NULL},
553         .bitmap         = NULL
554 };
555
556 /* NFS client activity */
557 struct activity net_nfs_act = {
558         .id             = A_NET_NFS,
559         .options        = AO_COLLECTED,
560         .magic          = ACTIVITY_MAGIC_BASE,
561         .group          = G_DEFAULT,
562 #ifdef SOURCE_SADC
563         .f_count_index  = -1,
564         .f_count2       = NULL,
565         .f_read         = wrap_read_net_nfs,
566 #endif
567 #ifdef SOURCE_SAR
568         .f_print        = print_net_nfs_stats,
569         .f_print_avg    = print_net_nfs_stats,
570 #endif
571 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
572         .hdr_line       = "call/s;retrans/s;read/s;write/s;access/s;getatt/s",
573 #endif
574 #ifdef SOURCE_SADF
575         .f_render       = render_net_nfs_stats,
576         .f_xml_print    = xml_print_net_nfs_stats,
577         .f_json_print   = json_print_net_nfs_stats,
578         .f_svg_print    = svg_print_net_nfs_stats,
579         .f_raw_print    = raw_print_net_nfs_stats,
580         .name           = "A_NET_NFS",
581         .g_nr           = 3,
582 #endif
583         .nr             = 1,
584         .nr2            = 1,
585         .nr_max         = 1,
586         .fsize          = STATS_NET_NFS_SIZE,
587         .msize          = STATS_NET_NFS_SIZE,
588         .opt_flags      = 0,
589         .buf            = {NULL, NULL, NULL},
590         .bitmap         = NULL
591 };
592
593 /* NFS server activity */
594 struct activity net_nfsd_act = {
595         .id             = A_NET_NFSD,
596         .options        = AO_COLLECTED,
597         .magic          = ACTIVITY_MAGIC_BASE,
598         .group          = G_DEFAULT,
599 #ifdef SOURCE_SADC
600         .f_count_index  = -1,
601         .f_count2       = NULL,
602         .f_read         = wrap_read_net_nfsd,
603 #endif
604 #ifdef SOURCE_SAR
605         .f_print        = print_net_nfsd_stats,
606         .f_print_avg    = print_net_nfsd_stats,
607 #endif
608 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
609         .hdr_line       = "scall/s;badcall/s;packet/s;udp/s;tcp/s;hit/s;miss/s;"
610                           "sread/s;swrite/s;saccess/s;sgetatt/s",
611 #endif
612 #ifdef SOURCE_SADF
613         .f_render       = render_net_nfsd_stats,
614         .f_xml_print    = xml_print_net_nfsd_stats,
615         .f_json_print   = json_print_net_nfsd_stats,
616         .f_svg_print    = svg_print_net_nfsd_stats,
617         .f_raw_print    = raw_print_net_nfsd_stats,
618         .name           = "A_NET_NFSD",
619         .g_nr           = 5,
620 #endif
621         .nr             = 1,
622         .nr2            = 1,
623         .nr_max         = 1,
624         .fsize          = STATS_NET_NFSD_SIZE,
625         .msize          = STATS_NET_NFSD_SIZE,
626         .opt_flags      = 0,
627         .buf            = {NULL, NULL, NULL},
628         .bitmap         = NULL
629 };
630
631 /* Network sockets activity */
632 struct activity net_sock_act = {
633         .id             = A_NET_SOCK,
634         .options        = AO_COLLECTED,
635         .magic          = ACTIVITY_MAGIC_BASE,
636         .group          = G_DEFAULT,
637 #ifdef SOURCE_SADC
638         .f_count_index  = -1,
639         .f_count2       = NULL,
640         .f_read         = wrap_read_net_sock,
641 #endif
642 #ifdef SOURCE_SAR
643         .f_print        = print_net_sock_stats,
644         .f_print_avg    = print_avg_net_sock_stats,
645 #endif
646 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
647         .hdr_line       = "totsck;tcpsck;udpsck;rawsck;ip-frag;tcp-tw",
648 #endif
649 #ifdef SOURCE_SADF
650         .f_render       = render_net_sock_stats,
651         .f_xml_print    = xml_print_net_sock_stats,
652         .f_json_print   = json_print_net_sock_stats,
653         .f_svg_print    = svg_print_net_sock_stats,
654         .f_raw_print    = raw_print_net_sock_stats,
655         .name           = "A_NET_SOCK",
656         .g_nr           = 2,
657 #endif
658         .nr             = 1,
659         .nr2            = 1,
660         .nr_max         = 1,
661         .fsize          = STATS_NET_SOCK_SIZE,
662         .msize          = STATS_NET_SOCK_SIZE,
663         .opt_flags      = 0,
664         .buf            = {NULL, NULL, NULL},
665         .bitmap         = NULL
666 };
667
668 /* IP network traffic activity */
669 struct activity net_ip_act = {
670         .id             = A_NET_IP,
671         .options        = AO_NULL,
672         .magic          = ACTIVITY_MAGIC_BASE + 1,
673         .group          = G_SNMP,
674 #ifdef SOURCE_SADC
675         .f_count_index  = -1,
676         .f_count2       = NULL,
677         .f_read         = wrap_read_net_ip,
678 #endif
679 #ifdef SOURCE_SAR
680         .f_print        = print_net_ip_stats,
681         .f_print_avg    = print_net_ip_stats,
682 #endif
683 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
684         .hdr_line       = "irec/s;fwddgm/s;idel/s;orq/s;asmrq/s;asmok/s;fragok/s;fragcrt/s",
685 #endif
686 #ifdef SOURCE_SADF
687         .f_render       = render_net_ip_stats,
688         .f_xml_print    = xml_print_net_ip_stats,
689         .f_json_print   = json_print_net_ip_stats,
690         .f_svg_print    = svg_print_net_ip_stats,
691         .f_raw_print    = raw_print_net_ip_stats,
692         .name           = "A_NET_IP",
693         .g_nr           = 3,
694 #endif
695         .nr             = 1,
696         .nr2            = 1,
697         .nr_max         = 1,
698         .fsize          = STATS_NET_IP_SIZE,
699         .msize          = STATS_NET_IP_SIZE,
700         .opt_flags      = 0,
701         .buf            = {NULL, NULL, NULL},
702         .bitmap         = NULL
703 };
704
705 /* IP network traffic (errors) activity */
706 struct activity net_eip_act = {
707         .id             = A_NET_EIP,
708         .options        = AO_NULL,
709         .magic          = ACTIVITY_MAGIC_BASE + 1,
710         .group          = G_SNMP,
711 #ifdef SOURCE_SADC
712         .f_count_index  = -1,
713         .f_count2       = NULL,
714         .f_read         = wrap_read_net_eip,
715 #endif
716 #ifdef SOURCE_SAR
717         .f_print        = print_net_eip_stats,
718         .f_print_avg    = print_net_eip_stats,
719 #endif
720 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
721         .hdr_line       = "ihdrerr/s;iadrerr/s;iukwnpr/s;idisc/s;odisc/s;onort/s;asmf/s;fragf/s",
722 #endif
723 #ifdef SOURCE_SADF
724         .f_render       = render_net_eip_stats,
725         .f_xml_print    = xml_print_net_eip_stats,
726         .f_json_print   = json_print_net_eip_stats,
727         .f_svg_print    = svg_print_net_eip_stats,
728         .f_raw_print    = raw_print_net_eip_stats,
729         .name           = "A_NET_EIP",
730         .g_nr           = 3,
731 #endif
732         .nr             = 1,
733         .nr2            = 1,
734         .nr_max         = 1,
735         .fsize          = STATS_NET_EIP_SIZE,
736         .msize          = STATS_NET_EIP_SIZE,
737         .opt_flags      = 0,
738         .buf            = {NULL, NULL, NULL},
739         .bitmap         = NULL
740 };
741
742 /* ICMP network traffic activity */
743 struct activity net_icmp_act = {
744         .id             = A_NET_ICMP,
745         .options        = AO_NULL,
746         .magic          = ACTIVITY_MAGIC_BASE,
747         .group          = G_SNMP,
748 #ifdef SOURCE_SADC
749         .f_count_index  = -1,
750         .f_count2       = NULL,
751         .f_read         = wrap_read_net_icmp,
752 #endif
753 #ifdef SOURCE_SAR
754         .f_print        = print_net_icmp_stats,
755         .f_print_avg    = print_net_icmp_stats,
756 #endif
757 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
758         .hdr_line       = "imsg/s;omsg/s;iech/s;iechr/s;oech/s;oechr/s;itm/s;itmr/s;otm/s;"
759                           "otmr/s;iadrmk/s;iadrmkr/s;oadrmk/s;oadrmkr/s",
760 #endif
761 #ifdef SOURCE_SADF
762         .f_render       = render_net_icmp_stats,
763         .f_xml_print    = xml_print_net_icmp_stats,
764         .f_json_print   = json_print_net_icmp_stats,
765         .f_svg_print    = svg_print_net_icmp_stats,
766         .f_raw_print    = raw_print_net_icmp_stats,
767         .name           = "A_NET_ICMP",
768         .g_nr           = 4,
769 #endif
770         .nr             = 1,
771         .nr2            = 1,
772         .nr_max         = 1,
773         .fsize          = STATS_NET_ICMP_SIZE,
774         .msize          = STATS_NET_ICMP_SIZE,
775         .opt_flags      = 0,
776         .buf            = {NULL, NULL, NULL},
777         .bitmap         = NULL
778 };
779
780 /* ICMP network traffic (errors) activity */
781 struct activity net_eicmp_act = {
782         .id             = A_NET_EICMP,
783         .options        = AO_NULL,
784         .magic          = ACTIVITY_MAGIC_BASE,
785         .group          = G_SNMP,
786 #ifdef SOURCE_SADC
787         .f_count_index  = -1,
788         .f_count2       = NULL,
789         .f_read         = wrap_read_net_eicmp,
790 #endif
791 #ifdef SOURCE_SAR
792         .f_print        = print_net_eicmp_stats,
793         .f_print_avg    = print_net_eicmp_stats,
794 #endif
795 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
796         .hdr_line       = "ierr/s;oerr/s;idstunr/s;odstunr/s;itmex/s;otmex/s;"
797                           "iparmpb/s;oparmpb/s;isrcq/s;osrcq/s;iredir/s;oredir/s",
798 #endif
799 #ifdef SOURCE_SADF
800         .f_render       = render_net_eicmp_stats,
801         .f_xml_print    = xml_print_net_eicmp_stats,
802         .f_json_print   = json_print_net_eicmp_stats,
803         .f_svg_print    = svg_print_net_eicmp_stats,
804         .f_raw_print    = raw_print_net_eicmp_stats,
805         .name           = "A_NET_EICMP",
806         .g_nr           = 6,
807 #endif
808         .nr             = 1,
809         .nr2            = 1,
810         .nr_max         = 1,
811         .fsize          = STATS_NET_EICMP_SIZE,
812         .msize          = STATS_NET_EICMP_SIZE,
813         .opt_flags      = 0,
814         .buf            = {NULL, NULL, NULL},
815         .bitmap         = NULL
816 };
817
818 /* TCP network traffic activity */
819 struct activity net_tcp_act = {
820         .id             = A_NET_TCP,
821         .options        = AO_NULL,
822         .magic          = ACTIVITY_MAGIC_BASE,
823         .group          = G_SNMP,
824 #ifdef SOURCE_SADC
825         .f_count_index  = -1,
826         .f_count2       = NULL,
827         .f_read         = wrap_read_net_tcp,
828 #endif
829 #ifdef SOURCE_SAR
830         .f_print        = print_net_tcp_stats,
831         .f_print_avg    = print_net_tcp_stats,
832 #endif
833 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
834         .hdr_line       = "active/s;passive/s;iseg/s;oseg/s",
835 #endif
836 #ifdef SOURCE_SADF
837         .f_render       = render_net_tcp_stats,
838         .f_xml_print    = xml_print_net_tcp_stats,
839         .f_json_print   = json_print_net_tcp_stats,
840         .f_svg_print    = svg_print_net_tcp_stats,
841         .f_raw_print    = raw_print_net_tcp_stats,
842         .name           = "A_NET_TCP",
843         .g_nr           = 2,
844 #endif
845         .nr             = 1,
846         .nr2            = 1,
847         .nr_max         = 1,
848         .fsize          = STATS_NET_TCP_SIZE,
849         .msize          = STATS_NET_TCP_SIZE,
850         .opt_flags      = 0,
851         .buf            = {NULL, NULL, NULL},
852         .bitmap         = NULL
853 };
854
855 /* TCP network traffic (errors) activity */
856 struct activity net_etcp_act = {
857         .id             = A_NET_ETCP,
858         .options        = AO_NULL,
859         .magic          = ACTIVITY_MAGIC_BASE,
860         .group          = G_SNMP,
861 #ifdef SOURCE_SADC
862         .f_count_index  = -1,
863         .f_count2       = NULL,
864         .f_read         = wrap_read_net_etcp,
865 #endif
866 #ifdef SOURCE_SAR
867         .f_print        = print_net_etcp_stats,
868         .f_print_avg    = print_net_etcp_stats,
869 #endif
870 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
871         .hdr_line       = "atmptf/s;estres/s;retrans/s;isegerr/s;orsts/s",
872 #endif
873 #ifdef SOURCE_SADF
874         .f_render       = render_net_etcp_stats,
875         .f_xml_print    = xml_print_net_etcp_stats,
876         .f_json_print   = json_print_net_etcp_stats,
877         .f_svg_print    = svg_print_net_etcp_stats,
878         .f_raw_print    = raw_print_net_etcp_stats,
879         .name           = "A_NET_ETCP",
880         .g_nr           = 2,
881 #endif
882         .nr             = 1,
883         .nr2            = 1,
884         .nr_max         = 1,
885         .fsize          = STATS_NET_ETCP_SIZE,
886         .msize          = STATS_NET_ETCP_SIZE,
887         .opt_flags      = 0,
888         .buf            = {NULL, NULL, NULL},
889         .bitmap         = NULL
890 };
891
892 /* UDP network traffic activity */
893 struct activity net_udp_act = {
894         .id             = A_NET_UDP,
895         .options        = AO_NULL,
896         .magic          = ACTIVITY_MAGIC_BASE,
897         .group          = G_SNMP,
898 #ifdef SOURCE_SADC
899         .f_count_index  = -1,
900         .f_count2       = NULL,
901         .f_read         = wrap_read_net_udp,
902 #endif
903 #ifdef SOURCE_SAR
904         .f_print        = print_net_udp_stats,
905         .f_print_avg    = print_net_udp_stats,
906 #endif
907 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
908         .hdr_line       = "idgm/s;odgm/s;noport/s;idgmerr/s",
909 #endif
910 #ifdef SOURCE_SADF
911         .f_render       = render_net_udp_stats,
912         .f_xml_print    = xml_print_net_udp_stats,
913         .f_json_print   = json_print_net_udp_stats,
914         .f_svg_print    = svg_print_net_udp_stats,
915         .f_raw_print    = raw_print_net_udp_stats,
916         .name           = "A_NET_UDP",
917         .g_nr           = 2,
918 #endif
919         .nr             = 1,
920         .nr2            = 1,
921         .nr_max         = 1,
922         .fsize          = STATS_NET_UDP_SIZE,
923         .msize          = STATS_NET_UDP_SIZE,
924         .opt_flags      = 0,
925         .buf            = {NULL, NULL, NULL},
926         .bitmap         = NULL
927 };
928
929 /* IPv6 sockets activity */
930 struct activity net_sock6_act = {
931         .id             = A_NET_SOCK6,
932         .options        = AO_NULL,
933         .magic          = ACTIVITY_MAGIC_BASE,
934         .group          = G_IPV6,
935 #ifdef SOURCE_SADC
936         .f_count_index  = -1,
937         .f_count2       = NULL,
938         .f_read         = wrap_read_net_sock6,
939 #endif
940 #ifdef SOURCE_SAR
941         .f_print        = print_net_sock6_stats,
942         .f_print_avg    = print_avg_net_sock6_stats,
943 #endif
944 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
945         .hdr_line       = "tcp6sck;udp6sck;raw6sck;ip6-frag",
946 #endif
947 #ifdef SOURCE_SADF
948         .f_render       = render_net_sock6_stats,
949         .f_xml_print    = xml_print_net_sock6_stats,
950         .f_json_print   = json_print_net_sock6_stats,
951         .f_svg_print    = svg_print_net_sock6_stats,
952         .f_raw_print    = raw_print_net_sock6_stats,
953         .name           = "A_NET_SOCK6",
954         .g_nr           = 1,
955 #endif
956         .nr             = 1,
957         .nr2            = 1,
958         .nr_max         = 1,
959         .fsize          = STATS_NET_SOCK6_SIZE,
960         .msize          = STATS_NET_SOCK6_SIZE,
961         .opt_flags      = 0,
962         .buf            = {NULL, NULL, NULL},
963         .bitmap         = NULL
964 };
965
966 /* IPv6 network traffic activity */
967 struct activity net_ip6_act = {
968         .id             = A_NET_IP6,
969         .options        = AO_NULL,
970         .magic          = ACTIVITY_MAGIC_BASE + 1,
971         .group          = G_IPV6,
972 #ifdef SOURCE_SADC
973         .f_count_index  = -1,
974         .f_count2       = NULL,
975         .f_read         = wrap_read_net_ip6,
976 #endif
977 #ifdef SOURCE_SAR
978         .f_print        = print_net_ip6_stats,
979         .f_print_avg    = print_net_ip6_stats,
980 #endif
981 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
982         .hdr_line       = "irec6/s;fwddgm6/s;idel6/s;orq6/s;asmrq6/s;asmok6/s;"
983                           "imcpck6/s;omcpck6/s;fragok6/s;fragcr6/s",
984 #endif
985 #ifdef SOURCE_SADF
986         .f_render       = render_net_ip6_stats,
987         .f_xml_print    = xml_print_net_ip6_stats,
988         .f_json_print   = json_print_net_ip6_stats,
989         .f_svg_print    = svg_print_net_ip6_stats,
990         .f_raw_print    = raw_print_net_ip6_stats,
991         .name           = "A_NET_IP6",
992         .g_nr           = 4,
993 #endif
994         .nr             = 1,
995         .nr2            = 1,
996         .nr_max         = 1,
997         .fsize          = STATS_NET_IP6_SIZE,
998         .msize          = STATS_NET_IP6_SIZE,
999         .opt_flags      = 0,
1000         .buf            = {NULL, NULL, NULL},
1001         .bitmap         = NULL
1002 };
1003
1004 /* IPv6 network traffic (errors) activity */
1005 struct activity net_eip6_act = {
1006         .id             = A_NET_EIP6,
1007         .options        = AO_NULL,
1008         .magic          = ACTIVITY_MAGIC_BASE + 1,
1009         .group          = G_IPV6,
1010 #ifdef SOURCE_SADC
1011         .f_count_index  = -1,
1012         .f_count2       = NULL,
1013         .f_read         = wrap_read_net_eip6,
1014 #endif
1015 #ifdef SOURCE_SAR
1016         .f_print        = print_net_eip6_stats,
1017         .f_print_avg    = print_net_eip6_stats,
1018 #endif
1019 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1020         .hdr_line       = "ihdrer6/s;iadrer6/s;iukwnp6/s;i2big6/s;idisc6/s;odisc6/s;"
1021                           "inort6/s;onort6/s;asmf6/s;fragf6/s;itrpck6/s",
1022 #endif
1023 #ifdef SOURCE_SADF
1024         .f_render       = render_net_eip6_stats,
1025         .f_xml_print    = xml_print_net_eip6_stats,
1026         .f_json_print   = json_print_net_eip6_stats,
1027         .f_svg_print    = svg_print_net_eip6_stats,
1028         .f_raw_print    = raw_print_net_eip6_stats,
1029         .name           = "A_NET_EIP6",
1030         .g_nr           = 4,
1031 #endif
1032         .nr             = 1,
1033         .nr2            = 1,
1034         .nr_max         = 1,
1035         .fsize          = STATS_NET_EIP6_SIZE,
1036         .msize          = STATS_NET_EIP6_SIZE,
1037         .opt_flags      = 0,
1038         .buf            = {NULL, NULL, NULL},
1039         .bitmap         = NULL
1040 };
1041
1042 /* ICMPv6 network traffic activity */
1043 struct activity net_icmp6_act = {
1044         .id             = A_NET_ICMP6,
1045         .options        = AO_NULL,
1046         .magic          = ACTIVITY_MAGIC_BASE,
1047         .group          = G_IPV6,
1048 #ifdef SOURCE_SADC
1049         .f_count_index  = -1,
1050         .f_count2       = NULL,
1051         .f_read         = wrap_read_net_icmp6,
1052 #endif
1053 #ifdef SOURCE_SAR
1054         .f_print        = print_net_icmp6_stats,
1055         .f_print_avg    = print_net_icmp6_stats,
1056 #endif
1057 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1058         .hdr_line       = "imsg6/s;omsg6/s;iech6/s;iechr6/s;oechr6/s;igmbq6/s;igmbr6/s;ogmbr6/s;"
1059                           "igmbrd6/s;ogmbrd6/s;irtsol6/s;ortsol6/s;irtad6/s;inbsol6/s;onbsol6/s;"
1060                           "inbad6/s;onbad6/s",
1061 #endif
1062 #ifdef SOURCE_SADF
1063         .f_render       = render_net_icmp6_stats,
1064         .f_xml_print    = xml_print_net_icmp6_stats,
1065         .f_json_print   = json_print_net_icmp6_stats,
1066         .f_svg_print    = svg_print_net_icmp6_stats,
1067         .f_raw_print    = raw_print_net_icmp6_stats,
1068         .name           = "A_NET_ICMP6",
1069         .g_nr           = 5,
1070 #endif
1071         .nr             = 1,
1072         .nr2            = 1,
1073         .nr_max         = 1,
1074         .fsize          = STATS_NET_ICMP6_SIZE,
1075         .msize          = STATS_NET_ICMP6_SIZE,
1076         .opt_flags      = 0,
1077         .buf            = {NULL, NULL, NULL},
1078         .bitmap         = NULL
1079 };
1080
1081 /* ICMPv6 network traffic (errors) activity */
1082 struct activity net_eicmp6_act = {
1083         .id             = A_NET_EICMP6,
1084         .options        = AO_NULL,
1085         .magic          = ACTIVITY_MAGIC_BASE,
1086         .group          = G_IPV6,
1087 #ifdef SOURCE_SADC
1088         .f_count_index  = -1,
1089         .f_count2       = NULL,
1090         .f_read         = wrap_read_net_eicmp6,
1091 #endif
1092 #ifdef SOURCE_SAR
1093         .f_print        = print_net_eicmp6_stats,
1094         .f_print_avg    = print_net_eicmp6_stats,
1095 #endif
1096 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1097         .hdr_line       = "ierr6/s;idtunr6/s;odtunr6/s;itmex6/s;otmex6/s;"
1098                           "iprmpb6/s;oprmpb6/s;iredir6/s;oredir6/s;ipck2b6/s;opck2b6/s",
1099 #endif
1100 #ifdef SOURCE_SADF
1101         .f_render       = render_net_eicmp6_stats,
1102         .f_xml_print    = xml_print_net_eicmp6_stats,
1103         .f_json_print   = json_print_net_eicmp6_stats,
1104         .f_svg_print    = svg_print_net_eicmp6_stats,
1105         .f_raw_print    = raw_print_net_eicmp6_stats,
1106         .name           = "A_NET_EICMP6",
1107         .g_nr           = 6,
1108 #endif
1109         .nr             = 1,
1110         .nr2            = 1,
1111         .nr_max         = 1,
1112         .fsize          = STATS_NET_EICMP6_SIZE,
1113         .msize          = STATS_NET_EICMP6_SIZE,
1114         .opt_flags      = 0,
1115         .buf            = {NULL, NULL, NULL},
1116         .bitmap         = NULL
1117 };
1118
1119 /* UDPv6 network traffic activity */
1120 struct activity net_udp6_act = {
1121         .id             = A_NET_UDP6,
1122         .options        = AO_NULL,
1123         .magic          = ACTIVITY_MAGIC_BASE,
1124         .group          = G_IPV6,
1125 #ifdef SOURCE_SADC
1126         .f_count_index  = -1,
1127         .f_count2       = NULL,
1128         .f_read         = wrap_read_net_udp6,
1129 #endif
1130 #ifdef SOURCE_SAR
1131         .f_print        = print_net_udp6_stats,
1132         .f_print_avg    = print_net_udp6_stats,
1133 #endif
1134 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1135         .hdr_line       = "idgm6/s;odgm6/s;noport6/s;idgmer6/s",
1136 #endif
1137 #ifdef SOURCE_SADF
1138         .f_render       = render_net_udp6_stats,
1139         .f_xml_print    = xml_print_net_udp6_stats,
1140         .f_json_print   = json_print_net_udp6_stats,
1141         .f_svg_print    = svg_print_net_udp6_stats,
1142         .f_raw_print    = raw_print_net_udp6_stats,
1143         .name           = "A_NET_UDP6",
1144         .g_nr           = 2,
1145 #endif
1146         .nr             = 1,
1147         .nr2            = 1,
1148         .nr_max         = 1,
1149         .fsize          = STATS_NET_UDP6_SIZE,
1150         .msize          = STATS_NET_UDP6_SIZE,
1151         .opt_flags      = 0,
1152         .buf            = {NULL, NULL, NULL},
1153         .bitmap         = NULL
1154 };
1155
1156 /* CPU frequency */
1157 struct activity pwr_cpufreq_act = {
1158         .id             = A_PWR_CPUFREQ,
1159         .options        = AO_VOLATILE + AO_GRAPH_PER_ITEM,
1160         .magic          = ACTIVITY_MAGIC_BASE,
1161         .group          = G_POWER,
1162 #ifdef SOURCE_SADC
1163         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1164         .f_count2       = NULL,
1165         .f_read         = wrap_read_cpuinfo,
1166 #endif
1167 #ifdef SOURCE_SAR
1168         .f_print        = print_pwr_cpufreq_stats,
1169         .f_print_avg    = print_avg_pwr_cpufreq_stats,
1170 #endif
1171 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1172         .hdr_line       = "CPU;MHz",
1173 #endif
1174 #ifdef SOURCE_SADF
1175         .f_render       = render_pwr_cpufreq_stats,
1176         .f_xml_print    = xml_print_pwr_cpufreq_stats,
1177         .f_json_print   = json_print_pwr_cpufreq_stats,
1178         .f_svg_print    = svg_print_pwr_cpufreq_stats,
1179         .f_raw_print    = raw_print_pwr_cpufreq_stats,
1180         .name           = "A_PWR_CPUFREQ",
1181         .g_nr           = 1,
1182 #endif
1183         .nr             = -1,
1184         .nr2            = 1,
1185         .nr_max         = NR_CPUS + 1,
1186         .fsize          = STATS_PWR_CPUFREQ_SIZE,
1187         .msize          = STATS_PWR_CPUFREQ_SIZE,
1188         .opt_flags      = 0,
1189         .buf            = {NULL, NULL, NULL},
1190         .bitmap         = &cpu_bitmap
1191 };
1192
1193 /* Fan */
1194 struct activity pwr_fan_act = {
1195         .id             = A_PWR_FAN,
1196         .options        = AO_GRAPH_PER_ITEM,
1197         .magic          = ACTIVITY_MAGIC_BASE,
1198         .group          = G_POWER,
1199 #ifdef SOURCE_SADC
1200         .f_count_index  = 5,    /* wrap_get_fan_nr() */
1201         .f_count2       = NULL,
1202         .f_read         = wrap_read_fan,
1203 #endif
1204 #ifdef SOURCE_SAR
1205         .f_print        = print_pwr_fan_stats,
1206         .f_print_avg    = print_avg_pwr_fan_stats,
1207 #endif
1208 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1209         .hdr_line       = "FAN;DEVICE;rpm;drpm",
1210 #endif
1211 #ifdef SOURCE_SADF
1212         .f_render       = render_pwr_fan_stats,
1213         .f_xml_print    = xml_print_pwr_fan_stats,
1214         .f_json_print   = json_print_pwr_fan_stats,
1215         .f_svg_print    = svg_print_pwr_fan_stats,
1216         .f_raw_print    = raw_print_pwr_fan_stats,
1217         .name           = "A_PWR_FAN",
1218         .g_nr           = 1,
1219 #endif
1220         .nr             = -1,
1221         .nr2            = 1,
1222         .nr_max         = MAX_NR_FANS,
1223         .fsize          = STATS_PWR_FAN_SIZE,
1224         .msize          = STATS_PWR_FAN_SIZE,
1225         .opt_flags      = 0,
1226         .buf            = {NULL, NULL, NULL},
1227         .bitmap         = NULL
1228 };
1229
1230 /* Temperature */
1231 struct activity pwr_temp_act = {
1232         .id             = A_PWR_TEMP,
1233         .options        = AO_GRAPH_PER_ITEM,
1234         .magic          = ACTIVITY_MAGIC_BASE,
1235         .group          = G_POWER,
1236 #ifdef SOURCE_SADC
1237         .f_count_index  = 6,    /* wrap_get_temp_nr() */
1238         .f_count2       = NULL,
1239         .f_read         = wrap_read_temp,
1240 #endif
1241 #ifdef SOURCE_SAR
1242         .f_print        = print_pwr_temp_stats,
1243         .f_print_avg    = print_avg_pwr_temp_stats,
1244 #endif
1245 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1246         .hdr_line       = "TEMP;DEVICE;degC;%temp",
1247 #endif
1248 #ifdef SOURCE_SADF
1249         .f_render       = render_pwr_temp_stats,
1250         .f_xml_print    = xml_print_pwr_temp_stats,
1251         .f_json_print   = json_print_pwr_temp_stats,
1252         .f_svg_print    = svg_print_pwr_temp_stats,
1253         .f_raw_print    = raw_print_pwr_temp_stats,
1254         .name           = "A_PWR_TEMP",
1255         .g_nr           = 2,
1256 #endif
1257         .nr             = -1,
1258         .nr2            = 1,
1259         .nr_max         = MAX_NR_TEMP_SENSORS,
1260         .fsize          = STATS_PWR_TEMP_SIZE,
1261         .msize          = STATS_PWR_TEMP_SIZE,
1262         .opt_flags      = 0,
1263         .buf            = {NULL, NULL, NULL},
1264         .bitmap         = NULL
1265 };
1266
1267 /* Voltage inputs */
1268 struct activity pwr_in_act = {
1269         .id             = A_PWR_IN,
1270         .options        = AO_GRAPH_PER_ITEM,
1271         .magic          = ACTIVITY_MAGIC_BASE,
1272         .group          = G_POWER,
1273 #ifdef SOURCE_SADC
1274         .f_count_index  = 7,    /* wrap_get_in_nr() */
1275         .f_count2       = NULL,
1276         .f_read         = wrap_read_in,
1277 #endif
1278 #ifdef SOURCE_SAR
1279         .f_print        = print_pwr_in_stats,
1280         .f_print_avg    = print_avg_pwr_in_stats,
1281 #endif
1282 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1283         .hdr_line       = "IN;DEVICE;inV;%in",
1284 #endif
1285 #ifdef SOURCE_SADF
1286         .f_render       = render_pwr_in_stats,
1287         .f_xml_print    = xml_print_pwr_in_stats,
1288         .f_json_print   = json_print_pwr_in_stats,
1289         .f_svg_print    = svg_print_pwr_in_stats,
1290         .f_raw_print    = raw_print_pwr_in_stats,
1291         .name           = "A_PWR_IN",
1292         .g_nr           = 2,
1293 #endif
1294         .nr             = -1,
1295         .nr2            = 1,
1296         .nr_max         = MAX_NR_IN_SENSORS,
1297         .fsize          = STATS_PWR_IN_SIZE,
1298         .msize          = STATS_PWR_IN_SIZE,
1299         .opt_flags      = 0,
1300         .buf            = {NULL, NULL, NULL},
1301         .bitmap         = NULL
1302 };
1303
1304 /* Hugepages activity */
1305 struct activity huge_act = {
1306         .id             = A_HUGE,
1307         .options        = AO_COLLECTED,
1308         .magic          = ACTIVITY_MAGIC_BASE,
1309         .group          = G_DEFAULT,
1310 #ifdef SOURCE_SADC
1311         .f_count_index  = -1,
1312         .f_count2       = NULL,
1313         .f_read         = wrap_read_meminfo_huge,
1314 #endif
1315 #ifdef SOURCE_SAR
1316         .f_print        = print_huge_stats,
1317         .f_print_avg    = print_avg_huge_stats,
1318 #endif
1319 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1320         .hdr_line       = "kbhugfree;kbhugused;%hugused",
1321 #endif
1322 #ifdef SOURCE_SADF
1323         .f_render       = render_huge_stats,
1324         .f_xml_print    = xml_print_huge_stats,
1325         .f_json_print   = json_print_huge_stats,
1326         .f_svg_print    = svg_print_huge_stats,
1327         .f_raw_print    = raw_print_huge_stats,
1328         .name           = "A_HUGE",
1329         .g_nr           = 2,
1330 #endif
1331         .nr             = 1,
1332         .nr2            = 1,
1333         .nr_max         = 1,
1334         .fsize          = STATS_HUGE_SIZE,
1335         .msize          = STATS_HUGE_SIZE,
1336         .opt_flags      = 0,
1337         .buf            = {NULL, NULL, NULL},
1338         .bitmap         = NULL
1339 };
1340
1341 /* CPU weighted frequency */
1342 struct activity pwr_wghfreq_act = {
1343         .id             = A_PWR_WGHFREQ,
1344         .options        = AO_VOLATILE,
1345         .magic          = ACTIVITY_MAGIC_BASE,
1346         .group          = G_POWER,
1347 #ifdef SOURCE_SADC
1348         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1349         .f_count2       = wrap_get_freq_nr,
1350         .f_read         = wrap_read_time_in_state,
1351 #endif
1352 #ifdef SOURCE_SAR
1353         .f_print        = print_pwr_wghfreq_stats,
1354         .f_print_avg    = print_pwr_wghfreq_stats,
1355 #endif
1356 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1357         .hdr_line       = "CPU;wghMHz",
1358 #endif
1359 #ifdef SOURCE_SADF
1360         .f_render       = render_pwr_wghfreq_stats,
1361         .f_xml_print    = xml_print_pwr_wghfreq_stats,
1362         .f_json_print   = json_print_pwr_wghfreq_stats,
1363         .f_raw_print    = raw_print_pwr_wghfreq_stats,
1364         .name           = "A_PWR_WGHFREQ",
1365         .g_nr           = 0,
1366 #endif
1367         .nr             = -1,
1368         .nr2            = -1,
1369         .nr_max         = NR_CPUS + 1,
1370         .fsize          = STATS_PWR_WGHFREQ_SIZE,
1371         .msize          = STATS_PWR_WGHFREQ_SIZE,
1372         .opt_flags      = 0,
1373         .buf            = {NULL, NULL, NULL},
1374         .bitmap         = &cpu_bitmap
1375 };
1376
1377 /* USB devices plugged into the system */
1378 struct activity pwr_usb_act = {
1379         .id             = A_PWR_USB,
1380         .options        = AO_CLOSE_MARKUP,
1381         .magic          = ACTIVITY_MAGIC_BASE,
1382         .group          = G_POWER,
1383 #ifdef SOURCE_SADC
1384         .f_count_index  = 8,    /* wrap_get_usb_nr() */
1385         .f_count2       = NULL,
1386         .f_read         = wrap_read_bus_usb_dev,
1387 #endif
1388 #ifdef SOURCE_SAR
1389         .f_print        = print_pwr_usb_stats,
1390         .f_print_avg    = print_avg_pwr_usb_stats,
1391 #endif
1392 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1393         .hdr_line       = "manufact;product;BUS;idvendor;idprod;maxpower",
1394 #endif
1395 #ifdef SOURCE_SADF
1396         .f_render       = render_pwr_usb_stats,
1397         .f_xml_print    = xml_print_pwr_usb_stats,
1398         .f_json_print   = json_print_pwr_usb_stats,
1399         .f_raw_print    = raw_print_pwr_usb_stats,
1400         .name           = "A_PWR_USB",
1401         .g_nr           = 0,
1402 #endif
1403         .nr             = -1,
1404         .nr2            = 1,
1405         .nr_max         = MAX_NR_USB,
1406         .fsize          = STATS_PWR_USB_SIZE,
1407         .msize          = STATS_PWR_USB_SIZE,
1408         .opt_flags      = 0,
1409         .buf            = {NULL, NULL, NULL},
1410         .bitmap         = NULL
1411 };
1412
1413 /* Filesystem usage activity */
1414 struct activity filesystem_act = {
1415         .id             = A_FILESYSTEM,
1416         .options        = AO_GRAPH_PER_ITEM + AO_MULTIPLE_OUTPUTS,
1417         .magic          = ACTIVITY_MAGIC_BASE,
1418         .group          = G_XDISK,
1419 #ifdef SOURCE_SADC
1420         .f_count_index  = 9,    /* wrap_get_filesystem_nr() */
1421         .f_count2       = NULL,
1422         .f_read         = wrap_read_filesystem,
1423 #endif
1424 #ifdef SOURCE_SAR
1425         .f_print        = print_filesystem_stats,
1426         .f_print_avg    = print_avg_filesystem_stats,
1427 #endif
1428 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1429         .hdr_line       = "FILESYSTEM;MBfsfree;MBfsused;%fsused;%ufsused;Ifree;Iused;%Iused|"
1430                           "MOUNTPOINT;MBfsfree;MBfsused;%fsused;%ufsused;Ifree;Iused;%Iused",
1431 #endif
1432 #ifdef SOURCE_SADF
1433         .f_render       = render_filesystem_stats,
1434         .f_xml_print    = xml_print_filesystem_stats,
1435         .f_json_print   = json_print_filesystem_stats,
1436         .f_svg_print    = svg_print_filesystem_stats,
1437         .f_raw_print    = raw_print_filesystem_stats,
1438         .name           = "A_FILESYSTEM",
1439         .g_nr           = 4,
1440 #endif
1441         .nr             = -1,
1442         .nr2            = 1,
1443         .nr_max         = MAX_NR_FS,
1444         .fsize          = STATS_FILESYSTEM_SIZE,
1445         .msize          = STATS_FILESYSTEM_SIZE,
1446         .opt_flags      = 0,
1447         .buf            = {NULL, NULL, NULL},
1448         .bitmap         = NULL
1449 };
1450
1451 /* Fibre Channel HBA usage activity */
1452 struct activity fchost_act = {
1453         .id             = A_NET_FC,
1454         .options        = AO_GRAPH_PER_ITEM,
1455         .magic          = ACTIVITY_MAGIC_BASE,
1456         .group          = G_DISK,
1457 #ifdef SOURCE_SADC
1458         .f_count_index  = 10,   /* wrap_get_fchost_nr() */
1459         .f_count2       = NULL,
1460         .f_read         = wrap_read_fchost,
1461 #endif
1462 #ifdef SOURCE_SAR
1463         .f_print        = print_fchost_stats,
1464         .f_print_avg    = print_fchost_stats,
1465 #endif
1466 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1467         .hdr_line       = "FCHOST;fch_rxf/s;fch_txf/s;fch_rxw/s;fch_txw/s",
1468 #endif
1469 #ifdef SOURCE_SADF
1470         .f_render       = render_fchost_stats,
1471         .f_xml_print    = xml_print_fchost_stats,
1472         .f_json_print   = json_print_fchost_stats,
1473         .f_svg_print    = svg_print_fchost_stats,
1474         .f_raw_print    = raw_print_fchost_stats,
1475         .name           = "A_FCHOST",
1476         .g_nr           = 2,
1477 #endif
1478         .nr             = -1,
1479         .nr2            = 1,
1480         .nr_max         = MAX_NR_FCHOSTS,
1481         .fsize          = STATS_FCHOST_SIZE,
1482         .msize          = STATS_FCHOST_SIZE,
1483         .opt_flags      = 0,
1484         .buf            = {NULL, NULL, NULL},
1485         .bitmap         = NULL
1486 };
1487
1488 /* Softnet activity */
1489 struct activity softnet_act = {
1490         .id             = A_NET_SOFT,
1491         .options        = AO_COLLECTED + AO_CLOSE_MARKUP + AO_GRAPH_PER_ITEM,
1492         .magic          = ACTIVITY_MAGIC_BASE,
1493         .group          = G_DEFAULT,
1494 #ifdef SOURCE_SADC
1495         .f_count_index  = 0,    /* wrap_get_cpu_nr() */
1496         .f_count2       = NULL,
1497         .f_read         = wrap_read_softnet,
1498 #endif
1499 #ifdef SOURCE_SAR
1500         .f_print        = print_softnet_stats,
1501         .f_print_avg    = print_softnet_stats,
1502 #endif
1503 #if defined(SOURCE_SAR) || defined(SOURCE_SADF)
1504         .hdr_line       = "CPU;total/s;dropd/s;squeezd/s;rx_rps/s;flw_lim/s",
1505 #endif
1506 #ifdef SOURCE_SADF
1507         .f_render       = render_softnet_stats,
1508         .f_xml_print    = xml_print_softnet_stats,
1509         .f_json_print   = json_print_softnet_stats,
1510         .f_svg_print    = svg_print_softnet_stats,
1511         .f_raw_print    = raw_print_softnet_stats,
1512         .name           = "A_NET_SOFT",
1513         .g_nr           = 2,
1514 #endif
1515         .nr             = -1,
1516         .nr2            = 1,
1517         .nr_max         = NR_CPUS + 1,
1518         .fsize          = STATS_SOFTNET_SIZE,
1519         .msize          = STATS_SOFTNET_SIZE,
1520         .opt_flags      = 0,
1521         .buf            = {NULL, NULL, NULL},
1522         .bitmap         = &cpu_bitmap
1523 };
1524
1525 #ifdef SOURCE_SADC
1526 /*
1527  * Array of functions used to count number of items.
1528  */
1529 __nr_t (*f_count[NR_F_COUNT]) (struct activity *) = {
1530         wrap_get_cpu_nr,
1531         wrap_get_irq_nr,
1532         wrap_get_serial_nr,
1533         wrap_get_disk_nr,
1534         wrap_get_iface_nr,
1535         wrap_get_fan_nr,
1536         wrap_get_temp_nr,
1537         wrap_get_in_nr,
1538         wrap_get_usb_nr,
1539         wrap_get_filesystem_nr,
1540         wrap_get_fchost_nr
1541 };
1542 #endif
1543
1544 /*
1545  * Array of activities.
1546  * (Order of activities doesn't matter for daily data files).
1547  */
1548 struct activity *act[NR_ACT] = {
1549         &cpu_act,
1550         &pcsw_act,
1551         &irq_act,
1552         &swap_act,
1553         &paging_act,
1554         &io_act,
1555         &memory_act,
1556         &huge_act,
1557         &ktables_act,
1558         &queue_act,
1559         &serial_act,
1560         &disk_act,
1561         /* <network> */
1562         &net_dev_act,
1563         &net_edev_act,
1564         &net_nfs_act,
1565         &net_nfsd_act,
1566         &net_sock_act,
1567         &net_ip_act,
1568         &net_eip_act,
1569         &net_icmp_act,
1570         &net_eicmp_act,
1571         &net_tcp_act,
1572         &net_etcp_act,
1573         &net_udp_act,
1574         &net_sock6_act,
1575         &net_ip6_act,
1576         &net_eip6_act,
1577         &net_icmp6_act,
1578         &net_eicmp6_act,
1579         &net_udp6_act,
1580         &fchost_act,
1581         &softnet_act,   /* AO_CLOSE_MARKUP */
1582         /* </network> */
1583         /* <power-management> */
1584         &pwr_cpufreq_act,
1585         &pwr_fan_act,
1586         &pwr_temp_act,
1587         &pwr_in_act,
1588         &pwr_wghfreq_act,
1589         &pwr_usb_act,           /* AO_CLOSE_MARKUP */
1590         /* </power-management> */
1591         &filesystem_act
1592 };