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