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