@cryptotaxi247 / netdata-1 / commits / edb81eff2

all charts have now options in config file

Costa Tsaousis (ktsaou) committed Apr 27, 2014 at 07:09 UTC edb81eff27048b5f390ce3a52158aad554ae6be6
1 file changed +379 -280
netdata.c
+379 -280
@@ -3765,6 +3765,16 @@ int do_proc_net_netstat() {
3765 // /proc/net/stat/nf_conntrack processor
3766
3767 int do_proc_net_stat_conntrack() {
3768 + static int do_sockets = -1, do_new = -1, do_changes = -1, do_expect = -1, do_search = -1, do_errors = -1;
3769 +
3770 + if(do_sockets == -1) do_sockets = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connections", 1);
3771 + if(do_new == -1) do_new = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter new connections", 1);
3772 + if(do_changes == -1) do_changes = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection changes", 1);
3773 + if(do_expect == -1) do_expect = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection expectations", 1);
3774 + if(do_search == -1) do_search = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection searches", 1);
3775 + if(do_errors == -1) do_errors = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter errors", 1);
3776 +
3777 +
3778 char buffer[MAX_PROC_NET_STAT_CONNTRACK_LINE+1] = "";
3779
3780 FILE *fp = fopen("/proc/net/stat/nf_conntrack", "r");
@@ -3813,109 +3823,123 @@ int do_proc_net_stat_conntrack() {
3823 }
3824 fclose(fp);
3825
3826 + RRD_STATS *st;
3827 +
3828 // --------------------------------------------------------------------
3829
3818 - RRD_STATS *st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".sockets");
3819 - if(!st) {
3820 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "sockets", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connections", "active connections", 1000);
3830 + if(do_sockets) {
3831 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".sockets");
3832 + if(!st) {
3833 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "sockets", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connections", "active connections", 1000);
3834
3822 - rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
3823 - }
3824 - else rrd_stats_next(st);
3835 + rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
3836 + }
3837 + else rrd_stats_next(st);
3838
3826 - rrd_stats_dimension_set(st, "connections", &aentries, NULL);
3827 - rrd_stats_done(st);
3839 + rrd_stats_dimension_set(st, "connections", &aentries, NULL);
3840 + rrd_stats_done(st);
3841 + }
3842
3843 // --------------------------------------------------------------------
3844
3831 - st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".new");
3832 - if(!st) {
3833 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "new", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter New Connections", "connections/s", 1001);
3845 + if(do_new) {
3846 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".new");
3847 + if(!st) {
3848 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "new", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter New Connections", "connections/s", 1001);
3849
3835 - rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3836 - rrd_stats_dimension_add(st, "ignore", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3837 - rrd_stats_dimension_add(st, "invalid", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3838 - }
3839 - else rrd_stats_next(st);
3850 + rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3851 + rrd_stats_dimension_add(st, "ignore", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3852 + rrd_stats_dimension_add(st, "invalid", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3853 + }
3854 + else rrd_stats_next(st);
3855
3841 - rrd_stats_dimension_set(st, "new", &anew, NULL);
3842 - rrd_stats_dimension_set(st, "ignore", &aignore, NULL);
3843 - rrd_stats_dimension_set(st, "invalid", &ainvalid, NULL);
3844 - rrd_stats_done(st);
3856 + rrd_stats_dimension_set(st, "new", &anew, NULL);
3857 + rrd_stats_dimension_set(st, "ignore", &aignore, NULL);
3858 + rrd_stats_dimension_set(st, "invalid", &ainvalid, NULL);
3859 + rrd_stats_done(st);
3860 + }
3861
3862 // --------------------------------------------------------------------
3863
3848 - st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".changes");
3849 - if(!st) {
3850 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "changes", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Changes", "changes/s", 1002);
3851 - st->isdetail = 1;
3864 + if(do_changes) {
3865 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".changes");
3866 + if(!st) {
3867 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "changes", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Changes", "changes/s", 1002);
3868 + st->isdetail = 1;
3869
3853 - rrd_stats_dimension_add(st, "inserted", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3854 - rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3855 - rrd_stats_dimension_add(st, "delete_list", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3856 - }
3857 - else rrd_stats_next(st);
3870 + rrd_stats_dimension_add(st, "inserted", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3871 + rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3872 + rrd_stats_dimension_add(st, "delete_list", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3873 + }
3874 + else rrd_stats_next(st);
3875
3859 - rrd_stats_dimension_set(st, "inserted", &ainsert, NULL);
3860 - rrd_stats_dimension_set(st, "deleted", &adelete, NULL);
3861 - rrd_stats_dimension_set(st, "delete_list", &adelete_list, NULL);
3862 - rrd_stats_done(st);
3876 + rrd_stats_dimension_set(st, "inserted", &ainsert, NULL);
3877 + rrd_stats_dimension_set(st, "deleted", &adelete, NULL);
3878 + rrd_stats_dimension_set(st, "delete_list", &adelete_list, NULL);
3879 + rrd_stats_done(st);
3880 + }
3881
3882 // --------------------------------------------------------------------
3883
3866 - st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".expect");
3867 - if(!st) {
3868 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "expect", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Expectations", "expectations/s", 1003);
3869 - st->isdetail = 1;
3884 + if(do_expect) {
3885 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".expect");
3886 + if(!st) {
3887 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "expect", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Expectations", "expectations/s", 1003);
3888 + st->isdetail = 1;
3889
3871 - rrd_stats_dimension_add(st, "created", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3872 - rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3873 - rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3874 - }
3875 - else rrd_stats_next(st);
3890 + rrd_stats_dimension_add(st, "created", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3891 + rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3892 + rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3893 + }
3894 + else rrd_stats_next(st);
3895
3877 - rrd_stats_dimension_set(st, "created", &aexpect_create, NULL);
3878 - rrd_stats_dimension_set(st, "deleted", &aexpect_delete, NULL);
3879 - rrd_stats_dimension_set(st, "new", &aexpect_new, NULL);
3880 - rrd_stats_done(st);
3896 + rrd_stats_dimension_set(st, "created", &aexpect_create, NULL);
3897 + rrd_stats_dimension_set(st, "deleted", &aexpect_delete, NULL);
3898 + rrd_stats_dimension_set(st, "new", &aexpect_new, NULL);
3899 + rrd_stats_done(st);
3900 + }
3901
3902 // --------------------------------------------------------------------
3903
3884 - st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".search");
3885 - if(!st) {
3886 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "search", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Searches", "searches/s", 1010);
3887 - st->isdetail = 1;
3904 + if(do_search) {
3905 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".search");
3906 + if(!st) {
3907 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "search", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Searches", "searches/s", 1010);
3908 + st->isdetail = 1;
3909
3889 - rrd_stats_dimension_add(st, "searched", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3890 - rrd_stats_dimension_add(st, "restarted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3891 - rrd_stats_dimension_add(st, "found", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3892 - }
3893 - else rrd_stats_next(st);
3910 + rrd_stats_dimension_add(st, "searched", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3911 + rrd_stats_dimension_add(st, "restarted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3912 + rrd_stats_dimension_add(st, "found", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3913 + }
3914 + else rrd_stats_next(st);
3915
3895 - rrd_stats_dimension_set(st, "searched", &asearched, NULL);
3896 - rrd_stats_dimension_set(st, "restarted", &asearch_restart, NULL);
3897 - rrd_stats_dimension_set(st, "found", &afound, NULL);
3898 - rrd_stats_done(st);
3916 + rrd_stats_dimension_set(st, "searched", &asearched, NULL);
3917 + rrd_stats_dimension_set(st, "restarted", &asearch_restart, NULL);
3918 + rrd_stats_dimension_set(st, "found", &afound, NULL);
3919 + rrd_stats_done(st);
3920 + }
3921
3922 // --------------------------------------------------------------------
3923
3902 - st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".errors");
3903 - if(!st) {
3904 - st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "errors", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Errors", "events/s", 1005);
3905 - st->isdetail = 1;
3924 + if(do_errors) {
3925 + st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".errors");
3926 + if(!st) {
3927 + st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "errors", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Errors", "events/s", 1005);
3928 + st->isdetail = 1;
3929
3907 - rrd_stats_dimension_add(st, "icmp_error", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3908 - rrd_stats_dimension_add(st, "insert_failed", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3909 - rrd_stats_dimension_add(st, "drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3910 - rrd_stats_dimension_add(st, "early_drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3911 - }
3912 - else rrd_stats_next(st);
3930 + rrd_stats_dimension_add(st, "icmp_error", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3931 + rrd_stats_dimension_add(st, "insert_failed", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3932 + rrd_stats_dimension_add(st, "drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3933 + rrd_stats_dimension_add(st, "early_drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3934 + }
3935 + else rrd_stats_next(st);
3936
3914 - rrd_stats_dimension_set(st, "icmp_error", &aicmp_error, NULL);
3915 - rrd_stats_dimension_set(st, "insert_failed", &ainsert_failed, NULL);
3916 - rrd_stats_dimension_set(st, "drop", &adrop, NULL);
3917 - rrd_stats_dimension_set(st, "early_drop", &aearly_drop, NULL);
3918 - rrd_stats_done(st);
3937 + rrd_stats_dimension_set(st, "icmp_error", &aicmp_error, NULL);
3938 + rrd_stats_dimension_set(st, "insert_failed", &ainsert_failed, NULL);
3939 + rrd_stats_dimension_set(st, "drop", &adrop, NULL);
3940 + rrd_stats_dimension_set(st, "early_drop", &aearly_drop, NULL);
3941 + rrd_stats_done(st);
3942 + }
3943
3944 return 0;
3945 }
@@ -3924,6 +3948,12 @@ int do_proc_net_stat_conntrack() {
3948 // /proc/net/ip_vs_stats processor
3949
3950 int do_proc_net_ip_vs_stats() {
3951 + static int do_bandwidth = -1, do_sockets = -1, do_packets = -1;
3952 +
3953 + if(do_bandwidth == -1) do_bandwidth = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS bandwidth", 1);
3954 + if(do_sockets == -1) do_sockets = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS connections", 1);
3955 + if(do_packets == -1) do_packets = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS packets", 1);
3956 +
3957 char buffer[MAX_PROC_NET_IPVS_LINE+1] = "";
3958
3959 FILE *fp = fopen("/proc/net/ip_vs_stats", "r");
@@ -3963,53 +3993,70 @@ int do_proc_net_ip_vs_stats() {
3993
3994 fclose(fp);
3995
3996 + RRD_STATS *st;
3997 +
3998 // --------------------------------------------------------------------
3999
3968 - RRD_STATS *st = rrd_stats_find(RRD_TYPE_NET_IPVS ".sockets");
3969 - if(!st) {
3970 - st = rrd_stats_create(RRD_TYPE_NET_IPVS, "sockets", NULL, RRD_TYPE_NET_IPVS, "IPVS New Connections", "connections/s", 1001);
4000 + if(do_sockets) {
4001 + st = rrd_stats_find(RRD_TYPE_NET_IPVS ".sockets");
4002 + if(!st) {
4003 + st = rrd_stats_create(RRD_TYPE_NET_IPVS, "sockets", NULL, RRD_TYPE_NET_IPVS, "IPVS New Connections", "connections/s", 1001);
4004
3972 - rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3973 - }
3974 - else rrd_stats_next(st);
4005 + rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4006 + }
4007 + else rrd_stats_next(st);
4008
3976 - rrd_stats_dimension_set(st, "connections", &entries, NULL);
3977 - rrd_stats_done(st);
4009 + rrd_stats_dimension_set(st, "connections", &entries, NULL);
4010 + rrd_stats_done(st);
4011 + }
4012
4013 // --------------------------------------------------------------------
4014
3981 - st = rrd_stats_find(RRD_TYPE_NET_IPVS ".packets");
3982 - if(!st) {
3983 - st = rrd_stats_create(RRD_TYPE_NET_IPVS, "packets", NULL, RRD_TYPE_NET_IPVS, "IPVS Packets", "packets/s", 1002);
4015 + if(do_packets) {
4016 + st = rrd_stats_find(RRD_TYPE_NET_IPVS ".packets");
4017 + if(!st) {
4018 + st = rrd_stats_create(RRD_TYPE_NET_IPVS, "packets", NULL, RRD_TYPE_NET_IPVS, "IPVS Packets", "packets/s", 1002);
4019
3985 - rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3986 - rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3987 - }
3988 - else rrd_stats_next(st);
4020 + rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4021 + rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4022 + }
4023 + else rrd_stats_next(st);
4024
3990 - rrd_stats_dimension_set(st, "received", &InPackets, NULL);
3991 - rrd_stats_dimension_set(st, "sent", &OutPackets, NULL);
3992 - rrd_stats_done(st);
4025 + rrd_stats_dimension_set(st, "received", &InPackets, NULL);
4026 + rrd_stats_dimension_set(st, "sent", &OutPackets, NULL);
4027 + rrd_stats_done(st);
4028 + }
4029
4030 // --------------------------------------------------------------------
4031
3996 - st = rrd_stats_find(RRD_TYPE_NET_IPVS ".net");
3997 - if(!st) {
3998 - st = rrd_stats_create(RRD_TYPE_NET_IPVS, "net", NULL, RRD_TYPE_NET_IPVS, "IPVS Bandwidth", "kilobits/s", 1000);
4032 + if(do_bandwidth) {
4033 + st = rrd_stats_find(RRD_TYPE_NET_IPVS ".net");
4034 + if(!st) {
4035 + st = rrd_stats_create(RRD_TYPE_NET_IPVS, "net", NULL, RRD_TYPE_NET_IPVS, "IPVS Bandwidth", "kilobits/s", 1000);
4036
4000 - rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4001 - rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4002 - }
4003 - else rrd_stats_next(st);
4037 + rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4038 + rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4039 + }
4040 + else rrd_stats_next(st);
4041
4005 - rrd_stats_dimension_set(st, "received", &InBytes, NULL);
4006 - rrd_stats_dimension_set(st, "sent", &OutBytes, NULL);
4007 - rrd_stats_done(st);
4042 + rrd_stats_dimension_set(st, "received", &InBytes, NULL);
4043 + rrd_stats_dimension_set(st, "sent", &OutBytes, NULL);
4044 + rrd_stats_done(st);
4045 + }
4046
4047 return 0;
4048 }
4049
4050 int do_proc_stat() {
4051 + static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_processes = -1;
4052 +
4053 + if(do_cpu == -1) do_cpu = config_get_boolean("plugin:proc:/proc/stat", "cpu utilization", 1);
4054 + if(do_cpu_cores == -1) do_cpu_cores = config_get_boolean("plugin:proc:/proc/stat", "per cpu core utilization", 1);
4055 + if(do_interrupts == -1) do_interrupts = config_get_boolean("plugin:proc:/proc/stat", "cpu interrupts", 1);
4056 + if(do_context == -1) do_context = config_get_boolean("plugin:proc:/proc/stat", "context switches", 1);
4057 + if(do_forks == -1) do_forks = config_get_boolean("plugin:proc:/proc/stat", "processes started", 1);
4058 + if(do_processes == -1) do_processes = config_get_boolean("plugin:proc:/proc/stat", "processes running", 1);
4059 +
4060 char buffer[MAX_PROC_STAT_LINE+1] = "";
4061
4062 FILE *fp = fopen("/proc/stat", "r");
@@ -4019,6 +4066,7 @@ int do_proc_stat() {
4066 }
4067
4068 unsigned long long processes = 0, running = 0 , blocked = 0;
4069 + RRD_STATS *st;
4070
4071 for(;1;) {
4072 char *p = fgets(buffer, MAX_PROC_STAT_LINE, fp);
@@ -4037,45 +4085,49 @@ int do_proc_stat() {
4085 char *title = "Core utilization";
4086 char *type = RRD_TYPE_STAT;
4087 long priority = 1000;
4088 + int isthistotal = 0;
4089 if(strcmp(id, "cpu") == 0) {
4090 + isthistotal = 1;
4091 title = "Total CPU utilization";
4092 type = "system";
4093 priority = 100;
4094 }
4095
4046 - RRD_STATS *st = rrd_stats_find_bytype(type, id);
4047 - if(!st) {
4048 - st = rrd_stats_create(type, id, NULL, "cpu", title, "percentage", priority);
4049 -
4050 - long multiplier = 1;
4051 - long divisor = 1; // sysconf(_SC_CLK_TCK);
4052 -
4053 - rrd_stats_dimension_add(st, "guest_nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4054 - rrd_stats_dimension_add(st, "guest", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4055 - rrd_stats_dimension_add(st, "steal", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4056 - rrd_stats_dimension_add(st, "softirq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4057 - rrd_stats_dimension_add(st, "irq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4058 - rrd_stats_dimension_add(st, "user", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4059 - rrd_stats_dimension_add(st, "system", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4060 - rrd_stats_dimension_add(st, "nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4061 - rrd_stats_dimension_add(st, "iowait", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4062 -
4063 - rrd_stats_dimension_add(st, "idle", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4064 - rrd_stats_dimension_hide(st, "idle");
4065 - }
4066 - else rrd_stats_next(st);
4096 + if((isthistotal && do_cpu) || (!isthistotal && do_cpu_cores)) {
4097 + st = rrd_stats_find_bytype(type, id);
4098 + if(!st) {
4099 + st = rrd_stats_create(type, id, NULL, "cpu", title, "percentage", priority);
4100 +
4101 + long multiplier = 1;
4102 + long divisor = 1; // sysconf(_SC_CLK_TCK);
4103 +
4104 + rrd_stats_dimension_add(st, "guest_nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4105 + rrd_stats_dimension_add(st, "guest", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4106 + rrd_stats_dimension_add(st, "steal", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4107 + rrd_stats_dimension_add(st, "softirq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4108 + rrd_stats_dimension_add(st, "irq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4109 + rrd_stats_dimension_add(st, "user", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4110 + rrd_stats_dimension_add(st, "system", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4111 + rrd_stats_dimension_add(st, "nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4112 + rrd_stats_dimension_add(st, "iowait", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4113 +
4114 + rrd_stats_dimension_add(st, "idle", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4115 + rrd_stats_dimension_hide(st, "idle");
4116 + }
4117 + else rrd_stats_next(st);
4118
4068 - rrd_stats_dimension_set(st, "user", &user, NULL);
4069 - rrd_stats_dimension_set(st, "nice", &nice, NULL);
4070 - rrd_stats_dimension_set(st, "system", &system, NULL);
4071 - rrd_stats_dimension_set(st, "idle", &idle, NULL);
4072 - rrd_stats_dimension_set(st, "iowait", &iowait, NULL);
4073 - rrd_stats_dimension_set(st, "irq", &irq, NULL);
4074 - rrd_stats_dimension_set(st, "softirq", &softirq, NULL);
4075 - rrd_stats_dimension_set(st, "steal", &steal, NULL);
4076 - rrd_stats_dimension_set(st, "guest", &guest, NULL);
4077 - rrd_stats_dimension_set(st, "guest_nice", &guest_nice, NULL);
4078 - rrd_stats_done(st);
4119 + rrd_stats_dimension_set(st, "user", &user, NULL);
4120 + rrd_stats_dimension_set(st, "nice", &nice, NULL);
4121 + rrd_stats_dimension_set(st, "system", &system, NULL);
4122 + rrd_stats_dimension_set(st, "idle", &idle, NULL);
4123 + rrd_stats_dimension_set(st, "iowait", &iowait, NULL);
4124 + rrd_stats_dimension_set(st, "irq", &irq, NULL);
4125 + rrd_stats_dimension_set(st, "softirq", &softirq, NULL);
4126 + rrd_stats_dimension_set(st, "steal", &steal, NULL);
4127 + rrd_stats_dimension_set(st, "guest", &guest, NULL);
4128 + rrd_stats_dimension_set(st, "guest_nice", &guest_nice, NULL);
4129 + rrd_stats_done(st);
4130 + }
4131 }
4132 else if(strncmp(p, "intr ", 5) == 0) {
4133 char id[MAX_PROC_STAT_NAME + 1];
@@ -4088,17 +4140,19 @@ int do_proc_stat() {
4140
4141 // --------------------------------------------------------------------
4142
4091 - RRD_STATS *st = rrd_stats_find_bytype("system", id);
4092 - if(!st) {
4093 - st = rrd_stats_create("system", id, NULL, "cpu", "CPU Interrupts", "interrupts/s", 900);
4094 - st->isdetail = 1;
4143 + if(do_interrupts) {
4144 + st = rrd_stats_find_bytype("system", id);
4145 + if(!st) {
4146 + st = rrd_stats_create("system", id, NULL, "cpu", "CPU Interrupts", "interrupts/s", 900);
4147 + st->isdetail = 1;
4148
4096 - rrd_stats_dimension_add(st, "interrupts", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4097 - }
4098 - else rrd_stats_next(st);
4149 + rrd_stats_dimension_add(st, "interrupts", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4150 + }
4151 + else rrd_stats_next(st);
4152
4100 - rrd_stats_dimension_set(st, "interrupts", &value, NULL);
4101 - rrd_stats_done(st);
4153 + rrd_stats_dimension_set(st, "interrupts", &value, NULL);
4154 + rrd_stats_done(st);
4155 + }
4156 }
4157 else if(strncmp(p, "ctxt ", 5) == 0) {
4158 char id[MAX_PROC_STAT_NAME + 1] = "";
@@ -4111,16 +4165,18 @@ int do_proc_stat() {
4165
4166 // --------------------------------------------------------------------
4167
4114 - RRD_STATS *st = rrd_stats_find_bytype("system", id);
4115 - if(!st) {
4116 - st = rrd_stats_create("system", id, NULL, "cpu", "CPU Context Switches", "context switches/s", 800);
4168 + if(do_context) {
4169 + st = rrd_stats_find_bytype("system", id);
4170 + if(!st) {
4171 + st = rrd_stats_create("system", id, NULL, "cpu", "CPU Context Switches", "context switches/s", 800);
4172
4118 - rrd_stats_dimension_add(st, "switches", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4119 - }
4120 - else rrd_stats_next(st);
4173 + rrd_stats_dimension_add(st, "switches", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4174 + }
4175 + else rrd_stats_next(st);
4176
4122 - rrd_stats_dimension_set(st, "switches", &value, NULL);
4123 - rrd_stats_done(st);
4177 + rrd_stats_dimension_set(st, "switches", &value, NULL);
4178 + rrd_stats_done(st);
4179 + }
4180 }
4181 else if(strncmp(p, "processes ", 10) == 0) {
4182 char id[MAX_PROC_STAT_NAME + 1] = "";
@@ -4160,32 +4216,37 @@ int do_proc_stat() {
4216
4217 // --------------------------------------------------------------------
4218
4163 - RRD_STATS *st = rrd_stats_find_bytype("system", "forks");
4164 - if(!st) {
4165 - st = rrd_stats_create("system", "forks", NULL, "cpu", "New Processes", "processes/s", 700);
4166 - st->isdetail = 1;
4219 + if(do_forks) {
4220 + st = rrd_stats_find_bytype("system", "forks");
4221 + if(!st) {
4222 + st = rrd_stats_create("system", "forks", NULL, "cpu", "New Processes", "processes/s", 700);
4223 + st->isdetail = 1;
4224
4168 - rrd_stats_dimension_add(st, "started", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4169 - }
4170 - else rrd_stats_next(st);
4225 + rrd_stats_dimension_add(st, "started", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4226 + }
4227 + else rrd_stats_next(st);
4228
4172 - rrd_stats_dimension_set(st, "started", &processes, NULL);
4173 - rrd_stats_done(st);
4229 + rrd_stats_dimension_set(st, "started", &processes, NULL);
4230 + rrd_stats_done(st);
4231 + }
4232
4233 // --------------------------------------------------------------------
4234
4177 - st = rrd_stats_find_bytype("system", "processes");
4178 - if(!st) {
4179 - st = rrd_stats_create("system", "processes", NULL, "cpu", "Processes", "processes", 600);
4235 + if(do_processes) {
4236 + st = rrd_stats_find_bytype("system", "processes");
4237 + if(!st) {
4238 + st = rrd_stats_create("system", "processes", NULL, "cpu", "Processes", "processes", 600);
4239 +
4240 + rrd_stats_dimension_add(st, "running", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4241 + rrd_stats_dimension_add(st, "blocked", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4242 + }
4243 + else rrd_stats_next(st);
4244
4181 - rrd_stats_dimension_add(st, "running", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4182 - rrd_stats_dimension_add(st, "blocked", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4245 + rrd_stats_dimension_set(st, "running", &running, NULL);
4246 + rrd_stats_dimension_set(st, "blocked", &blocked, NULL);
4247 + rrd_stats_done(st);
4248 }
4184 - else rrd_stats_next(st);
4249
4186 - rrd_stats_dimension_set(st, "running", &running, NULL);
4187 - rrd_stats_dimension_set(st, "blocked", &blocked, NULL);
4188 - rrd_stats_done(st);
4250 return 0;
4251 }
4252
@@ -4196,6 +4257,16 @@ int do_proc_stat() {
4257 #define MAX_PROC_MEMINFO_NAME 1024
4258
4259 int do_proc_meminfo() {
4260 + static int do_ram = -1, do_swap = -1, do_hwcorrupt = -1, do_committed = -1, do_writeback = -1, do_kernel = -1, do_slab = -1;
4261 +
4262 + if(do_ram == -1) do_ram = config_get_boolean("plugin:proc:/proc/meminfo", "system ram", 1);
4263 + if(do_swap == -1) do_swap = config_get_boolean("plugin:proc:/proc/meminfo", "system swap", 1);
4264 + if(do_hwcorrupt == -1) do_hwcorrupt = config_get_boolean("plugin:proc:/proc/meminfo", "hardware corrupted ECC", 1);
4265 + if(do_committed == -1) do_committed = config_get_boolean("plugin:proc:/proc/meminfo", "committed memory", 1);
4266 + if(do_writeback == -1) do_writeback = config_get_boolean("plugin:proc:/proc/meminfo", "writeback memory", 1);
4267 + if(do_kernel == -1) do_kernel = config_get_boolean("plugin:proc:/proc/meminfo", "kernel memory", 1);
4268 + if(do_slab == -1) do_slab = config_get_boolean("plugin:proc:/proc/meminfo", "slab memory", 1);
4269 +
4270 char buffer[MAX_PROC_MEMINFO_LINE+1] = "";
4271
4272 FILE *fp = fopen("/proc/meminfo", "r");
@@ -4275,49 +4346,55 @@ int do_proc_meminfo() {
4346 }
4347 fclose(fp);
4348
4349 + RRD_STATS *st;
4350 +
4351 // --------------------------------------------------------------------
4352
4353 // http://stackoverflow.com/questions/3019748/how-to-reliably-measure-available-memory-in-linux
4354 unsigned long long MemUsed = MemTotal - MemFree - Cached - Buffers;
4355
4283 - RRD_STATS *st = rrd_stats_find("system.ram");
4284 - if(!st) {
4285 - st = rrd_stats_create("system", "ram", NULL, "mem", "System RAM", "MB", 200);
4356 + if(do_ram) {
4357 + st = rrd_stats_find("system.ram");
4358 + if(!st) {
4359 + st = rrd_stats_create("system", "ram", NULL, "mem", "System RAM", "MB", 200);
4360
4287 - rrd_stats_dimension_add(st, "buffers", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4288 - rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4289 - rrd_stats_dimension_add(st, "cached", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4290 - rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4291 - }
4292 - else rrd_stats_next(st);
4361 + rrd_stats_dimension_add(st, "buffers", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4362 + rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4363 + rrd_stats_dimension_add(st, "cached", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4364 + rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4365 + }
4366 + else rrd_stats_next(st);
4367
4294 - rrd_stats_dimension_set(st, "used", &MemUsed, NULL);
4295 - rrd_stats_dimension_set(st, "free", &MemFree, NULL);
4296 - rrd_stats_dimension_set(st, "cached", &Cached, NULL);
4297 - rrd_stats_dimension_set(st, "buffers", &Buffers, NULL);
4298 - rrd_stats_done(st);
4368 + rrd_stats_dimension_set(st, "used", &MemUsed, NULL);
4369 + rrd_stats_dimension_set(st, "free", &MemFree, NULL);
4370 + rrd_stats_dimension_set(st, "cached", &Cached, NULL);
4371 + rrd_stats_dimension_set(st, "buffers", &Buffers, NULL);
4372 + rrd_stats_done(st);
4373 + }
4374
4375 // --------------------------------------------------------------------
4376
4377 unsigned long long SwapUsed = SwapTotal - SwapFree;
4378
4304 - st = rrd_stats_find("system.swap");
4305 - if(!st) {
4306 - st = rrd_stats_create("system", "swap", NULL, "mem", "System Swap", "MB", 201);
4307 - st->isdetail = 1;
4379 + if(do_swap) {
4380 + st = rrd_stats_find("system.swap");
4381 + if(!st) {
4382 + st = rrd_stats_create("system", "swap", NULL, "mem", "System Swap", "MB", 201);
4383 + st->isdetail = 1;
4384
4309 - rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4310 - rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4311 - }
4312 - else rrd_stats_next(st);
4385 + rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4386 + rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4387 + }
4388 + else rrd_stats_next(st);
4389
4314 - rrd_stats_dimension_set(st, "used", &SwapUsed, NULL);
4315 - rrd_stats_dimension_set(st, "free", &SwapFree, NULL);
4316 - rrd_stats_done(st);
4390 + rrd_stats_dimension_set(st, "used", &SwapUsed, NULL);
4391 + rrd_stats_dimension_set(st, "free", &SwapFree, NULL);
4392 + rrd_stats_done(st);
4393 + }
4394
4395 // --------------------------------------------------------------------
4396
4320 - if(hwcorrupted) {
4397 + if(hwcorrupted && do_hwcorrupt) {
4398 st = rrd_stats_find("mem.hwcorrupt");
4399 if(!st) {
4400 st = rrd_stats_create("mem", "hwcorrupt", NULL, "mem", "Hardware Corrupted ECC", "MB", 9000);
@@ -4333,75 +4410,83 @@ int do_proc_meminfo() {
4410
4411 // --------------------------------------------------------------------
4412
4336 - st = rrd_stats_find("mem.committed");
4337 - if(!st) {
4338 - st = rrd_stats_create("mem", "committed", NULL, "mem", "Committed (Allocated) Memory", "MB", 5000);
4339 - st->isdetail = 1;
4413 + if(do_committed) {
4414 + st = rrd_stats_find("mem.committed");
4415 + if(!st) {
4416 + st = rrd_stats_create("mem", "committed", NULL, "mem", "Committed (Allocated) Memory", "MB", 5000);
4417 + st->isdetail = 1;
4418
4341 - rrd_stats_dimension_add(st, "Committed_AS", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4342 - }
4343 - else rrd_stats_next(st);
4419 + rrd_stats_dimension_add(st, "Committed_AS", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4420 + }
4421 + else rrd_stats_next(st);
4422
4345 - rrd_stats_dimension_set(st, "Committed_AS", &Committed_AS, NULL);
4346 - rrd_stats_done(st);
4423 + rrd_stats_dimension_set(st, "Committed_AS", &Committed_AS, NULL);
4424 + rrd_stats_done(st);
4425 + }
4426
4427 // --------------------------------------------------------------------
4428
4350 - st = rrd_stats_find("mem.writeback");
4351 - if(!st) {
4352 - st = rrd_stats_create("mem", "writeback", NULL, "mem", "Writeback Memory", "MB", 4000);
4353 - st->isdetail = 1;
4354 -
4355 - rrd_stats_dimension_add(st, "Dirty", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4356 - rrd_stats_dimension_add(st, "Writeback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4357 - rrd_stats_dimension_add(st, "FuseWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4358 - rrd_stats_dimension_add(st, "NfsWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4359 - rrd_stats_dimension_add(st, "Bounce", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4360 - }
4361 - else rrd_stats_next(st);
4362 -
4363 - rrd_stats_dimension_set(st, "Dirty", &Dirty, NULL);
4364 - rrd_stats_dimension_set(st, "Writeback", &Writeback, NULL);
4365 - rrd_stats_dimension_set(st, "FuseWriteback", &WritebackTmp, NULL);
4366 - rrd_stats_dimension_set(st, "NfsWriteback", &NFS_Unstable, NULL);
4367 - rrd_stats_dimension_set(st, "Bounce", &Bounce, NULL);
4368 - rrd_stats_done(st);
4429 + if(do_writeback) {
4430 + st = rrd_stats_find("mem.writeback");
4431 + if(!st) {
4432 + st = rrd_stats_create("mem", "writeback", NULL, "mem", "Writeback Memory", "MB", 4000);
4433 + st->isdetail = 1;
4434 +
4435 + rrd_stats_dimension_add(st, "Dirty", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4436 + rrd_stats_dimension_add(st, "Writeback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4437 + rrd_stats_dimension_add(st, "FuseWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4438 + rrd_stats_dimension_add(st, "NfsWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4439 + rrd_stats_dimension_add(st, "Bounce", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4440 + }
4441 + else rrd_stats_next(st);
4442 +
4443 + rrd_stats_dimension_set(st, "Dirty", &Dirty, NULL);
4444 + rrd_stats_dimension_set(st, "Writeback", &Writeback, NULL);
4445 + rrd_stats_dimension_set(st, "FuseWriteback", &WritebackTmp, NULL);
4446 + rrd_stats_dimension_set(st, "NfsWriteback", &NFS_Unstable, NULL);
4447 + rrd_stats_dimension_set(st, "Bounce", &Bounce, NULL);
4448 + rrd_stats_done(st);
4449 + }
4450
4451 // --------------------------------------------------------------------
4452
4372 - st = rrd_stats_find("mem.kernel");
4373 - if(!st) {
4374 - st = rrd_stats_create("mem", "kernel", NULL, "mem", "Memory Used by Kernel", "MB", 6000);
4375 - st->isdetail = 1;
4453 + if(do_kernel) {
4454 + st = rrd_stats_find("mem.kernel");
4455 + if(!st) {
4456 + st = rrd_stats_create("mem", "kernel", NULL, "mem", "Memory Used by Kernel", "MB", 6000);
4457 + st->isdetail = 1;
4458
4377 - rrd_stats_dimension_add(st, "Slab", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4378 - rrd_stats_dimension_add(st, "KernelStack", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4379 - rrd_stats_dimension_add(st, "PageTables", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4380 - rrd_stats_dimension_add(st, "VmallocUsed", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4381 - }
4382 - else rrd_stats_next(st);
4459 + rrd_stats_dimension_add(st, "Slab", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4460 + rrd_stats_dimension_add(st, "KernelStack", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4461 + rrd_stats_dimension_add(st, "PageTables", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4462 + rrd_stats_dimension_add(st, "VmallocUsed", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4463 + }
4464 + else rrd_stats_next(st);
4465
4384 - rrd_stats_dimension_set(st, "KernelStack", &KernelStack, NULL);
4385 - rrd_stats_dimension_set(st, "Slab", &Slab, NULL);
4386 - rrd_stats_dimension_set(st, "PageTables", &PageTables, NULL);
4387 - rrd_stats_dimension_set(st, "VmallocUsed", &VmallocUsed, NULL);
4388 - rrd_stats_done(st);
4466 + rrd_stats_dimension_set(st, "KernelStack", &KernelStack, NULL);
4467 + rrd_stats_dimension_set(st, "Slab", &Slab, NULL);
4468 + rrd_stats_dimension_set(st, "PageTables", &PageTables, NULL);
4469 + rrd_stats_dimension_set(st, "VmallocUsed", &VmallocUsed, NULL);
4470 + rrd_stats_done(st);
4471 + }
4472
4473 // --------------------------------------------------------------------
4474
4392 - st = rrd_stats_find("mem.slab");
4393 - if(!st) {
4394 - st = rrd_stats_create("mem", "slab", NULL, "mem", "Reclaimable Kernel Memory", "MB", 6500);
4395 - st->isdetail = 1;
4475 + if(do_slab) {
4476 + st = rrd_stats_find("mem.slab");
4477 + if(!st) {
4478 + st = rrd_stats_create("mem", "slab", NULL, "mem", "Reclaimable Kernel Memory", "MB", 6500);
4479 + st->isdetail = 1;
4480
4397 - rrd_stats_dimension_add(st, "reclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4398 - rrd_stats_dimension_add(st, "unreclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4399 - }
4400 - else rrd_stats_next(st);
4481 + rrd_stats_dimension_add(st, "reclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4482 + rrd_stats_dimension_add(st, "unreclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4483 + }
4484 + else rrd_stats_next(st);
4485
4402 - rrd_stats_dimension_set(st, "reclaimable", &SReclaimable, NULL);
4403 - rrd_stats_dimension_set(st, "unreclaimable", &SUnreclaim, NULL);
4404 - rrd_stats_done(st);
4486 + rrd_stats_dimension_set(st, "reclaimable", &SReclaimable, NULL);
4487 + rrd_stats_dimension_set(st, "unreclaimable", &SUnreclaim, NULL);
4488 + rrd_stats_done(st);
4489 + }
4490
4491 return 0;
4492 }
@@ -4413,6 +4498,12 @@ int do_proc_meminfo() {
4498 #define MAX_PROC_VMSTAT_NAME 1024
4499
4500 int do_proc_vmstat() {
4501 + static int do_swapio = -1, do_io = -1, do_pgfaults = -1;
4502 +
4503 + if(do_swapio == -1) do_swapio = config_get_boolean("plugin:proc:/proc/vmstat", "swap i/o", 1);
4504 + if(do_io == -1) do_io = config_get_boolean("plugin:proc:/proc/vmstat", "disk i/o", 1);
4505 + if(do_pgfaults == -1) do_pgfaults = config_get_boolean("plugin:proc:/proc/vmstat", "memory page faults", 1);
4506 +
4507 char buffer[MAX_PROC_VMSTAT_LINE+1] = "";
4508
4509 FILE *fp = fopen("/proc/vmstat", "r");
@@ -4545,51 +4636,59 @@ int do_proc_vmstat() {
4636 }
4637 fclose(fp);
4638
4639 + RRD_STATS *st;
4640 +
4641 // --------------------------------------------------------------------
4642
4550 - RRD_STATS *st = rrd_stats_find("system.swapio");
4551 - if(!st) {
4552 - st = rrd_stats_create("system", "swapio", NULL, "mem", "Swap I/O", "kilobytes/s", 250);
4643 + if(do_swapio) {
4644 + st = rrd_stats_find("system.swapio");
4645 + if(!st) {
4646 + st = rrd_stats_create("system", "swapio", NULL, "mem", "Swap I/O", "kilobytes/s", 250);
4647
4554 - rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4555 - rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4556 - }
4557 - else rrd_stats_next(st);
4648 + rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4649 + rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4650 + }
4651 + else rrd_stats_next(st);
4652
4559 - rrd_stats_dimension_set(st, "in", &pswpin, NULL);
4560 - rrd_stats_dimension_set(st, "out", &pswpout, NULL);
4561 - rrd_stats_done(st);
4653 + rrd_stats_dimension_set(st, "in", &pswpin, NULL);
4654 + rrd_stats_dimension_set(st, "out", &pswpout, NULL);
4655 + rrd_stats_done(st);
4656 + }
4657
4658 // --------------------------------------------------------------------
4659
4565 - st = rrd_stats_find("system.io");
4566 - if(!st) {
4567 - st = rrd_stats_create("system", "io", NULL, "disk", "Disk I/O", "kilobytes/s", 150);
4660 + if(do_io) {
4661 + st = rrd_stats_find("system.io");
4662 + if(!st) {
4663 + st = rrd_stats_create("system", "io", NULL, "disk", "Disk I/O", "kilobytes/s", 150);
4664
4569 - rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4570 - rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4571 - }
4572 - else rrd_stats_next(st);
4665 + rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4666 + rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4667 + }
4668 + else rrd_stats_next(st);
4669
4574 - rrd_stats_dimension_set(st, "in", &pgpgin, NULL);
4575 - rrd_stats_dimension_set(st, "out", &pgpgout, NULL);
4576 - rrd_stats_done(st);
4670 + rrd_stats_dimension_set(st, "in", &pgpgin, NULL);
4671 + rrd_stats_dimension_set(st, "out", &pgpgout, NULL);
4672 + rrd_stats_done(st);
4673 + }
4674
4675 // --------------------------------------------------------------------
4676
4580 - st = rrd_stats_find("system.pgfaults");
4581 - if(!st) {
4582 - st = rrd_stats_create("system", "pgfaults", NULL, "mem", "Memory Page Faults", "page faults/s", 500);
4583 - st->isdetail = 1;
4677 + if(do_pgfaults) {
4678 + st = rrd_stats_find("system.pgfaults");
4679 + if(!st) {
4680 + st = rrd_stats_create("system", "pgfaults", NULL, "mem", "Memory Page Faults", "page faults/s", 500);
4681 + st->isdetail = 1;
4682
4585 - rrd_stats_dimension_add(st, "minor", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4586 - rrd_stats_dimension_add(st, "major", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4587 - }
4588 - else rrd_stats_next(st);
4683 + rrd_stats_dimension_add(st, "minor", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4684 + rrd_stats_dimension_add(st, "major", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4685 + }
4686 + else rrd_stats_next(st);
4687
4590 - rrd_stats_dimension_set(st, "minor", &pgfault, NULL);
4591 - rrd_stats_dimension_set(st, "major", &pgmajfault, NULL);
4592 - rrd_stats_done(st);
4688 + rrd_stats_dimension_set(st, "minor", &pgfault, NULL);
4689 + rrd_stats_dimension_set(st, "major", &pgmajfault, NULL);
4690 + rrd_stats_done(st);
4691 + }
4692
4693 return 0;
4694 }