]> granicus.if.org Git - sysstat/blob - activity.c
Added hugepages utilization statistics.
[sysstat] / activity.c
1 /*
2  * activity.c: Define system activities available for sar/sadc.
3  * (C) 1999-2010 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  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA                   *
19  ***************************************************************************
20  */
21
22 #include "sa.h"
23
24 #ifdef SOURCE_SADC
25 #include "rd_stats.h"
26 #endif
27
28 #ifdef SOURCE_SAR
29 #include "pr_stats.h"
30 #endif
31
32 #ifdef SOURCE_SADF
33 #include "prf_stats.h"
34 #endif
35
36 /*
37  ***************************************************************************
38  * Definitions of system activities.
39  * See sa.h file for activity structure definition.
40  ***************************************************************************
41  */
42
43 /*
44  * Bitmaps needed by activities.
45  * Remember to allocate them before use!
46  */
47
48 /* CPU bitmap */
49 struct act_bitmap cpu_bitmap = {
50         .b_array        = NULL,
51         .b_size         = NR_CPUS
52 };
53
54 /* Interrupts bitmap */
55 struct act_bitmap irq_bitmap = {
56         .b_array        = NULL,
57         .b_size         = NR_IRQS
58 };
59
60
61 /*
62  * CPU statistics.
63  * This is the only activity which *must* be collected by sadc
64  * so that uptime can be filled.
65  */
66 struct activity cpu_act = {
67         .id             = A_CPU,
68         .options        = AO_COLLECTED + AO_REMANENT + AO_GLOBAL_ITV + AO_MULTIPLE_OUTPUTS,
69 #ifdef SOURCE_SADC
70         .f_count        = wrap_get_cpu_nr,
71         .f_read         = wrap_read_stat_cpu,
72 #endif
73 #ifdef SOURCE_SAR
74         .f_print        = print_cpu_stats,
75         .f_print_avg    = print_cpu_stats,
76 #endif
77 #ifdef SOURCE_SADF
78         .f_render       = render_cpu_stats,
79         .f_xml_print    = xml_print_cpu_stats,
80         .hdr_line       = "CPU;%user;%nice;%system;%iowait;%steal;%idle|"
81                           "CPU;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle",
82         .name           = "A_CPU",
83 #endif
84         .nr             = -1,
85         .fsize          = STATS_CPU_SIZE,
86         .msize          = STATS_CPU_SIZE,
87         .opt_flags      = AO_F_CPU_DEF,
88         .buf            = {NULL, NULL, NULL},
89         .bitmap         = &cpu_bitmap
90 };
91
92 /* Process (task) creation and context switch activity */
93 struct activity pcsw_act = {
94         .id             = A_PCSW,
95         .options        = AO_COLLECTED,
96 #ifdef SOURCE_SADC
97         .f_count        = NULL,
98         .f_read         = wrap_read_stat_pcsw,
99 #endif
100 #ifdef SOURCE_SAR
101         .f_print        = print_pcsw_stats,
102         .f_print_avg    = print_pcsw_stats,
103 #endif
104 #ifdef SOURCE_SADF
105         .f_render       = render_pcsw_stats,
106         .f_xml_print    = xml_print_pcsw_stats,
107         .hdr_line       = "proc/s;cswch/s",
108         .name           = "A_PCSW",
109 #endif
110         .nr             = 1,
111         .fsize          = STATS_PCSW_SIZE,
112         .msize          = STATS_PCSW_SIZE,
113         .opt_flags      = 0,
114         .buf            = {NULL, NULL, NULL},
115         .bitmap         = NULL
116 };
117
118 /* Interrupts statistics */
119 struct activity irq_act = {
120         .id             = A_IRQ,
121         .options        = AO_NULL,
122 #ifdef SOURCE_SADC
123         .f_count        = wrap_get_irq_nr,
124         .f_read         = wrap_read_stat_irq,
125 #endif
126 #ifdef SOURCE_SAR
127         .f_print        = print_irq_stats,
128         .f_print_avg    = print_irq_stats,
129 #endif
130 #ifdef SOURCE_SADF
131         .f_render       = render_irq_stats,
132         .f_xml_print    = xml_print_irq_stats,
133         .hdr_line       = "INTR;intr/s",
134         .name           = "A_IRQ",
135 #endif
136         .nr             = -1,
137         .fsize          = STATS_IRQ_SIZE,
138         .msize          = STATS_IRQ_SIZE,
139         .opt_flags      = 0,
140         .buf            = {NULL, NULL, NULL},
141         .bitmap         = &irq_bitmap
142 };
143
144 /* Swapping activity */
145 struct activity swap_act = {
146         .id             = A_SWAP,
147         .options        = AO_COLLECTED,
148 #ifdef SOURCE_SADC
149         .f_count        = NULL,
150         .f_read         = wrap_read_swap,
151 #endif
152 #ifdef SOURCE_SAR
153         .f_print        = print_swap_stats,
154         .f_print_avg    = print_swap_stats,
155 #endif
156 #ifdef SOURCE_SADF
157         .f_render       = render_swap_stats,
158         .f_xml_print    = xml_print_swap_stats,
159         .hdr_line       = "pswpin/s;pswpout/s",
160         .name           = "A_SWAP",
161 #endif
162         .nr             = 1,
163         .fsize          = STATS_SWAP_SIZE,
164         .msize          = STATS_SWAP_SIZE,
165         .opt_flags      = 0,
166         .buf            = {NULL, NULL, NULL},
167         .bitmap         = NULL
168 };
169
170 /* Paging activity */
171 struct activity paging_act = {
172         .id             = A_PAGE,
173         .options        = AO_COLLECTED,
174 #ifdef SOURCE_SADC
175         .f_count        = NULL,
176         .f_read         = wrap_read_paging,
177 #endif
178 #ifdef SOURCE_SAR
179         .f_print        = print_paging_stats,
180         .f_print_avg    = print_paging_stats,
181 #endif
182 #ifdef SOURCE_SADF
183         .f_render       = render_paging_stats,
184         .f_xml_print    = xml_print_paging_stats,
185         .hdr_line       = "pgpgin/s;pgpgout/s;fault/s;majflt/s;"
186                           "pgfree/s;pgscank/s;pgscand/s;pgsteal/s;%vmeff",
187         .name           = "A_PAGE",
188 #endif
189         .nr             = 1,
190         .fsize          = STATS_PAGING_SIZE,
191         .msize          = STATS_PAGING_SIZE,
192         .opt_flags      = 0,
193         .buf            = {NULL, NULL, NULL},
194         .bitmap         = NULL
195 };
196
197 /* I/O and transfer rate activity */
198 struct activity io_act = {
199         .id             = A_IO,
200         .options        = AO_COLLECTED,
201 #ifdef SOURCE_SADC
202         .f_count        = NULL,
203         .f_read         = wrap_read_io,
204 #endif
205 #ifdef SOURCE_SAR
206         .f_print        = print_io_stats,
207         .f_print_avg    = print_io_stats,
208 #endif
209 #ifdef SOURCE_SADF
210         .f_render       = render_io_stats,
211         .f_xml_print    = xml_print_io_stats,
212         .hdr_line       = "tps;rtps;wtps;bread/s;bwrtn/s",
213         .name           = "A_IO",
214 #endif
215         .nr             = 1,
216         .fsize          = STATS_IO_SIZE,
217         .msize          = STATS_IO_SIZE,
218         .opt_flags      = 0,
219         .buf            = {NULL, NULL, NULL},
220         .bitmap         = NULL
221 };
222
223 /* Memory and swap space utilization activity */
224 struct activity memory_act = {
225         .id             = A_MEMORY,
226         .options        = AO_COLLECTED + AO_MULTIPLE_OUTPUTS,
227 #ifdef SOURCE_SADC
228         .f_count        = NULL,
229         .f_read         = wrap_read_meminfo,
230 #endif
231 #ifdef SOURCE_SAR
232         .f_print        = print_memory_stats,
233         .f_print_avg    = print_avg_memory_stats,
234 #endif
235 #ifdef SOURCE_SADF
236         .f_render       = render_memory_stats,
237         .f_xml_print    = xml_print_memory_stats,
238         .hdr_line       = "frmpg/s;bufpg/s;campg/s|"
239                           "kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit|"
240                           "kbswpfree;kbswpused;%swpused;kbswpcad;%swpcad|"
241                           "kbhugfree;kbhugused;%hugused",
242         .name           = "A_MEMORY",
243 #endif
244         .nr             = 1,
245         .fsize          = STATS_MEMORY_SIZE,
246         .msize          = STATS_MEMORY_SIZE,
247         .opt_flags      = 0,
248         .buf            = {NULL, NULL, NULL},
249         .bitmap         = NULL
250 };
251
252 /* Kernel tables activity */
253 struct activity ktables_act = {
254         .id             = A_KTABLES,
255         .options        = AO_COLLECTED,
256 #ifdef SOURCE_SADC
257         .f_count        = NULL,
258         .f_read         = wrap_read_kernel_tables,
259 #endif
260 #ifdef SOURCE_SAR
261         .f_print        = print_ktables_stats,
262         .f_print_avg    = print_avg_ktables_stats,
263 #endif
264 #ifdef SOURCE_SADF
265         .f_render       = render_ktables_stats,
266         .f_xml_print    = xml_print_ktables_stats,
267         .hdr_line       = "dentunusd;file-nr;inode-nr;pty-nr",
268         .name           = "A_KTABLES",
269 #endif
270         .nr             = 1,
271         .fsize          = STATS_KTABLES_SIZE,
272         .msize          = STATS_KTABLES_SIZE,
273         .opt_flags      = 0,
274         .buf            = {NULL, NULL, NULL},
275         .bitmap         = NULL
276 };
277
278 /* Queue and load activity */
279 struct activity queue_act = {
280         .id             = A_QUEUE,
281         .options        = AO_COLLECTED,
282 #ifdef SOURCE_SADC
283         .f_count        = NULL,
284         .f_read         = wrap_read_loadavg,
285 #endif
286 #ifdef SOURCE_SAR
287         .f_print        = print_queue_stats,
288         .f_print_avg    = print_avg_queue_stats,
289 #endif
290 #ifdef SOURCE_SADF
291         .f_render       = render_queue_stats,
292         .f_xml_print    = xml_print_queue_stats,
293         .hdr_line       = "runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15",
294         .name           = "A_QUEUE",
295 #endif
296         .nr             = 1,
297         .fsize          = STATS_QUEUE_SIZE,
298         .msize          = STATS_QUEUE_SIZE,
299         .opt_flags      = 0,
300         .buf            = {NULL, NULL, NULL},
301         .bitmap         = NULL
302 };
303
304 /* Serial lines activity */
305 struct activity serial_act = {
306         .id             = A_SERIAL,
307         .options        = AO_COLLECTED,
308 #ifdef SOURCE_SADC
309         .f_count        = wrap_get_serial_nr,
310         .f_read         = wrap_read_tty_driver_serial,
311 #endif
312 #ifdef SOURCE_SAR
313         .f_print        = print_serial_stats,
314         .f_print_avg    = print_serial_stats,
315 #endif
316 #ifdef SOURCE_SADF
317         .f_render       = render_serial_stats,
318         .f_xml_print    = xml_print_serial_stats,
319         .hdr_line       = "TTY;rcvin/s;txmtin/s;framerr/s;prtyerr/s;brk/s;ovrun/s",
320         .name           = "A_SERIAL",
321 #endif
322         .nr             = -1,
323         .fsize          = STATS_SERIAL_SIZE,
324         .msize          = STATS_SERIAL_SIZE,
325         .opt_flags      = 0,
326         .buf            = {NULL, NULL, NULL},
327         .bitmap         = NULL
328 };
329
330 /* Block devices activity */
331 struct activity disk_act = {
332         .id             = A_DISK,
333         .options        = AO_NULL,
334 #ifdef SOURCE_SADC
335         .f_count        = wrap_get_disk_nr,
336         .f_read         = wrap_read_disk,
337 #endif
338 #ifdef SOURCE_SAR
339         .f_print        = print_disk_stats,
340         .f_print_avg    = print_disk_stats,
341 #endif
342 #ifdef SOURCE_SADF
343         .f_render       = render_disk_stats,
344         .f_xml_print    = xml_print_disk_stats,
345         .hdr_line       = "DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util",
346         .name           = "A_DISK",
347 #endif
348         .nr             = -1,
349         .fsize          = STATS_DISK_SIZE,
350         .msize          = STATS_DISK_SIZE,
351         .opt_flags      = 0,
352         .buf            = {NULL, NULL, NULL},
353         .bitmap         = NULL
354 };
355
356 /* Network interfaces activity */
357 struct activity net_dev_act = {
358         .id             = A_NET_DEV,
359         .options        = AO_COLLECTED,
360 #ifdef SOURCE_SADC
361         .f_count        = wrap_get_iface_nr,
362         .f_read         = wrap_read_net_dev,
363 #endif
364 #ifdef SOURCE_SAR
365         .f_print        = print_net_dev_stats,
366         .f_print_avg    = print_net_dev_stats,
367 #endif
368 #ifdef SOURCE_SADF
369         .f_render       = render_net_dev_stats,
370         .f_xml_print    = xml_print_net_dev_stats,
371         .hdr_line       = "IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s",
372         .name           = "A_NET_DEV",
373 #endif
374         .nr             = -1,
375         .fsize          = STATS_NET_DEV_SIZE,
376         .msize          = STATS_NET_DEV_SIZE,
377         .opt_flags      = 0,
378         .buf            = {NULL, NULL, NULL},
379         .bitmap         = NULL
380 };
381
382 /* Network interfaces activity */
383 struct activity net_edev_act = {
384         .id             = A_NET_EDEV,
385         .options        = AO_COLLECTED,
386 #ifdef SOURCE_SADC
387         .f_count        = wrap_get_iface_nr,
388         .f_read         = wrap_read_net_edev,
389 #endif
390 #ifdef SOURCE_SAR
391         .f_print        = print_net_edev_stats,
392         .f_print_avg    = print_net_edev_stats,
393 #endif
394 #ifdef SOURCE_SADF
395         .f_render       = render_net_edev_stats,
396         .f_xml_print    = xml_print_net_edev_stats,
397         .hdr_line       = "IFACE;rxerr/s;txerr/s;coll/s;rxdrop/s;txdrop/s;"
398                           "txcarr/s;rxfram/s;rxfifo/s;txfifo/s",
399         .name           = "A_NET_EDEV",
400 #endif
401         .nr             = -1,
402         .fsize          = STATS_NET_EDEV_SIZE,
403         .msize          = STATS_NET_EDEV_SIZE,
404         .opt_flags      = 0,
405         .buf            = {NULL, NULL, NULL},
406         .bitmap         = NULL
407 };
408
409 /* NFS client activity */
410 struct activity net_nfs_act = {
411         .id             = A_NET_NFS,
412         .options        = AO_COLLECTED,
413 #ifdef SOURCE_SADC
414         .f_count        = NULL,
415         .f_read         = wrap_read_net_nfs,
416 #endif
417 #ifdef SOURCE_SAR
418         .f_print        = print_net_nfs_stats,
419         .f_print_avg    = print_net_nfs_stats,
420 #endif
421 #ifdef SOURCE_SADF
422         .f_render       = render_net_nfs_stats,
423         .f_xml_print    = xml_print_net_nfs_stats,
424         .hdr_line       = "call/s;retrans/s;read/s;write/s;access/s;getatt/s",
425         .name           = "A_NET_NFS",
426 #endif
427         .nr             = 1,
428         .fsize          = STATS_NET_NFS_SIZE,
429         .msize          = STATS_NET_NFS_SIZE,
430         .opt_flags      = 0,
431         .buf            = {NULL, NULL, NULL},
432         .bitmap         = NULL
433 };
434
435 /* NFS server activity */
436 struct activity net_nfsd_act = {
437         .id             = A_NET_NFSD,
438         .options        = AO_COLLECTED,
439 #ifdef SOURCE_SADC
440         .f_count        = NULL,
441         .f_read         = wrap_read_net_nfsd,
442 #endif
443 #ifdef SOURCE_SAR
444         .f_print        = print_net_nfsd_stats,
445         .f_print_avg    = print_net_nfsd_stats,
446 #endif
447 #ifdef SOURCE_SADF
448         .f_render       = render_net_nfsd_stats,
449         .f_xml_print    = xml_print_net_nfsd_stats,
450         .hdr_line       = "scall/s;badcall/s;packet/s;udp/s;tcp/s;hit/s;miss/s;"
451                           "sread/s;swrite/s;saccess/s;sgetatt/s",
452         .name           = "A_NET_NFSD",
453 #endif
454         .nr             = 1,
455         .fsize          = STATS_NET_NFSD_SIZE,
456         .msize          = STATS_NET_NFSD_SIZE,
457         .opt_flags      = 0,
458         .buf            = {NULL, NULL, NULL},
459         .bitmap         = NULL
460 };
461
462 /* Network sockets activity */
463 struct activity net_sock_act = {
464         .id             = A_NET_SOCK,
465         .options        = AO_COLLECTED,
466 #ifdef SOURCE_SADC
467         .f_count        = NULL,
468         .f_read         = wrap_read_net_sock,
469 #endif
470 #ifdef SOURCE_SAR
471         .f_print        = print_net_sock_stats,
472         .f_print_avg    = print_avg_net_sock_stats,
473 #endif
474 #ifdef SOURCE_SADF
475         .f_render       = render_net_sock_stats,
476         .f_xml_print    = xml_print_net_sock_stats,
477         .hdr_line       = "totsck;tcpsck;udpsck;rawsck;ip-frag;tcp-tw",
478         .name           = "A_NET_SOCK",
479 #endif
480         .nr             = 1,
481         .fsize          = STATS_NET_SOCK_SIZE,
482         .msize          = STATS_NET_SOCK_SIZE,
483         .opt_flags      = 0,
484         .buf            = {NULL, NULL, NULL},
485         .bitmap         = NULL
486 };
487
488 /* IP network traffic activity */
489 struct activity net_ip_act = {
490         .id             = A_NET_IP,
491         .options        = AO_NULL,
492 #ifdef SOURCE_SADC
493         .f_count        = NULL,
494         .f_read         = wrap_read_net_ip,
495 #endif
496 #ifdef SOURCE_SAR
497         .f_print        = print_net_ip_stats,
498         .f_print_avg    = print_net_ip_stats,
499 #endif
500 #ifdef SOURCE_SADF
501         .f_render       = render_net_ip_stats,
502         .f_xml_print    = xml_print_net_ip_stats,
503         .hdr_line       = "irec/s;fwddgm/s;idel/s;orq/s;asmrq/s;asmok/s;fragok/s;fragcrt/s",
504         .name           = "A_NET_IP",
505 #endif
506         .nr             = 1,
507         .fsize          = STATS_NET_IP_SIZE,
508         .msize          = STATS_NET_IP_SIZE,
509         .opt_flags      = 0,
510         .buf            = {NULL, NULL, NULL},
511         .bitmap         = NULL
512 };
513
514 /* IP network traffic (errors) activity */
515 struct activity net_eip_act = {
516         .id             = A_NET_EIP,
517         .options        = AO_NULL,
518 #ifdef SOURCE_SADC
519         .f_count        = NULL,
520         .f_read         = wrap_read_net_eip,
521 #endif
522 #ifdef SOURCE_SAR
523         .f_print        = print_net_eip_stats,
524         .f_print_avg    = print_net_eip_stats,
525 #endif
526 #ifdef SOURCE_SADF
527         .f_render       = render_net_eip_stats,
528         .f_xml_print    = xml_print_net_eip_stats,
529         .hdr_line       = "ihdrerr/s;iadrerr/s;iukwnpr/s;idisc/s;odisc/s;onort/s;asmf/s;fragf/s",
530         .name           = "A_NET_EIP",
531 #endif
532         .nr             = 1,
533         .fsize          = STATS_NET_EIP_SIZE,
534         .msize          = STATS_NET_EIP_SIZE,
535         .opt_flags      = 0,
536         .buf            = {NULL, NULL, NULL},
537         .bitmap         = NULL
538 };
539
540 /* ICMP network traffic activity */
541 struct activity net_icmp_act = {
542         .id             = A_NET_ICMP,
543         .options        = AO_NULL,
544 #ifdef SOURCE_SADC
545         .f_count        = NULL,
546         .f_read         = wrap_read_net_icmp,
547 #endif
548 #ifdef SOURCE_SAR
549         .f_print        = print_net_icmp_stats,
550         .f_print_avg    = print_net_icmp_stats,
551 #endif
552 #ifdef SOURCE_SADF
553         .f_render       = render_net_icmp_stats,
554         .f_xml_print    = xml_print_net_icmp_stats,
555         .hdr_line       = "imsg/s;omsg/s;iech/s;iechr/s;oech/s;oechr/s;itm/s;itmr/s;otm/s;"
556                           "otmr/s;iadrmk/s;iadrmkr/s;oadrmk/s;oadrmkr/s",
557         .name           = "A_NET_ICMP",
558 #endif
559         .nr             = 1,
560         .fsize          = STATS_NET_ICMP_SIZE,
561         .msize          = STATS_NET_ICMP_SIZE,
562         .opt_flags      = 0,
563         .buf            = {NULL, NULL, NULL},
564         .bitmap         = NULL
565 };
566
567 /* ICMP network traffic (errors) activity */
568 struct activity net_eicmp_act = {
569         .id             = A_NET_EICMP,
570         .options        = AO_NULL,
571 #ifdef SOURCE_SADC
572         .f_count        = NULL,
573         .f_read         = wrap_read_net_eicmp,
574 #endif
575 #ifdef SOURCE_SAR
576         .f_print        = print_net_eicmp_stats,
577         .f_print_avg    = print_net_eicmp_stats,
578 #endif
579 #ifdef SOURCE_SADF
580         .f_render       = render_net_eicmp_stats,
581         .f_xml_print    = xml_print_net_eicmp_stats,
582         .hdr_line       = "ierr/s;oerr/s;idstunr/s;odstunr/s;itmex/s;otmex/s;"
583                           "iparmpb/s;oparmpb/s;isrcq/s;osrcq/s;iredir/s;oredir/s",
584         .name           = "A_NET_EICMP",
585 #endif
586         .nr             = 1,
587         .fsize          = STATS_NET_EICMP_SIZE,
588         .msize          = STATS_NET_EICMP_SIZE,
589         .opt_flags      = 0,
590         .buf            = {NULL, NULL, NULL},
591         .bitmap         = NULL
592 };
593
594 /* TCP network traffic activity */
595 struct activity net_tcp_act = {
596         .id             = A_NET_TCP,
597         .options        = AO_NULL,
598 #ifdef SOURCE_SADC
599         .f_count        = NULL,
600         .f_read         = wrap_read_net_tcp,
601 #endif
602 #ifdef SOURCE_SAR
603         .f_print        = print_net_tcp_stats,
604         .f_print_avg    = print_net_tcp_stats,
605 #endif
606 #ifdef SOURCE_SADF
607         .f_render       = render_net_tcp_stats,
608         .f_xml_print    = xml_print_net_tcp_stats,
609         .hdr_line       = "active/s;passive/s;iseg/s;oseg/s",
610         .name           = "A_NET_TCP",
611 #endif
612         .nr             = 1,
613         .fsize          = STATS_NET_TCP_SIZE,
614         .msize          = STATS_NET_TCP_SIZE,
615         .opt_flags      = 0,
616         .buf            = {NULL, NULL, NULL},
617         .bitmap         = NULL
618 };
619
620 /* TCP network traffic (errors) activity */
621 struct activity net_etcp_act = {
622         .id             = A_NET_ETCP,
623         .options        = AO_NULL,
624 #ifdef SOURCE_SADC
625         .f_count        = NULL,
626         .f_read         = wrap_read_net_etcp,
627 #endif
628 #ifdef SOURCE_SAR
629         .f_print        = print_net_etcp_stats,
630         .f_print_avg    = print_net_etcp_stats,
631 #endif
632 #ifdef SOURCE_SADF
633         .f_render       = render_net_etcp_stats,
634         .f_xml_print    = xml_print_net_etcp_stats,
635         .hdr_line       = "atmptf/s;estres/s;retrans/s;isegerr/s;orsts/s",
636         .name           = "A_NET_ETCP",
637 #endif
638         .nr             = 1,
639         .fsize          = STATS_NET_ETCP_SIZE,
640         .msize          = STATS_NET_ETCP_SIZE,
641         .opt_flags      = 0,
642         .buf            = {NULL, NULL, NULL},
643         .bitmap         = NULL
644 };
645
646 /* UDP network traffic activity */
647 struct activity net_udp_act = {
648         .id             = A_NET_UDP,
649         .options        = AO_NULL,
650 #ifdef SOURCE_SADC
651         .f_count        = NULL,
652         .f_read         = wrap_read_net_udp,
653 #endif
654 #ifdef SOURCE_SAR
655         .f_print        = print_net_udp_stats,
656         .f_print_avg    = print_net_udp_stats,
657 #endif
658 #ifdef SOURCE_SADF
659         .f_render       = render_net_udp_stats,
660         .f_xml_print    = xml_print_net_udp_stats,
661         .hdr_line       = "idgm/s;odgm/s;noport/s;idgmerr/s",
662         .name           = "A_NET_UDP",
663 #endif
664         .nr             = 1,
665         .fsize          = STATS_NET_UDP_SIZE,
666         .msize          = STATS_NET_UDP_SIZE,
667         .opt_flags      = 0,
668         .buf            = {NULL, NULL, NULL},
669         .bitmap         = NULL
670 };
671
672 /* IPv6 sockets activity */
673 struct activity net_sock6_act = {
674         .id             = A_NET_SOCK6,
675         .options        = AO_NULL,
676 #ifdef SOURCE_SADC
677         .f_count        = NULL,
678         .f_read         = wrap_read_net_sock6,
679 #endif
680 #ifdef SOURCE_SAR
681         .f_print        = print_net_sock6_stats,
682         .f_print_avg    = print_avg_net_sock6_stats,
683 #endif
684 #ifdef SOURCE_SADF
685         .f_render       = render_net_sock6_stats,
686         .f_xml_print    = xml_print_net_sock6_stats,
687         .hdr_line       = "tcp6sck;udp6sck;raw6sck;ip6-frag",
688         .name           = "A_NET_SOCK6",
689 #endif
690         .nr             = 1,
691         .fsize          = STATS_NET_SOCK6_SIZE,
692         .msize          = STATS_NET_SOCK6_SIZE,
693         .opt_flags      = 0,
694         .buf            = {NULL, NULL, NULL},
695         .bitmap         = NULL
696 };
697
698 /* IPv6 network traffic activity */
699 struct activity net_ip6_act = {
700         .id             = A_NET_IP6,
701         .options        = AO_NULL,
702 #ifdef SOURCE_SADC
703         .f_count        = NULL,
704         .f_read         = wrap_read_net_ip6,
705 #endif
706 #ifdef SOURCE_SAR
707         .f_print        = print_net_ip6_stats,
708         .f_print_avg    = print_net_ip6_stats,
709 #endif
710 #ifdef SOURCE_SADF
711         .f_render       = render_net_ip6_stats,
712         .f_xml_print    = xml_print_net_ip6_stats,
713         .hdr_line       = "irec6/s;fwddgm6/s;idel6/s;orq6/s;asmrq6/s;asmok6/s;"
714                           "imcpck6/s;omcpck6/s;fragok6/s;fragcr6/s",
715         .name           = "A_NET_IP6",
716 #endif
717         .nr             = 1,
718         .fsize          = STATS_NET_IP6_SIZE,
719         .msize          = STATS_NET_IP6_SIZE,
720         .opt_flags      = 0,
721         .buf            = {NULL, NULL, NULL},
722         .bitmap         = NULL
723 };
724
725 /* IPv6 network traffic (errors) activity */
726 struct activity net_eip6_act = {
727         .id             = A_NET_EIP6,
728         .options        = AO_NULL,
729 #ifdef SOURCE_SADC
730         .f_count        = NULL,
731         .f_read         = wrap_read_net_eip6,
732 #endif
733 #ifdef SOURCE_SAR
734         .f_print        = print_net_eip6_stats,
735         .f_print_avg    = print_net_eip6_stats,
736 #endif
737 #ifdef SOURCE_SADF
738         .f_render       = render_net_eip6_stats,
739         .f_xml_print    = xml_print_net_eip6_stats,
740         .hdr_line       = "ihdrer6/s;iadrer6/s;iukwnp6/s;i2big6/s;idisc6/s;odisc6/s;"
741                           "inort6/s;onort6/s;asmf6/s;fragf6/s;itrpck6/s",
742         .name           = "A_NET_EIP6",
743 #endif
744         .nr             = 1,
745         .fsize          = STATS_NET_EIP6_SIZE,
746         .msize          = STATS_NET_EIP6_SIZE,
747         .opt_flags      = 0,
748         .buf            = {NULL, NULL, NULL},
749         .bitmap         = NULL
750 };
751
752 /* ICMPv6 network traffic activity */
753 struct activity net_icmp6_act = {
754         .id             = A_NET_ICMP6,
755         .options        = AO_NULL,
756 #ifdef SOURCE_SADC
757         .f_count        = NULL,
758         .f_read         = wrap_read_net_icmp6,
759 #endif
760 #ifdef SOURCE_SAR
761         .f_print        = print_net_icmp6_stats,
762         .f_print_avg    = print_net_icmp6_stats,
763 #endif
764 #ifdef SOURCE_SADF
765         .f_render       = render_net_icmp6_stats,
766         .f_xml_print    = xml_print_net_icmp6_stats,
767         .hdr_line       = "imsg6/s;omsg6/s;iech6/s;iechr6/s;oechr6/s;igmbq6/s;igmbr6/s;ogmbr6/s;"
768                           "igmbrd6/s;ogmbrd6/s;irtsol6/s;ortsol6/s;irtad6/s;inbsol6/s;onbsol6/s;"
769                           "inbad6/s;onbad6/s",
770         .name           = "A_NET_ICMP6",
771 #endif
772         .nr             = 1,
773         .fsize          = STATS_NET_ICMP6_SIZE,
774         .msize          = STATS_NET_ICMP6_SIZE,
775         .opt_flags      = 0,
776         .buf            = {NULL, NULL, NULL},
777         .bitmap         = NULL
778 };
779
780 /* ICMPv6 network traffic (errors) activity */
781 struct activity net_eicmp6_act = {
782         .id             = A_NET_EICMP6,
783         .options        = AO_NULL,
784 #ifdef SOURCE_SADC
785         .f_count        = NULL,
786         .f_read         = wrap_read_net_eicmp6,
787 #endif
788 #ifdef SOURCE_SAR
789         .f_print        = print_net_eicmp6_stats,
790         .f_print_avg    = print_net_eicmp6_stats,
791 #endif
792 #ifdef SOURCE_SADF
793         .f_render       = render_net_eicmp6_stats,
794         .f_xml_print    = xml_print_net_eicmp6_stats,
795         .hdr_line       = "ierr6/s;idtunr6/s;odtunr6/s;itmex6/s;otmex6/s;"
796                           "iprmpb6/s;oprmpb6/s;iredir6/s;oredir6/s;ipck2b6/s;opck2b6/s",
797         .name           = "A_NET_EICMP6",
798 #endif
799         .nr             = 1,
800         .fsize          = STATS_NET_EICMP6_SIZE,
801         .msize          = STATS_NET_EICMP6_SIZE,
802         .opt_flags      = 0,
803         .buf            = {NULL, NULL, NULL},
804         .bitmap         = NULL
805 };
806
807 /* UDPv6 network traffic activity */
808 struct activity net_udp6_act = {
809         .id             = A_NET_UDP6,
810         .options        = AO_CLOSE_MARKUP,
811 #ifdef SOURCE_SADC
812         .f_count        = NULL,
813         .f_read         = wrap_read_net_udp6,
814 #endif
815 #ifdef SOURCE_SAR
816         .f_print        = print_net_udp6_stats,
817         .f_print_avg    = print_net_udp6_stats,
818 #endif
819 #ifdef SOURCE_SADF
820         .f_render       = render_net_udp6_stats,
821         .f_xml_print    = xml_print_net_udp6_stats,
822         .hdr_line       = "idgm6/s;odgm6/s;noport6/s;idgmer6/s",
823         .name           = "A_NET_UDP6",
824 #endif
825         .nr             = 1,
826         .fsize          = STATS_NET_UDP6_SIZE,
827         .msize          = STATS_NET_UDP6_SIZE,
828         .opt_flags      = 0,
829         .buf            = {NULL, NULL, NULL},
830         .bitmap         = NULL
831 };
832
833 /* CPU frequency */
834 struct activity pwr_cpufreq_act = {
835         .id             = A_PWR_CPUFREQ,
836         .options        = AO_NULL,
837 #ifdef SOURCE_SADC
838         .f_count        = wrap_get_cpu_nr,
839         .f_read         = wrap_read_cpuinfo,
840 #endif
841 #ifdef SOURCE_SAR
842         .f_print        = print_pwr_cpufreq_stats,
843         .f_print_avg    = print_avg_pwr_cpufreq_stats,
844 #endif
845 #ifdef SOURCE_SADF
846         .f_render       = render_pwr_cpufreq_stats,
847         .f_xml_print    = xml_print_pwr_cpufreq_stats,
848         .hdr_line       = "CPU;MHz",
849         .name           = "A_PWR_CPUFREQ",
850 #endif
851         .nr             = -1,
852         .fsize          = STATS_PWR_CPUFREQ_SIZE,
853         .msize          = STATS_PWR_CPUFREQ_SIZE,
854         .opt_flags      = 0,
855         .buf            = {NULL, NULL, NULL},
856         .bitmap         = &cpu_bitmap
857 };
858
859 /* Fan */
860 struct activity pwr_fan_act = {
861         .id             = A_PWR_FAN,
862         .options        = AO_NULL,
863 #ifdef SOURCE_SADC
864         .f_count        = wrap_get_fan_nr,
865         .f_read         = wrap_read_fan,
866 #endif
867 #ifdef SOURCE_SAR
868         .f_print        = print_pwr_fan_stats,
869         .f_print_avg    = print_avg_pwr_fan_stats,
870 #endif
871 #ifdef SOURCE_SADF
872         .f_render       = render_pwr_fan_stats,
873         .f_xml_print    = xml_print_pwr_fan_stats,
874         .hdr_line       = "device;FAN;rpm;drpm",
875         .name           = "A_PWR_FAN",
876 #endif
877         .nr             = -1,
878         .fsize          = STATS_PWR_FAN_SIZE,
879         .msize          = STATS_PWR_FAN_SIZE,
880         .opt_flags      = 0,
881         .buf            = {NULL, NULL, NULL},
882         .bitmap         = NULL
883 };
884
885 /* Temperature */
886 struct activity pwr_temp_act = {
887         .id             = A_PWR_TEMP,
888         .options        = AO_NULL,
889 #ifdef SOURCE_SADC
890         .f_count        = wrap_get_temp_nr,
891         .f_read         = wrap_read_temp,
892 #endif
893 #ifdef SOURCE_SAR
894         .f_print        = print_pwr_temp_stats,
895         .f_print_avg    = print_avg_pwr_temp_stats,
896 #endif
897 #ifdef SOURCE_SADF
898         .f_render       = render_pwr_temp_stats,
899         .f_xml_print    = xml_print_pwr_temp_stats,
900         .hdr_line       = "device;TEMP;degC;%temp",
901         .name           = "A_PWR_TEMP",
902 #endif
903         .nr             = -1,
904         .fsize          = STATS_PWR_TEMP_SIZE,
905         .msize          = STATS_PWR_TEMP_SIZE,
906         .opt_flags      = 0,
907         .buf            = {NULL, NULL, NULL},
908         .bitmap         = NULL
909 };
910
911 /* Voltage inputs */
912 struct activity pwr_in_act = {
913         .id             = A_PWR_IN,
914         .options        = AO_CLOSE_MARKUP,
915 #ifdef SOURCE_SADC
916         .f_count        = wrap_get_in_nr,
917         .f_read         = wrap_read_in,
918 #endif
919 #ifdef SOURCE_SAR
920         .f_print        = print_pwr_in_stats,
921         .f_print_avg    = print_avg_pwr_in_stats,
922 #endif
923 #ifdef SOURCE_SADF
924         .f_render       = render_pwr_in_stats,
925         .f_xml_print    = xml_print_pwr_in_stats,
926         .hdr_line       = "device;IN;inV;%in",
927         .name           = "A_PWR_IN",
928 #endif
929         .nr             = -1,
930         .fsize          = STATS_PWR_IN_SIZE,
931         .msize          = STATS_PWR_IN_SIZE,
932         .opt_flags      = 0,
933         .buf            = {NULL, NULL, NULL},
934         .bitmap         = NULL
935 };
936
937
938 /*
939  * Array of activities.
940  */
941 struct activity *act[NR_ACT] = {
942         &cpu_act,
943         &pcsw_act,
944         &irq_act,
945         &swap_act,
946         &paging_act,
947         &io_act,
948         &memory_act,
949         &ktables_act,
950         &queue_act,
951         &serial_act,
952         &disk_act,
953         &net_dev_act,
954         &net_edev_act,
955         &net_nfs_act,
956         &net_nfsd_act,
957         &net_sock_act,
958         &net_ip_act,
959         &net_eip_act,
960         &net_icmp_act,
961         &net_eicmp_act,
962         &net_tcp_act,
963         &net_etcp_act,
964         &net_udp_act,
965         &net_sock6_act,
966         &net_ip6_act,
967         &net_eip6_act,
968         &net_icmp6_act,
969         &net_eicmp6_act,
970         &net_udp6_act,
971         &pwr_cpufreq_act,
972         &pwr_fan_act,
973         &pwr_temp_act,
974         &pwr_in_act
975 };