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